Ios 没有声音问题会终止设备上所有应用的音频
我们的应用程序正在丢失声音(没有声音),但这不知何故导致所有其他应用程序也丢失声音。我不知道我们怎么可能阻止来自外部应用程序(如苹果音乐应用程序)的声音 我们正在转储Ios 没有声音问题会终止设备上所有应用的音频,ios,audio,core-audio,avaudiosession,Ios,Audio,Core Audio,Avaudiosession,我们的应用程序正在丢失声音(没有声音),但这不知何故导致所有其他应用程序也丢失声音。我不知道我们怎么可能阻止来自外部应用程序(如苹果音乐应用程序)的声音 我们正在转储AVAudioSession会话的内容,我们看不到声音工作和不工作的区别。我们已经证实,即使我们失去了声音,路由输出仍然是iPhone的扬声器 这在iPhone 6s和6s Plus的扬声器上发生。我们可以通过改变输出路径来“修复”音频,例如插入和拔出耳机 如何影响其他应用程序播放声音的能力,这可能有助于解决正在发生的问题?我们找到
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;
}
}
float*interleavedAudio;//指向音频数据缓冲区的指针
无符号整数numberOfSamples;//音频缓冲区中的左/右采样数
无符号整数numberOfLeftRightSamples=numberOfSamples*2;//音频缓冲区中的浮点值数
//通过音频数据中的每个浮点循环
for(无符号整数i=0;i
也许你应该使用他们的bug reporter系统向苹果发送一个可复制的代码示例。不幸的是,这些代码太多,很难复制。我们很可能在这条链上做错了什么,但如果是这样的话,这是非常微妙的,我们的小型测试应用程序似乎还可以。我们甚至不知道它是如何影响另一个应用程序的,所以如果我们能发现,我们也许能够找到问题的根源。