案例说明:
本案例演示了苹果开发中最常使用的播放本地MP3文件的功能,实现了MP3音乐文件的播放、停止功能和播放当前时间、歌曲长度时间的获取。本案例将演示使用MAC系统的基本音频处理类AVAudioPlayer实现简单的MP3音乐文件的音乐播放功能,案例运行界面如下图所示。
关键技术:
MAC系统的基本音频处理类AVAudioPlayer位于AVFoundation中,需要先在工程中引入该Framework.具体方法是:选择工程->BuildPhase->展开Link Binary WithLibraries->操作+,打开选择framework对话框,选择加入AVFoundation.framework到工程,最后拖放到工程framework目录。
AVAudioPlayer包含主要方法和属性如下:
Play方法是开始播放文件;
prepareToPlay方法是预加载播放缓存;
pause 方法是暂停播放;
stop 方法是停止播放;
duration属性数值返回加载歌曲的播放总时间长度,精确到毫秒;
q currentTime属性数值返回加载歌曲的当前已经播放的时间;
实现过程:
首先创建工程,按照运行界面效果图在xib的界面文件中,布局播放和停止按钮控件,播放进度条控件申明为scrubSlider,当前播放时间显示LABEL和歌曲总时长LABEL控件,分别申明为 begintxt和maxtxt。
接下来在Appdelegate.m文件中实现显示播放进度条的函数 -(void)updateAudioDisplay。实现代码如下:
-(void) updateAudioDisplay {
//获取当前播放进度
_begintxt.stringValue =[NSString stringWithFormat:@"%d",
[NSNumbernumberWithInt: player.currentTime]];
//更新播放进度条
floatpercentDone =
(player.currentTime/ player.duration)*100;
_scrubSlider.floatValue=percentDone; }
播放按钮的响应代码如下:
-(IBAction)PlayMusic:(id)sender{
if(player){
player=nil;
}
_scrubSlider.floatValue=0;
_begintxt.stringValue =@"0";
//播放地址的绝对路径
NSURL*soundUrl=[[NSURL alloc] initFileURLWithPath:@"/Users/tiberx/Desktop/苹果开发案例大全/播放本地mp3文件/mp3Music/mp3Music/荷塘月色.mp3"];
//初始化播放类实例
player=[[AVAudioPlayer alloc] initWithContentsOfURL:soundUrl error:nil];
_maxtxt.stringValue=[NSStringstringWithFormat:@"%d",[NSNumber numberWithInt: player.duration]];
player.meteringEnabled = YES;
[self updateAudioDisplay];
[playerprepareToPlay];
//设置播放进度条事件的响应
NSInvocation *updateAudioDisplayInvocation =
[NSInvocationinvocationWithMethodSignature:
[selfmethodSignatureForSelector: @selector (updateAudioDisplay)]];
[updateAudioDisplayInvocation setSelector:@selector (updateAudioDisplay)];
[updateAudioDisplayInvocation setTarget: self];
//定义每0.01秒计算下进度条显示位置
audioDisplayUpdateTimer= [NSTimer scheduledTimerWithTimeInterval:0.01
invocation:updateAudioDisplayInvocationrepeats:YES]; [player play]; }
停止播放的按钮的响应函数代码如下:
-(IBAction)StopMusic:(id)sender{
[playerstop];
_scrubSlider.value=0; }
要使用AVAudioPlayer类,需要在Appdelegate.h文件添加如下包含文件:
#import<AVFoundation/AVFoundation.h>
最后在xib界面,通过界面控制器,建立播放按钮和停止按钮到对应响应事件的代理连接。具体方法是选择按钮,操作右键菜单界面选择sent actions拖放到左边的App Delegate立方体,选择弹出的对应事件即可。
最佳实践:
实现播放本地MP3文件是项目开发中广泛使用的,如需要给事件添加背景音乐,设计本地音乐播放器等。代码中音乐文件路径是用绝对路径实现的。读者可以利用本书代码,扩展修改为采用程序相对路径予以实现。