Core Audioに送信されたオーディオバッファに不良データが含まれているという問題の原因を突き止めました。具体的には、音声処理ステップの1つでは、+/- 1.0の有効範囲の浮動小数点数ではなく、NaN(非数)のデータを出力します。
一部のデバイスでは、データに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
残念ながら、これは非常に多くのコードに配線されているため、再現するのが非常に難しいでしょう。チェーン内で何か問題が起こっている可能性がありますが、そうであれば、それは非常に微妙で、小さなテストアプリは大丈夫です。しかし、他のアプリにどのように影響を与えることさえできるのかわからないので、問題の原因を突き止めることができればわかります。 –