[iOS]使用Audio Queue Services 播放和录制音频
来源:互联网 发布:知名网络模特 编辑:程序博客网 时间:2024/06/05 02:42
在使用之前,我们需要了解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
- [iOS]使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- iOS使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- [iOS]使用Audio Queue Services 播放和录制音频
- 使用Audio Queue Services 播放和录制音频
- 使用Audio Queue Services 播放和录制音频
- 使用Audio Queue Services 播放和录制音频
- 使用Audio Queue Services 播放和录制音频
- 使用Audio Queue Services 播放和录制音频
- 使用Audio Queue Services 播放和录制音频
- 黑苹果声卡HDA无声问题
- Ubuntu Vim 十六进制模式修改dex文件
- Configuring ${DOCUMENTS} variable in Flash (Flex) Builder
- java 命名规范和系统常见包
- [MySQL Help]MySQL Workbench用csv格式导出数据乱码
- [iOS]使用Audio Queue Services 播放和录制音频
- boost时间操作
- Centos 6.5 x86_64环境下编译hadoop 2.2.0 mvn版本兼容性问题处理
- Shopaholic hdu 1678
- 第三次作业
- JAVA多线程的问题以及处理【转】
- /*面向对象语言*/与原型模式【35】
- C++命名规则
- 简单的一些shell脚本学习--Unix命令行程序