iPhone 音频会话属性
Posted
技术标签:
【中文标题】iPhone 音频会话属性【英文标题】:iPhone AudioSession properties 【发布时间】:2010-07-25 13:28:34 【问题描述】:我正在开发一个应用程序,该应用程序应具有以下有关音频的属性:
-
可以同时录制和播放声音
可以将音频输出与其他应用程序混合,例如iPod
未插入耳机时扬声器的音频输出
插入耳机时的音频输出
我使用了以下代码。
AVAudiosession *audioSession = [AVAudioSession sharedInstance];
NSError *audioSessionError;
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&audioSessionError];
UInt32 mix = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(mix), &mix);
UInt32 route = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(route), &route);
[audioSession setActive:YES error:&audioSessionError];
但是,我可以实现 1-3 但在 4 失败。插入耳机时,音频仍然通过扬声器。然后我尝试设置kAudioSessionProperty_OverrideCategoryDefaultToSpeaker
而不是kAudioSessionProperty_OverrideAudioRoute
,但这导致iPod 暂停而不是混合两种音频。谁能帮忙指出上面的代码有什么问题?
感谢您的帮助。
【问题讨论】:
您是否尝试过仅在未插入耳机时监听音频路由更改通知并设置 kAudioSessionOverrideAudioRoute_Speaker,并在插入时取消设置? 需要哪些进口才能完成这项工作? 【参考方案1】:我认为是这样的:
UInt32 route = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(route), &route);
特指使用扬声器。默认操作(插入时使用耳机)应该是:
UInt32 route = kAudioSessionOverrideAudioRoute_None;
【讨论】:
以上是关于iPhone 音频会话属性的主要内容,如果未能解决你的问题,请参考以下文章