IOS AVAUDIOPLAYER 播放器使用

1. 导入 AVFoundation.framework

2.导入头文件  #import <AVFoundation/AVFoundation.h>

3.

 

  player = [[AVAudioPlayeralloc] initWithContentsOfURL:[NSURLfileURLWithPath:[[NSBundlemainBundle] pathForResource:@"music"ofType:@"mp3"]] error:nil];

    

    [playerprepareToPlay];

    player.enableRate = YES;//可以设置播放速录

    player.rate = 2.0;//播放的速度

    player.meteringEnabled = YES;

    player.delegate = self;

    player.numberOfLoops = -1;

 

 

 [player play];

关于 meter 的作用还不是很清楚

    

其中代理函数有如下几个    

  1. - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)player successfully:(BOOL)flag{  
  2.     //播放结束时执行的动作  
  3. }  
  4. - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer*)player error:(NSError *)error{  
  5.     //解码错误执行的动作  
  6. }  
  7. - (void)audioPlayerBeginInteruption:(AVAudioPlayer*)player{  
  8.     //处理中断的代码  
  9. }  
  10. - (void)audioPlayerEndInteruption:(AVAudioPlayer*)player{  
  11.     //处理中断结束的代码  
  12. }  

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

如果需要实现后台播放音乐(按home键后),可以根据如下来实现

1.在Info.plist 里面添加 Required background modes键,值为 App plays audio

2.代码实现如下

  1. //后台播放音频设置  
  2. AVAudioSession *session = [AVAudioSession sharedInstance];    
  3. [session setActive:YES error:nil];    
  4. [session setCategory:AVAudioSessionCategoryPlayback error:nil];   
  5.   
  6. //让app支持接受远程控制事件  
  7. [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];  
  8.   
  9. //播放背景音乐  
  10. NSString *musicPath = [[NSBundle mainBundle] pathForResource:@"background" ofType:@"mp3"];  
  11. NSURL *url = [[NSURL alloc] initFileURLWithPath:musicPath];  
  12.   
  13. // 创建播放器  
  14. AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];  
  15. [url release];  
  16. [player prepareToPlay];  
  17. [player setVolume:1];  
  18. player.numberOfLoops = -1; //设置音乐播放次数  -1为一直循环  
  19. [player play]; //播放

 

其中 关于 AVAudioSession 的解释如下

AVAudioSession类由AVFoundation框架引入。每个IOS应用都有一个音频会话。这个会话可以被AVAudioSession类的sharedInstance类方法访问,如下:

  1. AVAudioSession *audioSession = [AVAudioSession sharedInstance];
复制代码

 

在获得一个AVAudioSession类的实例后,你就能通过调用音频会话对象的setCategory:error:实例方法,来从IOS应用可用的不同类别中作出选择。下面列出了可供使用的音频会话类别:
AVAudioSessionCategorySoloAmbient

 

这个类别非常像AVAudioSessionCategoryAmbient类别,除了会停止其他程序的音频回放,比如iPod程序。当设备被设置为静音模式,你的音频回放将会停止。

 

AVAudioSessionCategoryRecord
这会停止其他应用的声音(比如iPod)并让你的应用也不能初始化音频回放(比如AVAudioPlayer)。在这种模式下,你只能进行录音。使用这个类别,调用AVAudioPlayer的prepareToPlay会返回YES,但是调用play方法将返回NO。主UI界面会照常工作。这时,即使你的设备屏幕被用户锁定了,应用的录音仍会继续。

 

AVAudioSessionCategoryPlayback
这个类别会静止其他应用的音频回放(比如iPod应用的音频回放)。你可以使用AVAudioPlayer的prepareToPlay和play方法,在你的应用中播放声音。主UI界面会照常工作。这时,即使屏幕被锁定或者设备为静音模式,音频回放都会继续。

 

AVAudioSessionCategoryPlayAndRecord
这个类别允许你的应用中同时进行声音的播放和录制。当你的声音录制或播放开始后,其他应用的声音播放将会停止。主UI界面会照常工作。这时,即使屏幕被锁定或者设备为静音模式,音频回放和录制都会继续。

 

AVAudioSessionCategoryAudioProcessing
这个类别用于应用中进行音频处理的情形,而不是音频回放或录制。设置了这种模式,你在应用中就不能播放和录制任何声音。调用AVAPlayer的prepareToPlay和play方法都将返回NO。其他应用的音频回放,比如iPod,也会在此模式下停止。

 

AVAudioSessionCategoryAmbient
这个类别不会停止其他应用的声音,相反,它允许你的音频播放于其他应用的声音之上,比如iPod。你的应用的主UI县城会工作正常。调用AVAPlayer的prepareToPlay和play方法都将返回YES。当用户锁屏时,你的应用将停止所有正在回放的音频。仅当你的应用是唯一播放该音频文件的应用时,静音模式将停止你程序的音频回放。如果正当iPod播放一手歌时,你开始播放音频,将设备设为静音模式并不能停止你的音频回放。

 

posted on 2014-04-03 21:43  景树园  阅读(853)  评论(0编辑  收藏  举报

导航