● 播放音频需要用到2个框架
● AVFoundation.framework
● AudioToolbox.framework
音效的播放
// 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次
音效的播放
● 音效播放常见函数总结 ● 加载音效文件
AudioServicesCreateSystemSoundID(CFURLRef inFileURL,
SystemSoundID outSystemSoundID)
● 释放音效资源
AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID)
● 播放音效
AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID)
● 播放音效带点震动
AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID)
注意:硬件解码器一次只能对一个音频文件解码。在实际应用中通常使用非压 缩的音频格式(AIFF)或者CAF音频格式,从而减低系统在音频解码上的消 耗,达到省电的目的
声音和音效小结——音频转换工具
● 转换aiff格式
● afconvert -f AIFF -d I8 filename
● 转换caf格式
● afconvert -f caff -d aac -b 32000 filename
● 批量转换
● find . -name ‘.mp3’ -exec afconvert -f caff -d aac -b 32000 {} ;
音乐的播放
● 音乐播放用到一个叫做AVAudioPlayer的类
● AVAudioPlayer常用方法
● 加载音乐文件
• - (id)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError;
• - (id)initWithData:(NSData *)data error:(NSError **)outError; ● 准备播放(缓冲,提高播放的流畅性)
• - (BOOL)prepareToPlay;
● 播放(异步播放) • - (BOOL)play;
音乐的播放
暂停
- (void)pause; 停止
- (void)stop; 是否正在播放
@property(readonly, getter=isPlaying) BOOL playing; 时长
@property(readonly) NSTimeInterval duration; 当前的播放位置
@property NSTimeInterval currentTime;
播放次数(-1代表无限循环播放,其他代表播放numberOfLoops+1次) @property NSInteger numberOfLoops;
音量
@property float volume; 是否允许更改速率
@property BOOL enableRate; 播放速率(1是正常速率,0.5是一般速率,2是双倍速率)
@property float rate; 有多少个声道
@property(readonly) NSUInteger numberOfChannels;
● 声道(-1是左声道,1是右声道,0是中间) • @property float pan;
● 是否允许测量音量
• @property(getter=isMeteringEnabled) BOOL meteringEnabled;
● 更新测量值
• - (void)updateMeters;
● 获得当前的平均音量
• - (float)averagePowerForChannel:(NSUInteger)channelNumber;