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 音频会话属性的主要内容,如果未能解决你的问题,请参考以下文章

iPhone App:不恢复 AVAudio Player 中的音频会话

iPhone XCode 在后台时无法重新激活音频捕获会话

iOS4 - iPhone 模拟器的背景音频

iPhone - AudioToolbox 和录音

iPhone SDK audioSession 问题

仅从 iphone 扬声器(不包括麦克风)录制音频输出