首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
通信技术
»
3G
» AVAudioPlayer音频播放器—IOS开发
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
AVAudioPlayer音频播放器—IOS开发
发短消息
加为好友
lin89263
当前离线
UID
902291
帖子
58
精华
0
积分
29
阅读权限
10
在线时间
4 小时
注册时间
2012-9-6
最后登录
2012-10-9
新手上路
UID
902291
1
#
打印
字体大小:
t
T
lin89263
发表于 2012-9-21 14:50
|
只看该作者
AVAudioPlayer音频播放器—IOS开发
播放器
,
文章
,
开发
,
能力
AVAudioPlayer音频播放器—IOS开发
IOS中有三种播放音频的方式:AVAudioPlayer、音频服务、音频队列。
此文主要讲AVAudioPlayer,其他两个请见相关文章。
AVAudioPlayer在AVFoundation框架下,所以我们要导入AVFoundation.framework。
AVAudioPlayer类封装了播放单个声音的能力。播放器可以用NSURL或者NSData来初始化,要注意的是NSURL并不可以是网络url而必须是本地文件URL,因为AVAudioPlayer不具备播放网络音频的能力,不过我们可以用过一点小手段使其具备这个能力,留待稍后讲解。
一个AVAudioPlayer只能播放一个音频,如果你想混音你可以创建多个AVAudioPlayer实例,每个相当于混音板上的一个轨道。
一、创建一个播放器
源码copytoclipboard打印?
#import<AVFoundation/AVFoundation.h>
NSError*err;
AVAudioPlayer*player=[[AVAudioPlayeralloc]
initWithContentsOfURL:[NSURLfileURLWithPath:
[[NSBundlemainBundle]pathForResource:
@"music"ofType
"m4a"
inDirectory
"/"]]
error:&err];//使用本地URL创建
源码copytoclipboard打印?
AVAudioPlayer*player=[[AVAudioPlayeralloc]
initWithData:myData
error:&err];//使用NSData创建
我之前讲过AVAudioPlayer不可以播放网络URL,但是可以播放NSData,我们似乎受到了点启发,我们可以通过网络URL去创建NSData,然后在通过AVAudioPlayer来播放NSData,这样是不是就可以播放网络音乐了呢?但是此法并不可取,因为AVAudioPlayer只能播放一个完整的文件,并不支持流式播放,所以必须是缓冲完才能播放,所以如果网络文件过大抑或是网速不够岂不是要等很久?所以播放网络音频我们一般用音频队列。
二、播放器属性
创建一个AVAudioPlayer以后你就可以对它的各种属性进行访问或设置了。
1.音量
源码copytoclipboard打印?
player.volume=0.8;//0.0~1.0之间
2.循环次数
源码copytoclipboard打印?
player.numberOfLoops=3;//默认只播放一次
3.播放位置
源码copytoclipboard打印?
player.currentTime=15.0;//可以指定从任意位置开始播放
4.声道数
源码copytoclipboard打印?
NSUIntegerchannels=player.numberOfChannels;//只读属性
5.持续时间
源码copytoclipboard打印?
NSTimeIntervalduration=player.dueration;//获取采样的持续时间
6.仪表计数
源码copytoclipboard打印?
player.meteringEnabled=YES;//开启仪表计数功能
[playerupdateMeters];//更新仪表读数
//读取每个声道的平均电平和峰值电平,代表每个声道的分贝数,范围在-100~0之间。
for(inti=0;i<player.numberOfChannels;i++){
floatpower=[playeraveragePowerForChannel:i];
floatpeak=[playerpeakPowerForChannel:i];
}
三、播放声音
准备了这么久,终于可以播放了,心情激动啊。
源码copytoclipboard打印?
[playerprepareToPlay];//分配播放所需的资源,并将其加入内部播放队列
[playerplay];//播放
[playerstop];//停止
是否觉得准备了这么久,一下子就结束掉了,太快了,不用急,还有几个重点。
四、代理方法
加入播放出现异常,或者被更高级别的系统任务打断,我们的程序还没来得及收场就挂了,怎么办?不急,我们可以通过几个委托方法很好地处理所有的情形。
首先给player设置委托是必须的:
源码copytoclipboard打印?
player.delegate=self;
源码copytoclipboard打印?
-(void)audioPlayerDidFinishPlaying
AVAudioPlayer*)playersuccessfully
BOOL)flag{
//播放结束时执行的动作
}
-(void)audioPlayerDecodeErrorDidOccur
AVAudioPlayer*)playererror
NSError*)error{
//解码错误执行的动作
}
-(void)audioPlayerBeginInteruption
AVAudioPlayer*)player{
//处理中断的代码
}
-(void)audioPlayerEndInteruption
AVAudioPlayer*)player{
//处理中断结束的代码
}
北邮3G培训基地:
http://www.3gtrain.com/
收藏
分享
评分
http://www.3gtrain.com/index.asp
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议