博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS 音频的 使用说明
阅读量:5065 次
发布时间:2019-06-12

本文共 4091 字,大约阅读时间需要 13 分钟。

说明
简单来说,音频可以分为2
音效
又称短音频,通常在程序中的播放时长为1~2
在应用程序中起到点缀效果,提升整体用户体验

 

音乐

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

播放音频需要用到的框架

AVFoundation.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;

 

 

 

流媒体播放

苹果自带有个AVPlayerMPMoviePlayerController能播放流媒体音频,但是提供 的功能接又较少, 无法实现过于复杂和个性化的功能

●  如果想实现一些个性化\复杂的操作, 可以借助一些第三方框架轻易实现

●  DOUAudioStreamer : 产自天朝, 豆瓣出品

https://github.com/douban/DOUAudioStreamer

StreamingKit

https://github.com/tumtumtum/StreamingKit

FreeStreamer

https://github.com/muhku/FreeStreamer

 

DOUAudioStreamer使用步骤

 

DOUAudioStreamer使用步骤
导入src文件夹下面的所有源代码
导入依赖的框架
包含主头文件
#import "DOUAudioStreamer.h"

 

 

新建一个遵守协议的模型类, 用于提供音频文件的远程路径
#import "DOUAudioStreamer.h"

@interface MJAudioFile : NSObject <DOUAudioFile>

/**

* 音频文件路径
*/

@property (strong, nonatomic) NSURL *audioFileURL;

@end
传入模型, 开始播放音频
self.audioStreamer = [DOUAudioStreamer streamerWithAudioFile:file];
[self.audioStreamer play];

 

可以通过KVO监听播放器的状态

[self.audioStreamer addObserver:self forKeyPath:MJStatusProp options:NSKeyValueObservingOptionNew context:nil];

[self.audioStreamer addObserver:self forKeyPath:MJDurationProp options:NSKeyValueObservingOptionNew context:nil];

[self.audioStreamer addObserver:self forKeyPath:MJBufferingRatioProp options:NSKeyValueObservingOptionNew context:nil];

 

 

暂停\停止播放
[self.audioStreamer pause];
[self.audioStreamer stop];

 

移除KVO监听

[self.audioStreamer removeObserver:self forKeyPath:MJStatusProp];
[self.audioStreamer removeObserver:self forKeyPath:MJDurationProp];
[self.audioStreamer removeObserver:self forKeyPath:MJBufferingRatioProp];

DOUAudioStreamer常见属性

新建一个遵守协议的模型类, 用于提供音频文件的远程路径
@property(nonatomic,readonly)NSUIntegerexpectedLength;

 • 文件的总大小

@property(nonatomic,readonly)NSUIntegerreceivedLength;

目前已下载的文件大小

@property(nonatomic,readonly)NSUIntegerdownloadSpeed;

下载速度

 

@property(nonatomic,assign,readonly)doublebufferingRatio;

缓冲比例

 

 ● @property(nonatomic,assign)double volume;

音量

 

@property(nonatomic,readonly)NSString*cachedPath;

缓存路径(在沙盒的tmp目录, 随时会被删除)

 

@property(nonatomic,assign,readonly)NSTimeInterval duration;

歌曲的总时长

@property(nonatomic,assign)NSTimeIntervalcurrentTime;

歌曲的当前播放时长

 

@property(assign,readonly)DOUAudioStreamerStatusstatus;

播放器状态

 

 

DOUAudioStreamerStatus

播放器状态
typedef NS_ENUM(NSUInteger, DOUAudioStreamerStatus) {

 

DOUAudioStreamerPlaying, // 正在播放

DOUAudioStreamerPaused, // 暂停

DOUAudioStreamerIdle, // 停止播放

DOUAudioStreamerFinished, //播放完毕

DOUAudioStreamerBuffering, // 正在缓冲

DOUAudioStreamerError // 播放错误

};

 

 

 

 

 

转载于:https://www.cnblogs.com/liuwj/p/6701380.html

你可能感兴趣的文章
几款Http小服务器
查看>>
iOS 数组排序
查看>>
第三节
查看>>
PHP结合MYSQL记录结果分页呈现(比较实用)
查看>>
Mysql支持的数据类型
查看>>
openSuse beginner
查看>>
Codeforces 620E(线段树+dfs序+状态压缩)
查看>>
Windows7中双击py文件运行程序
查看>>
Market entry case
查看>>
css3动画属性
查看>>
Mongodb 基本命令
查看>>
控制文件的备份与恢复
查看>>
PHP的SQL注入技术实现以及预防措施
查看>>
软件目录结构规范
查看>>
mysqladmin
查看>>
解决 No Entity Framework provider found for the ADO.NET provider
查看>>
设置虚拟机虚拟机中fedora上网配置-bridge连接方式(图解)
查看>>
[置顶] Android仿人人客户端(v5.7.1)——人人授权访问界面
查看>>
Eclipse 调试的时候Tomcat报错启动不了
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>