iOS 播放音频的几种方法
2015-09-02 19:24
639 查看
1.System Sound Services (音频服务)
是最底层也是最简单的声音播放服务,调用 AudioServicesPlaySystemSound 这个方法就可以播放一些简单的音频文件,使用此方法只适合播放一些很小的提示或者警告音,因为它有很多限制:
■ 声音长度要小于 30 秒
■ In linear PCM 或者 IMA4 (IMA/ADPCM) 格式的
■ 打包成 .caf, .aif, 或者 .wav 的文件
■ 不能控制播放的进度
■ 调用方法后立即播放声音
■ 没有循环播放和立体声控制
代码实现:
引入AudioToolbox.framework
在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics、Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环境下编译器不会自动管理CF对象的内存,所以当我们创建了一个CF对象以后就需要我们使用CFRelease将其手动释放,那么CF和OC相互转化的时候该如何管理内存呢?答案就是我们在需要时可以使用__bridge,__bridge_transfer,__bridge_retained,具体介绍和用法如下
1.__bridge:CF和OC对象转化时只涉及对象类型不涉及对象所有权的转化;
上面的这段代码在ARC环境下系统会给出错误提示和错误修正,修正后如下:
系统为我们自动添加了__bridge,因为是OC创建的对象并且在转换时没有涉及对象所有权的转换,所以上面的代码不需要加CFRelease
其他关键字在这里就不赘述了,感兴趣的朋友可以继续研究。
2.Audio Queue Services(音频队列)
使用 Audio Queue Services 对音频进行播放,你可以完全实现对声音的控制。例如,你可以在声音数据从文件读到内存缓冲区后对声音进行一定处理再进行播放,从而实现对音频的快速/慢速 播放的功能。
因为 Audio Queue Services 相对复杂很多,Apple 官方已经把它整理为一本书了,具体可以参考 Audio
Queue Services Programming Guide 和 SpeakHere 的程序示例。
3. OpenAL
OpenAL 是一套跨平台的开源的音频处理接口,与图形处理的 OpenGL 类似,它为音频播放提供了一套更加优化的方案。它最适合开发游戏的音效,用法也与其他平台下相同。
4.AVAudioPlayer类(主要讲述)
AVFoundation.framework 中定义的一个类,所以使用要先在工程中引入 AVFoundation.framework。我们可以把 AVAudioPlayer 看作是一个高级的播放器,它支持广泛的音频格式,主要是以下这些格式:
■ AAC
■ AMR(AdaptiveMulti-Rate, aformatforspeech)
■ ALAC(AppleLossless)
■ iLBC(internetLowBitrateCodec, anotherformatforspeech)
■ IMA4(IMA/ADPCM)
■ linearPCM(uncompressed)
■ µ-lawanda-law
■ MP3(MPEG-1audiolayer3
AVAudioPlayer 可以播放任意长度的音频文件、支持循环播放、可以同步播放多个音频文件、控制播放进度以及从音频文件的任意一点开始播放等.
是最底层也是最简单的声音播放服务,调用 AudioServicesPlaySystemSound 这个方法就可以播放一些简单的音频文件,使用此方法只适合播放一些很小的提示或者警告音,因为它有很多限制:
■ 声音长度要小于 30 秒
■ In linear PCM 或者 IMA4 (IMA/ADPCM) 格式的
■ 打包成 .caf, .aif, 或者 .wav 的文件
■ 不能控制播放的进度
■ 调用方法后立即播放声音
■ 没有循环播放和立体声控制
代码实现:
引入AudioToolbox.framework
NSString * path = [[NSBundle mainBundle]pathForResource:@"dingdong" ofType:@"wav"]; SystemSoundID soundID; AudioServicesCreateSystemSoundID( (__bridge CFURLRef)[NSURL fileURLWithPath:path], &soundID);
//播放音频加振动 AudioServicesPlayAlertSound(soundID); //仅播放音频 AudioServicesPlaySystemSound(soundID); //仅仅播放振动 AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
ARC下OC对象和CF对象之间的桥接(bridge)
在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics、Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环境下编译器不会自动管理CF对象的内存,所以当我们创建了一个CF对象以后就需要我们使用CFRelease将其手动释放,那么CF和OC相互转化的时候该如何管理内存呢?答案就是我们在需要时可以使用__bridge,__bridge_transfer,__bridge_retained,具体介绍和用法如下1.__bridge:CF和OC对象转化时只涉及对象类型不涉及对象所有权的转化;
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"]; CFURLRef ref = (CFURLRef)url;
上面的这段代码在ARC环境下系统会给出错误提示和错误修正,修正后如下:
NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"]; CFURLRef ref = (__bridge CFURLRef)url;
系统为我们自动添加了__bridge,因为是OC创建的对象并且在转换时没有涉及对象所有权的转换,所以上面的代码不需要加CFRelease
其他关键字在这里就不赘述了,感兴趣的朋友可以继续研究。
2.Audio Queue Services(音频队列)
使用 Audio Queue Services 对音频进行播放,你可以完全实现对声音的控制。例如,你可以在声音数据从文件读到内存缓冲区后对声音进行一定处理再进行播放,从而实现对音频的快速/慢速 播放的功能。
因为 Audio Queue Services 相对复杂很多,Apple 官方已经把它整理为一本书了,具体可以参考 Audio
Queue Services Programming Guide 和 SpeakHere 的程序示例。
3. OpenAL
OpenAL 是一套跨平台的开源的音频处理接口,与图形处理的 OpenGL 类似,它为音频播放提供了一套更加优化的方案。它最适合开发游戏的音效,用法也与其他平台下相同。
4.AVAudioPlayer类(主要讲述)
AVFoundation.framework 中定义的一个类,所以使用要先在工程中引入 AVFoundation.framework。我们可以把 AVAudioPlayer 看作是一个高级的播放器,它支持广泛的音频格式,主要是以下这些格式:
■ AAC
■ AMR(AdaptiveMulti-Rate, aformatforspeech)
■ ALAC(AppleLossless)
■ iLBC(internetLowBitrateCodec, anotherformatforspeech)
■ IMA4(IMA/ADPCM)
■ linearPCM(uncompressed)
■ µ-lawanda-law
■ MP3(MPEG-1audiolayer3
AVAudioPlayer 可以播放任意长度的音频文件、支持循环播放、可以同步播放多个音频文件、控制播放进度以及从音频文件的任意一点开始播放等.
相关文章推荐
- IOS开发技巧快速生成二维码
- iOS平台下的加密
- ios AVPlayer无法在线播放视频
- iOS高级-QuartzCore框架-CALayer图层
- 适用于IOS的几种必须会用的工具
- 一般企业如何处理IOS 检查更新
- iOS如何绘制圆
- iOS项目开发小技巧 (五) --检测是否打开应用定位及跳到系统设置定位页
- IOS:图片缓存
- iOS生成随机数
- iOS工程使用cocoaPods。动手让你的工程由xcodeproj变身为.xcworkspace
- iOS 添加第三方字体 .ttf
- ios软件开发 获取手势点击视图的tag
- ios 开发 中文和英文状态下 键盘的变化 textview 对键盘的适应
- IOS -Date
- iOS之集合对象:将NSArray和NSDictionary两个集合对象写到一个文件中
- ios开发时,键盘遮挡输入框解决方法
- runtime 运行时机制 完全解读
- iOS开发日记14-NSFileManager(沙盒和清除缓存)
- iOS 内存管理 (有ARC)