iOS开发 - 音频相关

一、简介

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

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

2.音乐

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

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

二、音效的播放

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

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

  • 音效播放常见函数总结

1.加载音效文件

AudioServicesCreateSystemSoundID((CFURLRef inFileURL, SystemSoundID *outSystemSoundID)

2.释放音效资源

AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID)

3.播放音效

AudioServicesPlaySystemSoundID(SystemSoundID inSystemSoundID)

4.播放音效带点震动

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;
//更新测量值
-(void)updateMeters;
//获得当前的平均音量
-(float)averagePowerForChannel:(NSUInteger)channelNumber;
  • 相关属性如下:
//是否正在播放
@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;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SDNLAB

Open Baton起个大早,赶个晚集

开源组织Open Baton在管理和网络编排(MANO)上研究的时间比其他开源MANO组织出现的时间都要早,那么为什么其他开源MANO组织如OSM和Open-O...

3875
来自专栏养码场

一周播报|好莱坞影星iCloud屡次被侵,云时代数据泄漏了怎么办?

讨论下LDAP实现的认证如何支持权限控制的?适合哪些场景下用?之所以在公司内部用而不在电商上用是因为安全性不高吗?

681
来自专栏全栈工程师成长之路

iOS开发学习路线

这里筑梦师,是一名正在努力学习的iOS开发工程师,目前致力于全栈方向的学习,希望可以和大家一起交流技术,共同进步,用简书记录下自己的学习历程.

3716
来自专栏Flutter入门到实战

老程序员的10条中肯建议

以下十条建议是一个老程序员给出的建议,句句中肯,希望能引起你的思考,而不是笑笑就过去了。觉得在理,不妨随手点赞收藏转发分享,谢谢~

921
来自专栏余果的专栏

面向未来的跨界开发技术(下)

设计不等于艺术。用文艺的话说就是“艺术发现问题,设计解决问题”。也即是说,设计为商业服务。作为上市公司的设计部门,需要清晰地展现产品,构建用户的渴望。在某种程度...

1.2K0
来自专栏IT大咖说

云数据库的本质是什么?

内容来源:2017 年 11 月 18 日,北京偶数科技创始人兼CEO常雷在“第七届数据技术嘉年华”进行《云数据库的本质》演讲分享。IT 大咖说(微信id:it...

3000
来自专栏EAWorld

我们进入微服务世界的旅程-以及我们从中学到的东西。

Our journey into the world of Microservices — and what we learned from it.

1324
来自专栏阿杜的世界

持续学习杂谈:总结与反思一、总结与反思二、微服务技术栈

去年在一篇文章中看到:工作后的学习,可以从两个方面着力——大的理论和底层的基础,对于中间的知识点可以放宽一点。可能是我对此理解得不对,按照这个思路,我调整了自己...

812
来自专栏云计算

爬了知乎60W个网页,发现了一些很有趣的东西

我们先讲讲爬虫,这10w个网页我没有写代码去实现抓取,当时在上班,不想花太多时间去抓取这些内容(flag)。所以就采用Chrome浏览器的插件Web Scrap...

75236
来自专栏企鹅号快讯

各种流行的编程风格 你属于哪一种?

在编程中,会遇到很多使用囧然不同风格的开发者,下面是小于所知道的一些,你还知道其它的吗? ? 一、散弹枪编程 ? 这种编程风格是一种开发者使用非常随意的方式对待...

23011

扫码关注云+社区

领取腾讯云代金券