• 音频会话



    音频会话接口提供的特性

    范畴
    范畴是标识一组应用程序音频行为的键。您可以通过范畴的设置来指示自己希望得到的音频行为,比如希望在屏幕锁定状态时继续播放音频。

    中断和路由变化
    当您的音频发生中断或中断结束,以及当硬件音频路由发生变化时,音频会话会发出通告,使您可以优雅地响应发生在更大音频环境中的变化—比如由于电话呼入而导致的中断。

    硬件特征

    您可以通过查询音频会话来了解应用程序所在的设备的特征,比如硬件采样率,硬件通道数量,以及是否有音频输入。

    AVAudioSession类参考和AVAudioSessionDelegate协议参考描述了一个管理音频会话的精简接口。如果要使音频会话支持中断,则可以直接使用基于C语言的音频会话服务接口,该接口的描述请见音频会话服务参考AudioToolbox/AudioToolbox.h。在应用程序中,这两个接口的代码可以混用及互相匹配。


    处理音频中断

    音频技术   中断如何工作

    系统声音服务 
    当中断开始时,系统声音和警告声音会变为无声。如果中断结束—当用户取消警告或选择忽略呼入电话时,会发生这种情况—它们就又自动变为可用。使用这种技术的应用程序无法影响声音中断的行为。

    音频队列服务、OpenAL、I/O音频单元
    这些技术为中断的处理提供最大的灵活性。您需要编写一个中断监听回调函数,具体描述请参见音频会话编程指南中的 “响应音频中断”部分。

    AVAudioPlayer类
    AVAudioPlayer类为中断的开始和结束提供了委托方法。根据实际的需要,您可以在audioPlayerBeginInterruption:方法中更新用户界面,音频播放器对象会负责暂停回放。您也可以利用audioPlayerEndInterruption:方法来重启音频的回放,并在必要时更新用户界面。音频播放器会负责重新激活您的音频会话。

    每个iPhone OS应用程序—除了很少的例外—都应该采纳音频会话服务


    通过AVAudioPlayer类轻松播放声音


    AVAudioPlayer
    类提供了一个简单的Objective-C接口,用于播放声音。如果您的应用程序不需要立体声或精确同步,且不播放来自网络数据流的音频,则我们推荐您使用这个类来回放声音。

    通过音频播放器可以实现如下任务:


    播放任意长度的声音
    播放文件或内存缓冲区中的声音
    循环播放声音
    同时播放多路声音(虽然不能精确同步)
    控制每个正在播放声音的相对音量
    跳到声音文件的特定点上,这可以为需要快进和反绕的应用程序提供支持
    取得音频强度数据,用于测量音量


    AVAudioPlayer
    类可以播放iPhone OS上有的所有音频格式,具体描述请参见“音频回放和录制格式”部分。或者。如果您需要该类接口的完整描述,请参见AVAudioPlayer类参考

    为了使音频播放器播放音频,您需要为其分配一个声音文件,使其做好播放的准备,并为其指定一个委托对象


    用音频队列服务播放和控制声音

    音频队列服务(Audio Queue Services)加入了一些
    AVAudioPlayer
    类不具有的回放能力。通过音频队列服务进行回放可以:


    精确计划声音的播放,支持声音的同步。
    精确控制音量—基于一个个的缓冲区。
    通过音频文件流服务(Audio File Stream Services)来播放从流中捕捉的音频。

    音频队列服务可以播放iPhone OS支持的所有音频格式,具体描述请见“音频回放和录制格式”部分;还支持录制,详见“录制音频”部分。


    创建一个音频队列对象

    创建一个音频队列对象需要下面三个步骤:


    创建管理音频队列所需的数据结构,比如您希望播放的音频格式。
    定义管理音频队列缓冲区的回调函数。在回调函数中,您可以使用音频文件服务来读取希望播放的文件(在iPhone OS 2.1及更高版本中,您还可以用扩展音频文件服务来读取文件)。
    通过
    AudioQueueNewOutput
    函数实例化回放音频队列。
    解析音频流

    为了播放音频流内容,比如来自网络连接的音频流,可以结合使用音频文件流服务和音频队列服务。音频文件流服务负责从常见的、采用网络位流格式的音频文件容器中解析出音频数据和元数据。您也可以用它来解析磁盘文件中的数据包和元数据。

    iPhone OS可以解析的音频文件和位流格式和Mac OS X相同,具体如下:


    MPEG-1 Audio Layer 3,用于.mp3文件
    MPEG-2 ADTS,用于.aac音频数据格式
    AIFC
    AIFF
    CAF
    MPEG-4,用于.m4a、.mp4、和.3gp文件
    NeXT
    WAVE

    在取得音频数据包之后,您就可以以任何iPhone OS系统支持的格式进行播放,这些格式在“音频回放和录制格式”部分中列出。

    为了获得最好的性能,处理网络音频流的应用程序应该仅使用来自Wi-Fi连接的数据。您可以通过iPhone OS提供的System Configuration框架及其
    SCNetworkReachability.h
    头文件定义的接口来确定什么网络是可到达和可用的。如果需要实例代码,请参见iPhone Dev Center网站的Reachability工程。

    为了连接网络音频流,可以使用iPhone OS系统中的Core Foundation框架中的接口,比如
    CFHTTPMesaage
    接口,具体描述请见CFHTTPMessage参考。通过音频文件流服务解析网络数据包,将它恢复为音频数据包,然后放入缓冲区,发送给负责回放的音频队列对象。

    音频文件流服务依赖于音频文件服务定义的接口,比如
    AudioFramePacketTranslation
    结构和
    AudioFilePacketTableInfo
    结构,具体描述请见音频文件服务参考

    有关如何使用流的更多信息,请参见音频文件流服务参考。实例代码则请参见位于<Xcode>
    /Examples/CoreAudio/Services/
    目录下的AudioFileStream例子工程,其中<Xcode>是开发工具所在的目录。


  • 相关阅读:
    三十岁前不要去在乎的29件事
    大型网站架构演变和知识体系
    性情中人。。。
    blog搬新家了。。。把以前的文章也都搬过来了。看看以前的文章,想起了很多。。。
    2006620 11:42:00 王子劳尔,王者归来
    2006620 11:40:00 这一刻,便是我们的永远给最爱的安德烈.舍普琴科
    第一份工作一定要选一家好公司 摘在 唐骏 《我的成功可以复制》
    2006811 11:29:00 搜索算法及其在ACM竞赛中的应用(作者/刘力科 计算机系01级4班)
    内核学习驱动隐藏进程
    2005129 17:58:00 新年快乐
  • 原文地址:https://www.cnblogs.com/qq78292959/p/2076939.html
Copyright © 2020-2023  润新知