使用Audio Queue Services 播放和录制音频
来源:互联网 发布:淘宝订单怎么重新拆分 编辑:程序博客网 时间:2024/06/05 01:58
在使用之前,我们需要了解AudioQueue Service的基本工作原理。
图1一个录音音频队列(Recording Audio Queue)
由上图可以得知,一个Recording Audio Queue,包括Buffer(缓冲器)组成的Buffer Queue(缓冲队列),以及一个Callback(回调)。他们之间是如何工作的呢?
图2 录音流程
1. 将音频填入第一个缓冲器中
2. 当队列中的第一个缓冲器填满时,会自动填充下一个缓冲器。此时,会触发回调。
3. 在回调函数中需要将音频数据流写入磁盘
4. 然后,需要在回调函数中将该缓冲器重新放入缓冲队列,以便重复使用该缓冲器。重复步骤2。
在了解录音的流程之后,让我们来看看播放基本体系结构。
图3 一个播放音频队列(A playback audio queue)
由上图可以得知,其结构和录音音频队列基本一致,只是回调触发的时机不同,工作流程略有差异。
图4 播放流程
1. 将音频读入到缓存器中。一旦填充满一个缓存器,就会进入缓存队列,此时处于待命状态。
2. 应用程序命令发出指令,要求音频队列开始播放。
3. 音频会从第一个缓存器中取数据,并开始播放。
4. 一旦播放完成,就会触发回调,并开始播放下一个缓存器中的内容。
5. 回调中需要给该缓存器取后面的音频数据,然后重新放入缓存队列中。重复步骤3。
至此,Audio QueueServices的基本原理就算介绍完了。在实际的应用中,还需要处理好各种状态,以及异常情况,例如播放中断、没有录音设备等。关于Audio File Services 的使用,我这里就不做介绍了,详细参考源码。
与本文配套的源代码示例:http://download.csdn.net/detail/midfar/4044390
参考资料:
Audio Queue Services Programming Guide
https://developer.apple.com/library/ios/#documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40005343
Audio Queue Services Reference
https://developer.apple.com/library/ios/#documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html#//apple_ref/doc/uid/TP40005117
Audio File Services Reference
https://developer.apple.com/library/ios/#documentation/MusicAudio/Reference/AudioFileConvertRef/Reference/reference.html#//apple_ref/doc/uid/TP40006072
- 使用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 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- c++学习笔记二
- DataSnap-建立稳定服务程序之TCP心跳包的使用
- c++学习笔记三
- 推荐一系列优秀的Android开发源码
- 时间工具类(DateUtil)
- 使用Audio Queue Services 播放和录制音频
- taSnap—加强服务程序对访问者的控制能力
- c++学习笔记五
- [Android] 内存泄漏调试经验分享 (一)
- 国人常用密码TOP100 FROM THISITE
- 如何配置codeblocks以编译Mysql~
- c++学习笔记六
- 注意!ASP.NET MVC 3 的一个 OutputCache 问题
- c++学习笔记七