IOS7使用Audio Queue同时进行录音和播放
来源:互联网 发布:windows api 怎么使用 编辑:程序博客网 时间:2024/05/17 22:15
首先,必须先说明使用Audio Queue来同时进行录音和播放的优势。如果想在iOS设备上播放和录制音频,苹果推荐我们使用AVFoundation框架中的AVAudioPlayer和AVAudioRecorder类。虽然用法比较简单,但是不支持流式;这就意味着:在播放音频前,必须等到整个音频加载完成后,才能开始播放音频;录音时,也必须等到录音结束后,才能获取到录音数据。这给应用造成了很大的局限性。特别是在需要实时处理录音数据(如音频通信)、实时语音通话(如微信语音)的情况下,AVAudioPlayer和AVAudioRecorder类都无法完美达到设计目的,需要采用Audio Queue。
一般,我们要同时使用录音和播放时,需要进行如下设置:
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
但是,这样同时使用录音和播放,其播放的效果会远远差于单独使用播放的效果,(听起来就是声音变小了),就算你通过设置kAudioQueueParam_Volume参数将音量变大也没用。
这是因为kAudioSessionCategory_PlayAndRecord默认的是听筒模式,而 kAudioSessionCategory_Playback; 是扬声器模式。
故为了达到同样效果,我们还需要切换扬声器模式,还需进行如下设置:
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (
kAudioSessionProperty_OverrideAudioRoute
sizeof (audioRouteOverride),
&audioRouteOverride
);
或是:
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty (
kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
sizeof (doChangeDefaultRoute),
&doChangeDefaultRoute
);
这两种方法区别在于:
使用kAudioSessionProperty_OverrideAudioRoute时,当发生任何中断如插拔耳机时,audio route就会重置回听筒,你必须再设置一次。
使用kAudioSessionProperty_OverrideCategoryDefaultToSpeaker则除非你更改category,否则会一直生效。
(参见http://blog.csdn.net/xy5811/article/details/8563137)里面有详细描述。
但在IOS7中,已经废除了AudioSessionSetProperty, kAudioSessionCategory_PlayAndRecord,kAudioSessionProperty_OverrideCategoryDefaultToSpeaker等函数或枚举变量。要想同时使用录音和播放,需如下设置:
[[AVAudioSession sharedInstance]]setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
如果想同时使用扬声器模式,需如下设置:
[[AVAudioSession sharedInstance]]setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:nil];
在实际使用时,还需进行如下设置:
[[AVAudioSession sharedInstance]]setActive:YES error:nil];
可以使设置马上生效。
参考资料:
Audio Queue Services Programming Guide
https://developer.apple.com/library/ios/#documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc
IOS上AudioSession设置, 切换扬声器和听筒详解
http://blog.csdn.net/xy5811/article/details/8563137
- IOS7使用Audio Queue同时进行录音和播放
- 使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- 使用Audio Queue Services 播放和录制音频
- 使用Audio Queue Services 播放和录制音频
- 使用Audio Queue Services 播放和录制音频
- 使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- iOS使用Audio Queue Services 播放和录制音频
- 使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- 使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- 使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- 使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- 2013oracle技术嘉年华记录
- SP2-0618: 无法找到会话标识符。启用检查 PLUSTRACE 角色
- 向前吧!骚年
- 在软件开发中应用流行的80:20原则
- 验证数独
- IOS7使用Audio Queue同时进行录音和播放
- 技术团队新官上任之高层篇
- css3中position定位详解
- cocos2d-x节点(base64.h)API
- Linux 上不可修改的文件和目录
- CF 362C 冒泡排序 交换哪两个数逆序数减少最多
- 技术团队新官上任之中层篇
- GridView事件说明及执行顺序
- 技术团队新官上任之基层篇