Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 没有声音问题会终止设备上所有应用的音频_Ios_Audio_Core Audio_Avaudiosession - Fatal编程技术网

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系统向苹果发送一个可复制的代码示例。不幸的是,这些代码太多,很难复制。我们很可能在这条链上做错了什么,但如果是这样的话,这是非常微妙的,我们的小型测试应用程序似乎还可以。我们甚至不知道它是如何影响另一个应用程序的,所以如果我们能发现,我们也许能够找到问题的根源。