首页 > 代码库 > iOS 播放音效
iOS 播放音效
音效:通俗的说是短音频,音频文件必须满足下面的条件
1、播放的时间不能超过30秒
2、数据必须是 PCM或者IMA4流格式
3、必须被打包成下面三个格式之一:Core Audio Format (.caf), Waveform audio (.wav), 或者 Audio Interchange File (.aiff)
1.引入框架
1 #import <AudioToolbox/AudioToolbox.h>
2.播放音效
1 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 2 { 3 // 声明SoundID 4 SystemSoundID soundID ; 5 self.soundID = soundID; 6 // 获取音效文件的url 7 NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_10.wav" withExtension:nil]; 8 // 根据url创建 9 AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);10 AudioServicesPlaySystemSound(soundID);11 };
记忆技巧:
1.播放音效的核心代码,申明音效ID,然后播放音效
1 SystemSoundID soundID ; 2 AudioServicesPlaySystemSound(soundID);
2.用下面这句给soundID赋值
1 AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);
3.赋值语句有2个参数,一个是音效文件资源路径,另外一个就是之前申明soundID了
1 NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_10.wav" withExtension:nil];
3.播放完音效后,应该销毁
1 - (void)didReceiveMemoryWarning2 {3 [super didReceiveMemoryWarning];4 AudioServicesDisposeSystemSoundID(self.soundID);5 self.soundID = 0;6 }
重构上述代码,提供一个播放音效的工具类,重构代码来自MJ老师
1.工具类的.h文件
1 #import <Foundation/Foundation.h> 2 3 @interface MJAudioTool : NSObject 4 5 /** 6 * 播放音效 7 * 8 * @param filename 音效文件名 9 */10 + (void)playSound:(NSString *)filename;11 12 /**13 * 销毁音效14 *15 * @param filename 音效文件名16 */17 + (void)disposeSound:(NSString *)filename;18 @end
2.工具类.m文件
1 #import "MJAudioTool.h" 2 #import <AudioToolbox/AudioToolbox.h> 3 4 @implementation MJAudioTool 5 6 // 字典: filename作为key, soundID作为value 7 // 存放所有的音频ID 8 static NSMutableDictionary *_soundIDDict; 9 + (void)initialize10 {11 _soundIDDict = [NSMutableDictionary dictionary];12 }13 14 + (void)playSound:(NSString *)filename15 {16 if (!filename) return;17 18 // 1.从字典中取出soundID19 SystemSoundID soundID = [_soundIDDict[filename] unsignedLongValue];20 if (!soundID) { // 创建21 // 加载音效文件22 NSURL *url = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];23 24 if (!url) return;25 26 // 创建音效ID27 AudioServicesCreateSystemSoundID((__bridge CFURLRef)url, &soundID);28 29 // 放入字典30 _soundIDDict[filename] = @(soundID);31 }32 33 // 2.播放34 AudioServicesPlaySystemSound(soundID);35 }36 37 + (void)disposeSound:(NSString *)filename38 {39 if (!filename) return;40 41 SystemSoundID soundID = [_soundIDDict[filename] unsignedLongValue];42 if (soundID) {43 // 销毁音效ID44 AudioServicesDisposeSystemSoundID(soundID);45 46 // 从字典中移除47 [_soundIDDict removeObjectForKey:filename];48 }49 }50 51 @end
3.控制器的.m文件
播放音效
1 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event2 {3 [MJAudioTool playSound:@"buyao.wav"];4 [MJAudioTool playSound:@"m_03.wav"];5 }
销毁音效
1 - (void)didReceiveMemoryWarning2 {3 [super didReceiveMemoryWarning];4 5 [MJAudioTool disposeSound:@"m_03.wav"];6 [MJAudioTool disposeSound:@"buyao.wav"];7 }
iOS 播放音效
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。