背景音乐:http://www.cnblogs.com/jiayongqiang/p/5476069.html
音效:
一.介绍:
又称“短音频”,通常在程序中的播放时长为1~2秒.最长可以播放29.9s.
在最后会讲解如何将长音乐MP3格式,制作成xcode能识别的音效格式(wav/aac/m4a等等).
二、音效的播放
1.获得音效文件的路径
NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_03.wav" withExtension:nil];
2.加载音效文件,得到对应的音效ID
SystemSoundID soundID = 0;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &soundID);
3.播放音效
AudioServicesPlaySystemSound(soundID);
注意:音效文件只需要加载1次
4.音效播放常见函数总结
加载音效文件 AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID *outSystemSoundID)
释放音效资源 AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID)
播放音效 AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID)
播放音效带点震动 AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID)
#import "ViewController.h" //1.导入框架 #import <AVFoundation/AVFoundation.h> @interface ViewController () //2.定义一个SystemSoundID属性 @property (nonatomic, assign) SystemSoundID soundID; @end @implementation ViewController //3.懒加载SoundID - (SystemSoundID)soundID { if (_soundID == 0) { // 3.1.获取资源的URL,音频文件要放在黄色文件夹中 NSURL *buyaoUrl = [[NSBundle mainBundle] URLForResource:@"buyao.wav" withExtension:nil]; // 3.2给SoundID赋值 AudioServicesCreateSystemSoundID((__bridge CFURLRef)(buyaoUrl), &_soundID); } return _soundID; } - (void)viewDidLoad { [super viewDidLoad]; } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ // 4.1.播放音效,没有振动效果 AudioServicesPlaySystemSound(self.soundID); // 4.2.播放音效,在真机上带有振动效果 // AudioServicesPlayAlertSound(soundID); }
三.将播放音效的功能封装成一个工具类.
1.创建一个类PQAudioTool继承自NSObject.
PQAudioTool.h文件:
#import <Foundation/Foundation.h> @interface PQAudioTool : NSObject /** * 播放音效 * @param soundName 音效名称 */ + (void)audioToolPlaySoundWithName:(NSString *)soundName; /** * 销毁音效 * @param soundName 音效名称 */ + (void)audioToolDisposeSoundWihtName:(NSString *)soundName; @end
PQAudioTool.m文件:
#import "PQAudioTool.h" #import <AVFoundation/AVFoundation.h> @interface PQAudioTool() //在此处定义一个成员属性. 那么在类方法中无法取到.所以需要定义一个静态成员属性. @end @implementation PQAudioTool //定义一个静态成员属性,会一直保存在内存中.属于类的. 不属于哪一个对象的.
//定义一个字典放赋值的soundID.
static NSMutableDictionary *_soundIDs; + (void)initialize {//该方法只会调用一次(前提是该类没有子类). _soundIDs = [NSMutableDictionary dictionary]; } + (void)audioToolPlaySoundWithName:(NSString *)soundName { // 1.从字典中取出音效的ID SystemSoundID soundID = [_soundIDs[soundName] unsignedIntValue]; // 2.如果现在取出来的值是0 if (soundID == 0) { // 2.1.获取资源的URL NSURL *buyaoUrl = [[NSBundle mainBundle] URLForResource:soundName withExtension:nil]; // 2.2.给SoundID赋值 AudioServicesCreateSystemSoundID((__bridge CFURLRef)(buyaoUrl), &soundID); // 2.3.放入字典中 _soundIDs[soundName] = @(soundID); } // 3.播放音效 AudioServicesPlaySystemSound(soundID); } + (void)audioToolDisposeSoundWihtName:(NSString *)soundName { // 1.从字典中取出音效的ID SystemSoundID soundID = [_soundIDs[soundName] unsignedIntValue]; // 2.如果soundID有值,则销毁音效 if (soundID) { AudioServicesDisposeSystemSoundID(soundID); } } @end
在viewController里调用
- (IBAction)buyaoClick:(id)sender { [PQAudioTool audioToolPlaySoundWithName:@"1-02 何かがおかしい.m4a"]; } - (IBAction)oneClick:(id)sender { [PQAudioTool audioToolPlaySoundWithName:@"lose.aac"]; } - (IBAction)twoClick:(id)sender { [PQAudioTool audioToolPlaySoundWithName:@"m_04.wav"]; }
四:将长音乐制作成小于30s的音效 1.打开iTunes
2.将需要制作的音乐导入iTunes
3.在iTunes中选择音乐-->右击-->显示简介
4.选择选项卡-->设置开始/结束时间-->好
5.选中音乐-->文件-->转换-->AAC
6.成功.直接将转换好的短音乐 拖拽出来即可使用.