2016-11-10 3 views
5

私たちのアプリでは音が鳴っていませんが、他のすべてのアプリケーションも音を失います。私はApple Music Appのような外部のアプリケーションからのサウンドをブロックすることがどのように可能なのかわかりません。デバイス上のすべてのアプリケーションの音声を音で消すことはありません

私たちはAVAudioSessionセッションの内容をダンプしていますが、サウンドが機能しているかどうかは分かりません。私たちは、音がなくなっても、ルートの出力がまだiPhoneのスピーカーであることを確認しました。

これは、iPhone 6s & 6s Plusスピーカーで発生しています。プラグインやヘッドフォンのプラグを抜くなど、出力ルートを変更してオーディオを「修正」することができます。

他のアプリのサウンドを再生する機能にどのように影響を与えることができますか?これは何が起こっているのかをトラブルシューティングするのに役立ちますか?

+0

をおそらくあなたは、彼らのバグレポーターシステムを使用してアップルにこれを実行するコードの再現性の例を送信する必要があります。 – hotpaw2

+0

残念ながら、これは非常に多くのコードに配線されているため、再現するのが非常に難しいでしょう。チェーン内で何か問題が起こっている可能性がありますが、そうであれば、それは非常に微妙で、小さなテストアプリは大丈夫です。しかし、他のアプリにどのように影響を与えることさえできるのかわからないので、問題の原因を突き止めることができればわかります。 –

答えて

2

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; 
    } 
} 
関連する問題