我們找到了問題的根源,以在被送往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;
}
}
也許你應該發送的代碼中使用他們的錯誤報告系統,這是否給蘋果重複的例子。 – hotpaw2
不幸的是,這是連接到這麼多的代碼,這將是非常難以複製。我們很可能在連鎖店做錯了事情,但如果是這樣的話,它非常微妙,我們的小型測試應用程序似乎沒問題。我們不知道如何影響另一個應用,儘管如此,如果我們能夠發現我們可能能夠追蹤問題的根源。 –