Jim*_*ask 5 audio core-audio ios avaudiosession
我们的应用程序中正在丢失声音(没有声音),但这会导致所有其他应用程序也失去声音.我不知道我们怎么可能阻止来自Apple Music应用程序之类的外部应用程序的声音.
我们正在抛弃AVAudioSession会话的内容,在声音工作与否之间我们看不出任何差异.我们已经确认路线输出仍然是iPhone的扬声器,即使我们丢失了声音.
这种情况发生在带有扬声器的iPhone 6s和6s Plus上.我们可以通过改变输出路径来"修复"音频,例如插入和拔出耳机.
如何影响播放其他应用程序声音的能力,这可能有助于解决正在发生的事情?
我们追踪到问题的根源是发送到 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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
207 次 |
| 最近记录: |