一.介绍
AudioToolbox.framework是一套基于C语言的框架,使用它来播放音效其本质是将短音频注册到系统声音服务(System Sound Service).System Sound Service是一种简单、底层的声音播放服务,但是它本身也存在着一些限制:
音频播放时间不能超过30s
数据必须是PCM或者IMA4格式
音频文件必须打包成.caf、.aif、.wav中的一种(注意这是官方文档的说法,实际测试发现一些.mp3也可以播放)
音效处理对应的框架是AudioToolbox,只不过AVFoundation框架包含了此框架
二.使用
使用System Sound Service 播放音效的步骤如下:
方法播放音效(后者带有震动效果)
2.使用对应的API,开始播放音效:
(1)根据音效文件,来生成SystemSoundID
(2)根据SystemSoundID,播放音效
调用AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID* outSystemSoundID)函数获得系统声音ID
如果需要监听播放完成操作,
则使用AudioServicesAddSystemSoundCompletion(SystemSoundID inSystemSoundID, CFRunLoopRef inRunLoop, CFStringRef inRunLoopMode
或者使用 AudioServicesSystemSoundCompletionProc inCompletionRoutine, void* inClientData)方法注册回调函数。
如果不需要监听播放完成的操作,
则调用AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID)
或者AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID)
(3)根据SoundID释放内存
AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID),(如果是不需要监听播放完成的方法,则不需要这句代码)
代码如下:
//获取路径 NSURL *url = [[NSBundle mainBundle] URLForResource:@"2018-11-27 10_36_51 1.wav" withExtension:nil]; //根据音效文件创建systemSoundId SystemSoundID soundID = 0; AudioServicesCreateSystemSoundID((__bridge CFURLRef _Nonnull)(url), &soundID); //根据soundId播放音效一: // AudioServicesPlaySystemSoundWithCompletion(soundID, ^{ // NSLog(@"play finish"); // //当音效播放完成时,我们需要根据SystemSoundID 释放内存资源 // AudioServicesDisposeSystemSoundID(soundID); // }); // 根据soundId播放音效二:播放音效时,手机会跟着震动; AudioServicesPlayAlertSoundWithCompletion(soundID, ^{ NSLog(@"play finish"); AudioServicesDisposeSystemSoundID(soundID); });