【发布时间】:2014-05-05 18:18:00
【问题描述】:
将 AVAudioSessionModeMeasurement 与 AVAudioSessionCategoryPlayAndRecord 一起使用在 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 下仍然存在同样的问题。
到目前为止,低音量(或无声音)问题似乎仅出现在 iPad 4 设备上。我不知道它是在所有 iPad 4 上发生还是仅在一部分上发生,但只有使用 iPad 4 的客户在升级到 iOS 7.1 后与我们联系过这个问题。删除将模式设置为 AVAudioSessionModeMeasurement 的代码可以解决问题;以正常音量听到音频。但是,不使用测量模式会影响我们对录制的音频进行的信号处理,因此绝对不可取。
如何播放音频似乎并不重要。设置测量模式时,AVAudioPlayer 和音频队列服务都表现出相同的低音量/无声音问题。
因为这个问题似乎只影响 iPad,所以我尝试删除 AVAudioSessionCategoryOptionDefaultToSpeaker 选项(iPhone 通常需要该选项),看看是否有帮助,但这并没有改变。
插入耳机即可解决问题;通过耳机以正常音量听到音频。
假设这是 iOS 7.1 的错误,我已经将它作为错误报告给 Apple。但是我想问你们,看看我是否错过了 iPad 4 的一些特别之处,或者我的音频会话设置中的其他一些东西。如果您有一个播放音频的应用程序(通过 AVAudioPlayer 或音频队列服务),即使您让我知道在您将类别更改为 AVAudioSessionCategoryPlayAndRecord 并将模式更改为 AVAudioSessionModeMeasurement 后音频是否仍然可以在 iPad 4 上正常播放,这也会有所帮助极大地。您的应用程序不需要实际录制任何音频;无论是否正在录制音频,都会出现此问题。
提前感谢您的帮助。
【问题讨论】:
-
Apple 最终关闭了我的错误报告,指出这是设计使然:bugreport.apple.com/web/?problemID=16402045
标签: ios ipad core-audio avaudiosession ios7.1