AVAudioPlayer是iOS自带的音乐播放类库,它只能播放单个声音文件,而且只能播放本地文件,不具备播放网络流媒体的能力。
使用AVAudioPlayer首先需要导入AVFoundation.framework。用到的框架是AVFoundation框架。
创建播放器,并实现播放,暂停功能。
用url来初始化
NSURL *url = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"]]; _myMusicPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];//URL必须为本地文件url
用nsdata来初始化
NSURL *url = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"]]; NSData *mydata = [[NSData alloc]initWithContentsOfURL:url]; _myMusicPlayer = [[AVAudioPlayer alloc]initWithData:mydata error:nil];
在此通过如下方法,可以实现AVAudioPlayer播放网络流媒体:
NSURL *url = [NSURL URLWithString:info.url];//初始化网络url NSData *data = [[NSData alloc]initWithContentsOfURL:url]; NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *filePath = [NSString stringWithFormat:@"%@/%@.mp4", docDirPath , @"temp"]; [data writeToFile:filePath atomically:YES];//在沙盒Document目录下缓存文件 NSURL *musicurl = [NSURL fileURLWithPath:filePath];
_myMusicPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:musicurl error:nil];//获得本地文件路径,就可以播放网络文件了/
AVAudioPlayer的相关属性:
1.音量控制:
_myMusicPlayer.volume=0.8;//0.0~1.0之间
2.循环次数:
_myMusicPlayer.numberOfLoops = 3;//默认只播放一次
3.当前播放时间点:
_myMusicPlayer.currentTime = 15.0
4.播放总时长:
NSTimeInterval duration = _myMusicPlayer.dueration;
5.开始喝暂停:
[ _myMusicPlayer prepareToPlay];//分配播放所需的资源,并将其加入内部播放队列 [_myMusicPlayer play];//播放 [_myMusicPlayer stop];//停止
[_myMusicPlayer pause];//暂停
相关代理:
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)player successfully:(BOOL)flag{ //播放结束时执行的动作 } - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer*)player error:(NSError *)error{ //解码错误执行的动作 } - (void)audioPlayerBeginInteruption:(AVAudioPlayer*)player{ //处理中断的代码 } - (void)audioPlayerEndInteruption:(AVAudioPlayer*)player{ //处理中断结束的代码 }
AVAudioPlayer 可以实现单个音频的简单播放,但是对于大量音乐文件和流媒体的播放不是很好,在这里可以使用AFSoundManager第三方框架来实现。它的使用也比较简单,可以在github上下载或者cocopad上安装,AFSoundManager通过将音频文件添加到一个队列里面,播放大量音乐文件相对简单方便。大家可以去试试。