IOS 音频的 使用说明
● 音效
• 又称“短音频”,通常在程序中的播放时长为1~2秒
● 音乐
• 比如游戏中的“背景音乐”,一般播放时间较长
● 播放音频需要用到的框架
● AVFoundation.framework
音效的播放
// 1.获得音效文件的路径
// 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)
音效格式
注意:硬件解码器一次只能对一个音频文件解码。
声音和音效小结——音频转换工具
● 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;
>.音量
@property float volume;
>.是否允许更改速率
@property BOOL enableRate;
>.播放速率(1是正常速率,0.5是一般速率,2是双倍速率)
@property float rate;
>.有多少个声道
@property(readonly) NSUInteger numberOfChannels;
流媒体播放
● 如果想实现一些个性化\复杂的操作, 可以借助一些第三方框架轻易实现
● DOUAudioStreamer : 产自天朝, 豆瓣出品
• https://github.com/douban/DOUAudioStreamer
● StreamingKit
• https://github.com/tumtumtum/StreamingKit
● FreeStreamer
• https://github.com/muhku/FreeStreamer
DOUAudioStreamer使用步骤
● 导入src文件夹下面的所有源代码
● 导入依赖的框架
● 包含主头文件
• #import "DOUAudioStreamer.h"

@interface MJAudioFile : NSObject <DOUAudioFile>
/**
* 音频文件路径
*/
@property (strong, nonatomic) NSURL *audioFileURL;
@end
self.audioStreamer = [DOUAudioStreamer streamerWithAudioFile:file];
● 可以通过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];
● 移除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 // 播放错误
};
IOS 音频的 使用说明的更多相关文章
- 一篇对iOS音频比较完善的文章
转自:http://www.cnblogs.com/iOS-mt/p/4268532.html 感谢作者:梦想通 前言 从事音乐相关的app开发也已经有一段时日了,在这过程中app的播放器几经修改我也 ...
- iOS音频AAC视频H264编码 推流最佳方案
iOS音频AAC视频H264编码 推流最佳方案 项目都是个人的调研与实验,可能很多不好或者不对的地方请多包涵. 1 功能概况 * 实现音视频的数据的采集 * 实现音视频数据的编码,视频编码成 ...
- IOS 音频开发文件大小计算
音频基础知识 音频文件计算大小 音频转码 标签(空格分隔): 调查 IOS音频 https://developer.apple.com/library/ios/documentation/MusicA ...
- iOS音频处理
ios音频处理 1. iOS底层音频处理技术(带源代码) http://www.cocoachina.com/ios/20111122/3563.html 2.ios 音频入门 http://blog ...
- IOS 音频播放
iOS音频播放 (一):概述 前言 从事音乐相关的app开发也已经有一段时日了,在这过程中app的播放器几经修改我也因此对于iOS下的音频播放实现有了一定的研究.写这个系列的博客目的一方面希望能够抛砖 ...
- iOS音频播放(一):概述
(本文转自码农人生) 前言 从事音乐相关的app开发也已经有一段时日了,在这过程中app的播放器几经修改,我也因此对于iOS下的音频播放实现有了一定的研究.写这个 系列的博客目的一方面希望能够抛砖引玉 ...
- IOS音频1:之采用四种方式播放音频文件(一)AudioToolbox AVFoundation OpenAL AUDIO QUEUE
本文转载至 http://blog.csdn.net/u014011807/article/details/40187737 在本卷你可以学到什么? 采用四种方法设计应用于各种场合的音频播放器: 基于 ...
- iOS 音频视频图像合成那点事
代码地址如下:http://www.demodashi.com/demo/13420.html 人而无信不知其可 前言 很久很久没有写点什么了,只因为最近事情太多了,这几天终于闲下来了,趁此机会,记录 ...
- iOS音频合并
iOS音频合并 最近遇到一个需求,客户录音试听一下可以,就继续向下录制,当客户录制完成后,需要把前面录制的试听音频和后面的音频进行合并.最初想到的方法,使用NSData对两个音频文件进行合并,但是合并 ...
随机推荐
- connecting-to-github-with-ssh
https://help.github.com/articles/connecting-to-github-with-ssh/ 创建ssh密钥后,从github clone仓库到本地出现permiss ...
- 一个简单的基于MINI2440开发板的启动代码
1. S3C2440大概的启动流程(NAND启动): ①设置CPU为SVC模式 ②关闭看门狗 ③屏蔽中断 ④关闭MMU ⑤初始化时钟 ⑥初始化内存(SDRAM) ⑦初始化栈指针(SP, R13) ⑧初 ...
- 协议 + socket import 和 form xx import *的区别 028
一 . 网络通信协议(了解) 1 . osi 七层协议 (最好记住 面试会问) 应表会传网数物(应用层 表示层 会话层 传输层 网络层 数据链路层 物理层) 2 .tcp/ip五层 或 tcp/ip四 ...
- python3 continue和break 区别
for i in range(10): if i==5: continue #跳出当次循环 if i==8: break #跳出整个for循环 print(i)
- chrome浏览器解决 跨域调试问题
1.关闭chrome浏览器(全部) 我们可以通过使用chrome命令行启动参数来改变chrome浏览器的设置,具体的启动参数说明参考这篇介绍.https://code.google.com/p/xia ...
- poj1092. To Buy or Not to Buy (20)
1092. To Buy or Not to Buy (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...
- 文本框只允许输入数字.net/javascript
<input type="text" name="test" onKeyUp="test1.value=(this.value=this.val ...
- Git 打补丁流程
A. 使用git制作补丁时, 需要创建一个新的分支, 修改之后再提交只需要修改需要修改的文件, 并使用git -format-patch -M master 将当前的分支与主分支(master)进行比 ...
- HDU 1281——棋盘游戏——————【最大匹配、枚举删点、邻接表方式】
棋盘游戏 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- git分支合并冲突
合并冲突 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们. 如果你对 #53 问题的修改和有关 hotfix 的修改都涉及到同一个文件的同一处,在合并 ...