前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS开发 - 音频相关

iOS开发 - 音频相关

作者头像
hrscy
发布2018-08-30 12:32:03
5470
发布2018-08-30 12:32:03
举报
文章被收录于专栏:hrscyhrscy

一、简介

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

  • 又称『短音频』,通常在程序中的播放时长为 1 ~ 2 s
  • 在应用程序中起到点缀效果,提升整体用户体验

2.音乐

  • 比如游戏中的『背景音乐』,一般播放时间较长

播放音频可以使用框架:AVFoundation.framework

二、音效的播放

代码语言:javascript
复制
//1.获得音效文件的路径
NSURL *url = [[NSBundle mainBundle] URLForResource:@"aaa.wav" withExtension:nil];
//2.加载音效文件,得到对应的音效 ID
SystemSoundID soundID = 0;
AudioServicesCreatessSystemSoundID((__brage CFURLRef)(url)&soundID);
//3.播放音效
AudioServicesPlaySystemSound(soundID);

注意:音效文件只需要加载一次即可,所以可以使用懒加载的方式。

  • 音效播放常见函数总结

1.加载音效文件

代码语言:javascript
复制
AudioServicesCreateSystemSoundID((CFURLRef inFileURL, SystemSoundID *outSystemSoundID)

2.释放音效资源

代码语言:javascript
复制
AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID)

3.播放音效

代码语言:javascript
复制
AudioServicesPlaySystemSoundID(SystemSoundID inSystemSoundID)

4.播放音效带点震动

代码语言:javascript
复制
AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID)

三、音效的格式

音效格式

注意:硬件解码器一次只能对一个音频文件解码。在实际应用中通常使用非压缩的音频格式(AIFF)或者 CAF 音频格式,从而降低系统在音频解码时的消耗,达到省电的目的。

四、音频转换工具

  • 转换为 aiff 格式
代码语言:javascript
复制
afconvert -f AIFF -d I8 filename
  • 转换为 caf 格式
代码语言:javascript
复制
afconvert -f caff -d aac -b 32000 filename
  • 批量处理
代码语言:javascript
复制
find .-name '*.mp3' -exec afconvert -f caff -d aac -b 32000 {} \\;

五、音乐的播放

音乐的播放用到一个叫做 AVAudioPlayer 的类

  • AVAudioPlayer 常用方法如下:
代码语言:javascript
复制
//加载音乐文件
-(id)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError;
-(id)initWithData:(NSData *)data error:(NSError **)outError;
//准备播放
-(BOOL)prepareToPlay;
//播放(异步播放)
-(BOOL)play;
//暂停
-(void)pause;
//停止
-(void)stop;
//更新测量值
-(void)updateMeters;
//获得当前的平均音量
-(float)averagePowerForChannel:(NSUInteger)channelNumber;
  • 相关属性如下:
代码语言:javascript
复制
//是否正在播放
@property(readonly, getter = isPlaying) BOOL playing;
//时长
@property(readonly) NSTimeInterval duration;
//当前的播放位置
@property NSTimeInterval currentTime;
//播放次数
@property NSInter numberOfLoops;
//音量
@property float volume;
//是否允许更改速率
@property BOOL enableRate;
//播放速率(1 是正常速率,0.5 是一般速率,2 是双倍速率)
@property float rate;
//有多少个声道
@property(readonly) NSUInteger numberOfChannels
//声道
@property float pan;
//是否允许测量音量
@property(getter = isMeteringEnabled) BOOL meteringEnabled;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016.05.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、简介
  • 二、音效的播放
  • 三、音效的格式
  • 四、音频转换工具
  • 五、音乐的播放
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档