Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.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 7.1中使用测量模式会导致音量低/无声音_Ios_Ipad_Core Audio_Avaudiosession_Ios7.1 - Fatal编程技术网

音频会话:在iOS 7.1中使用测量模式会导致音量低/无声音

音频会话:在iOS 7.1中使用测量模式会导致音量低/无声音,ios,ipad,core-audio,avaudiosession,ios7.1,Ios,Ipad,Core Audio,Avaudiosession,Ios7.1,将AVAudioSessionModeMeasurement与AvaudioSessionCategoryPlay和Record结合使用,过去在iOS 5.x、6.x和7.0下运行良好,但现在在iOS 7.1下的某些(并非所有)设备上,扬声器音量较低/没有声音。代码如下: NSError* error = nil; // Set Aduio Session category [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord

将AVAudioSessionModeMeasurement与AvaudioSessionCategoryPlay和Record结合使用,过去在iOS 5.x、6.x和7.0下运行良好,但现在在iOS 7.1下的某些(并非所有)设备上,扬声器音量较低/没有声音。代码如下:

NSError* error = nil;
// Set Aduio Session category
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord
              withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker
                    error:&error];
if( error ) ...

// Set Audio Session mode
[audioSession setMode:AVAudioSessionModeMeasurement error:&error];
if( error ) ...
旁注:旧版本的代码使用AudioSessionSetProperty函数设置kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,但在iOS 7.1下仍然存在相同的问题

到目前为止,低音量(或无声音)问题似乎只发生在iPad4设备上。我不知道这是发生在所有iPad4上,还是只发生在一部分iPad4上,但只有使用iPad4的客户在升级到iOS 7.1后与我们联系过这个问题。删除将模式设置为AVAudioSessionModeMeasurement的代码可修复该问题;音频以正常音量播放。但是,不使用测量模式会影响我们对录制的音频进行的信号处理,因此这绝对是不可取的

音频的播放方式似乎并不重要。设置测量模式时,AVAudioPlayer和音频队列服务都会出现相同的低音量/无声音问题

因为这个问题似乎只会影响iPad,所以我尝试删除了AVAudioSessionCategoryOptionDefaultToSpeaker选项(iPhone通常需要这个选项),看看这是否有帮助,但没有改变

插入耳机解决了这个问题;通过耳机以正常音量收听音频

假设这是一个iOS 7.1错误,我已经向苹果报告了它的错误。不过,我想问你们,我是否错过了iPad4的一些特别之处,或者我的音频会话设置中的其他内容。如果您有一个可以播放音频的应用程序(通过AVAudioPlayer或音频队列服务),即使您在将类别更改为AvaudioSessionCategoryPlay和Record并将模式更改为AVAudioSessionModeMeasurement后告诉我您的iPad4上的音频是否仍能正常播放,这也会非常有帮助。你的应用不需要实际录制任何音频;无论是否正在录制音频,都会出现问题


提前感谢您的帮助。

我自己在iOS 7的iPad上肯定遇到过这个问题

录制时,AVAudioSessionModeMeasurement会更改iOS 7上的播放音量

苹果的文档声明: 如果应用程序正在执行音频输入或输出测量,请指定此模式。 ... 如果在具有多个内置麦克风的设备上录音,则使用主麦克风

在有两个扬声器和两个麦克风的iphone上,这种方式有一定的意义。当使用手机底部的麦克风录音时,它会播放耳机扬声器中的音频,以防止干扰。在扬声器模式下使用时,它使用底部扬声器和听筒中的麦克风

在iOS 7的iPad上,它似乎通过单方面降低播放音量来复制这种行为

直接回答你的问题:是的,我认为这是一个bug,或者至少是一个非常没有文档的特性

完成录制和测量后,可以使用以下方法重置静音音频:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&err];
if(err) NSLog(@"AudioSession reset category error at %s:%d", __FILE__, __LINE__);

[[AVAudioSession sharedInstance] setMode:AVAudioSessionModeDefault error:&err];
if(err) NSLog(@"AudioSession reset mode error at %s:%d", __FILE__, __LINE__);

虽然这不一定有帮助,但同样地,我已经证实,不使用AVAudioSessionModeMeasurement解决了这个问题

嗨,安迪,谢谢你的回复。请注意,该API在大多数iPad机型(iPad2、iPad3、iPadAir)上运行良好;它只在iPad4上失效。所以这并不是iPhone和iPad的较量。此外,除非iOS 7.1中发生了某些变化,否则测量模式也会消除额外的过滤(即,它的变化不仅仅是使用什么麦克风),因此,对于任何进行信号处理的应用程序,即使iPad只有一个麦克风,它在iPad上也是必不可少的。顺便说一下,早在三月份,我就向广大用户发布了该应用的更新版本,仅iPad 4禁用了该模式,此后就再也没有收到任何客户投诉,进一步证实其他iPad机型没有出现同样的问题。哦,很高兴了解iPad Air。我在iPad4上注意到了这一点,并认为所有较新的设备都会有这个问题。除了没有在空中测试之外,你的发现和我的一致。谢谢这个问题已经解决了吗?@Pi No。我最终放弃了测量模式,因为自从iOS 7.1以来,它只不过是一种痛苦。我想一个选择是只有在插入耳机时才启用它,但我调整了信号处理算法,使其在没有测量模式的情况下工作得非常好,因此没有任何理由冒任何风险,因为这种模式在不同的设备型号中表现得如此不同。苹果最终关闭了我的错误报告,通过设计说明: