最近在学习XMPP,实现IM功能,其中有发送语音的功能,这就要用到录音和播放了,这AVFoundation的简单的功能,在学习XMPP实现IM功能时候随便学习一下AVFoundation。
录音功能实现,主要实现在AVAudioRecorderManage中。头文件如截图:
AVAudioRecorder初始化:
其他方法的实现:
其中AVAudioRecorder 的代理由另外一个类处理(这样设计遵守功能单一原则),该类专门处理AVAudioRecorder的代理事件。
当然,这里只是打印一些信息而已,可以根据需要实现。
以上就是简单的录音功能。
下面实现简单播放功能,实现在AVAudioPlayerManange中,AVAudioPlayerManange头文件如下:
具体播放功能实现:
play方法的实现:
stop方法实现:
-(void)playWithPlayFileData:(NSData*)data方法
这里和录音一样,我将AVAudioPlayer的代理方法专专门交给另外一个类实现:
补充
上面说了录音和播放,其实还有一个比较重要的东西忘了说了,就是音频会话,音频会话在应用程序和操作系统的之间扮演着中间的角色,他提供了一种简单的实用的方法使得os知道应用程序应该如何与ios音频环境进行交互,我们只需要通过音频会话对应用程序的音频行为进行语义上的描述即可,这样就可以指明应用程序的一般音频行为。
我们可以通过音频会话分类定制自己的应用程序的音频行为,音频会话分类如下图:
2供来自书籍截图具体指定哪一种音频会话,需要根据应用程序的的功能决定,下面是制定音频会话的例子:
每个应用程序都有一个音频会话(不管应用程序是否使用音频功能)),它是个单例,获取音频会话单例,设置好音频会话分类后,激活配置。
配置音频会话的后台行为,我们需要在后台也能播放声音等,我们需要配置后台行为,在plist文件中添加Required background modes ,其中添加一项App plays audio or streams audio/video using airplay的,这样配置,语音播放就就有了后台行为,程序进入后台也能播放,就如你使用 的多米音乐一样。
打断问题
其次,在实际的应用中我们的程序可能会被来的电话打断,我们的程序还需处理这类的打断问题,当我们的应用程序在打断的时候,音频会话会发送通知AVAudioSessionInterruptionNotification,我们需要做的事注册该通知,处理打断事件。处理代码如下:
线路改变问题
当线路改变时音频会话会发送AVAudioSessionRouteChangeNotification,对拔除耳线的的处理:
效果如下:
总结:AVFoundation功能很强大啊,这么点代码就可以实现了录音和播放功能,不过AVFoundation还有很多东西,值得学习!!!
网友评论