2016-11-10 87 views
5

我們在應用程序中失去聲音(沒有聲音),但這會以某種方式導致所有其他應用程序也失去聲音。我不知道我們如何阻止來自Apple Music應用程序等外部應用程序的聲音。沒有聲音問題殺死設備上所有應用程序的音頻

我們都爲之傾倒我們AVAudioSession會議的內容,並沒有任何區別,我們可以在聲音工作,不看之間。我們已經證實,即使我們失去了聲音,路由輸出仍然是iPhone的揚聲器。

這是發生在iPhone 6S & 6S加上與揚聲器。我們可以通過更改輸出路徑來「修復」音頻,例如插入和拔下耳機。

怎麼可能衝擊發揮其他應用程序的聲音的能力,這可以幫助解決發生了什麼?

+0

也許你應該發送的代碼中使用他們的錯誤報告系統,這是否給蘋果重複的例子。 – hotpaw2

+0

不幸的是,這是連接到這麼多的代碼,這將是非常難以複製。我們很可能在連鎖店做錯了事情,但如果是這樣的話,它非常微妙,我們的小型測試應用程序似乎沒問題。我們不知道如何影響另一個應用,儘管如此,如果我們能夠發現我們可能能夠追蹤問題的根源。 –

回答

2

我們找到了問題的根源,以在被送往Core Audio的音頻緩存有壞的數據。具體來說,其中一個音頻處理步驟輸出的是NaN(非數字)數據,而不是+/- 1.0有效範圍內的浮點數。

看來,在某些設備上,如果該數據包含NaN的,它殺死了整個設備的音頻。

我們工作圍繞它通過音頻數據檢查NaN值循環,並將它們轉換爲0.0,而不是。注意檢查一個浮點數是否是NaN是一個奇怪的檢查(或者對我來說似乎很奇怪)。 NaN不等於任何東西,包括它本身。

一些僞代碼來解決這個問題,直到我們得到的是有一個適當的修復新庫:

float  *interleavedAudio; // pointer to a buffer of the audio data 
unsigned int numberOfSamples; // number of left/right samples in the audio buffer 
unsigned int numberOfLeftRightSamples = numberOfSamples * 2; // number of float values in the audio buffer 

// loop through each float in the audio data 
for (unsigned int i = 0; i < numberOfLeftRightSamples; i++) 
{ 
    float *sample = interleavedAudio + i; 

    // NaN is never equal to anything, including itself 
    if(*sample != *sample) 
    { 
     // This sample is NaN - force it to 0.0 so it doesn't corrupt the audio 
     *sample = 0.0; 
    } 
} 
相關問題