音频

简单来说,音频可以分为2种

音效

又称“短音频”,通常在程序中的播放时长为1~2秒

在应用程序中起到点缀效果,提升整体用户体验

 

音乐

比如游戏中的“背景音乐”,一般播放时间较长

 

播放音频需要用到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格式

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;

posted @ 2014-09-03 21:23  ILP  阅读(215)  评论(0编辑  收藏  举报