`
guafei
  • 浏览: 328142 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Audio Session Programming Guide

 
阅读更多
Audio Session:自己开发的应用和IOS应用程序处理的中介,你的应用启动,会产生一个单例的Audio Session,通过配置它来处理你应用的用途。

audio session category:is a key that identifies a set of audio behaviors for your application.通过定义你category告知系统你的应用的意图,比如锁屏时候,是否需要继续播放音乐。有六个category,通过开关设置(YES OR NO)来控制你应用的行为。
audio session是在应用程序启动自动激活的。

audio session默认的行为:
播放功能启用和录音功能禁用。
当用户移动静音开关(iPhone上的响铃/静音开关)的“沉默”的位置,您的音频静音。
当用户按下“睡眠/唤醒“按钮,在屏幕锁定或自动锁定期限届满时,您的音频静音。
您的音频开始时,其他音频设备,如iPod的音频已经沉默。
以上这些行为被封装在AVAudioSessionCategorySoloAmbient类中,默认的category往往不是我们需要的。

默认的设置不适合的几种场景:
1:你听着音乐,过了一段时间,系统自动锁屏,音乐静音,这是需要设置category的AVAudioSessionCategoryPlayback。
2:确保iPod音乐是没有被中断,配置您的audio session允许混合。使用AVAudioSessionCategoryAmbient
3:写了一个视屏播放程序,当用户看视频看到一半的时候,突然来了一个电话,用户处理完成之后,点击播放按钮,就没有效果,必须得重头播放。这时候的处理就是写一个回调方法,继续刚才的视频。

Audio Session处理有两个API:
1:AVAudioSession类,用objective-c实现,使用这个API有两个优势,第一获取Audio Session的单例和C的API一样。第二你可以利用简单的委托方法处理音频中断和改变硬件配置,如采样率和信道数。你可以使用这些委托方法不管你使用音频技术为播放,录音,或处理。
2:Audio Session Services:是用C写的一个一个类,提供对所有的基本和高级特性的操作。

这两个API是互相兼容的,可以同时使用。

使用模拟器,以下几个方式是不行的:
1:调用中断
2:更改静音开关的设置
3:模拟屏幕锁定
4:模拟插上或拔下耳机
5:Query audio route information or test audio session category behavior
6:音频的混合测试(同时ipod和你的应用)

配置audio session:
初始化audio session:使用 AV Foundation framework来处理中断,苹果推荐使用隐士的初始化session,当你在处理AVAudioSession,AVAudioPlayer,AVAudioRecorder这些类的代理方法时候。
// implicitly initializes your audio session
AVAudioSession *session = [AVAudioSession sharedInstance];

当然你也可以用C写一个回调函数来处理中断。

一般会在应用启动的时候初始化session,一般也在viewDidLoad中写初始化代码,系统在闹钟,电话,日历等提醒音时候会禁用session,然后处理完之后又开启。苹果建议使用AVAudioSessionDelegate的代理类来reactive(重新激活)session。

苹果的六个audio session category作用:
1:Three for playback
2:One for recording
3:One that supports playback and recording—that need not occur simultaneously
4:One for offline audio processing

以下是六个category:
1:AVAudioSessionCategoryAmbient(或者使用kAudioSessionCategory_AmbientSound)
2:AVAudioSessionCategorySoloAmbient(或者使用kAudioSessionCategory_SoloAmbientSound)
3:AVAudioSessionCategoryPlayback(或者使用kAudioSessionCategory_MediaPlayback)
4:AVAudioSessionCategoryRecord(或者使用kAudioSessionCategory_RecordAudio)
5:AVAudioSessionCategoryPlayAndRecord(或者使用kAudioSessionCategory_PlayAndRecord)
6:AVAudioSessionCategoryAudioProcessing(或者使用kAudioSessionCategory_AudioProcessing)

可以在viewdidiload方法中查看这些属性的值。
Audio Session Category最好在启动的时候设置,然后不要改变它。

Audio中断的处理方式:
1:使用AV Foundation framework里面定义的delegate方法处理
2:使用C语言的回调函数处理

What needs to happen during an audio session interruption


处理中断的技术:
1:AV Foundation framework的AVAudioPlayer和AVAudioRecorder类
2:Audio Queue Services, I/O audio unit
3:OpenAL
4:System Sound Services

An audio session gets interrupted


AVAudioSessionDelegate的两个方法来处理:beginInterruption和endInterruption
AVAudioRecorder和AVAudioPlayback的代理也提供
audioPlayerBeginInterruption、 audioPlayerEndInterruption、audioRecorderBeginInterruption、audioRecorderEndInterruption

使用c语言的回调来处理中断
//The interruption callback declaration
typedef void (*AudioSessionInterruptionListener) (
                 void    *inClientData,
                 UInt32  inInterruptionState
             );
//两个inInterruptionState,kAudioSessionBeginInterruption和kAudioSessionEndInterruption



An audio hardware route:是一个有线电子通道的音频信号,类似耳机拔插或者介入其他硬件设备
void MyPropertyListener (
   void                    *inClientData,
   AudioSessionPropertyID  inID,
   UInt32                  inDataSize,
   const void              *inData
);


audio session API可以指定硬件的采样频率和I/O缓冲区。已到达优化的作用,设置属性AudioSessionSetProperty值kAudioSessionProperty_PreferredHardwareSampleRate和kAudioSessionProperty_PreferredHardwareIOBufferDuration,最好是在inactive状态就设置好了


可以查询硬件的特征,通过访问属性kAudioSessionProperty_-
CurrentHardwareSampleRate、kAudioSessionProperty_-
CurrentHardwareOutputVolume、kAudioSessionProperty_-
CurrentHardwareOutputLatency、kAudioSessionProperty_-
AudioInputAvailable,这些属性改变时候都会有事件,可以自定义callback函数处理

处理音乐和视频
ipod音乐:MPMusicPlayerController类,是系统默认的一个audio session
视频:MPMoviePlayerController类,是系统默认的一个audio session,但是要设置useApplicationAudioSession为NO。

它们都需要配置audio session
Configuring audio sessions when using a movie player


附件是sample code
  • 大小: 38.1 KB
  • 大小: 56.8 KB
  • 大小: 46.3 KB
  • 大小: 102.2 KB
分享到:
评论

相关推荐

    Learning Core Audio A Hands on Guide to Audio Programming for Mac and iOS

    《Learning Core Audio: A Hands-on Guide to Audio Programming for Mac and iOS》是一本深入浅出的音频编程指南,专为苹果平台(Mac和iOS)的开发者设计。这本书详细讲解了如何利用Apple的Core Audio框架进行音频...

    CarPlay-App-Programming-Guide【搜狗文档翻译_译文_英译中】1

    **CarPlay应用程序编程指南** **一、介绍** Apple的CarPlay是将iOS设备与汽车娱乐系统集成的一种方式,为驾驶员提供了安全、便捷的互动体验。本编程指南旨在帮助开发者创建适用于CarPlay的应用程序,确保用户在驾驶...

    Raspberry Pi GPU Audio Video Programming 无水印pdf

    Raspberry Pi GPU Audio Video Programming 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,...

    ios application programming guide

    Based on the given information from "iOS Application Programming Guide," we can derive several key points related to iOS development. However, it's important to note that the provided description does...

    Getting Started with C++ Audio Programming for Game Development

    Getting Started with C++ Audio Programming for Game Developers is a quick and practical introduction to the most important audio programming topics that any game developer is expected to know....

    Learning Core Audio A Hands-On Guide to Audio Programming for Mac and iOS 无水印pdf

    Learning Core Audio A Hands-On Guide to Audio Programming for Mac and iOS 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn...

    qnx Audio DDK User Guide.chm

    Audio DDK User Guide.chmAudio DDK User Guide.chmAudio DDK User Guide.chm

    Beginning Game Audio Programming (EN+Source)

    Part One - Audio Engine Basics Chapter 2 - Introduction to DirectAudio Chapter 3 - Wave Audio Playback Chapter 4 - Loading WAV Files Chapter 5 - Control Freak Chapter 6 - MIDI Playback ...

    Raspberry Pi GPU Audio Video Programming.pdf

    根据提供的文件信息,以下是对“Raspberry Pi GPU Audio Video Programming.pdf”文件中所包含知识点的详细说明: 标题中提到的“Raspberry Pi GPU Audio Video Programming”指的是在树莓派(Raspberry Pi)这一...

    游戏音频编程入门 Beginning.Game.Audio.Programming

    无论游戏有多么扣人心弦,无论可视化效果有多么逼真,如果缺少了背景音效,自然会显得美中不足。现在,技术上的新发展使你能够在声音方面做一些以前无法完成的事情,但是这也需要有一个向导来带你走过技术上的困难。...

    USB Audio Design Guide

    ### USB Audio设计指南知识点概述 #### 一、XMOS USB Audio 解决方案概览 - **合规性**:XMOS 的 USB 音频解决方案提供符合 USB Audio Class 规范的设备,支持 USB 2.0 (高速或全速)。 - **架构基础**:该解决方案...

    Beginning Game Audio Programming

    常见的游戏音频引擎有FMOD、Wwise和Unity的AudioMixer等,它们提供了丰富的API和工具,方便开发者进行音频集成。 在游戏音频编程中,实时性是非常关键的。这意味着我们需要优化音频处理,确保音频播放不会影响游戏...

    Hack Audio:An Introduction to Computer Programming and DSP in Matlab.rar

    Hack Audio:An Introduction to Computer Programming and Digital Signal Processing in Matlab 2019 Hack Audio:An Introduction to Computer Programming and DSP in Matlab.part1.rar (15 MB, 下载次数: 237...

    Beginning.Game.Audio.Programming

    《 Beginning Game Audio Programming》是一本专注...通过阅读《 Beginning Game Audio Programming》,读者不仅可以掌握游戏音频编程的基础,还能提升解决实际问题的能力,为开发引人入胜的游戏音频体验打下坚实基础。

    Qualcomm Audio Calibration Tool User Guide - Simplified Chinese.pdf

    ### Qualcomm Audio Calibration Tool (QACT) 用户指南关键知识点解析 #### 一、文档概述与目的 - **文档名称**:Qualcomm Audio Calibration Tool (QACT) v5.x.x 用户指南 - **版本号**:80-VM407-8SC 版本 F - **...

Global site tag (gtag.js) - Google Analytics