案例说明:

本案例演示了苹果开发中最常使用的播放本地MP3文件的功能,实现了MP3音乐文件的播放、停止功能和播放当前时间、歌曲长度时间的获取。本案例将演示使用MAC系统的基本音频处理类AVAudioPlayer实现简单的MP3音乐文件的音乐播放功能,案例运行界面如下图所示。

ios音乐播放本地音乐 apple播放本地音乐_MAC Object-C

关键技术:

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文件是项目开发中广泛使用的,如需要给事件添加背景音乐,设计本地音乐播放器等。代码中音乐文件路径是用绝对路径实现的。读者可以利用本书代码,扩展修改为采用程序相对路径予以实现。