AVAudioPlayer实现音乐播放(AFSoundManager的简单介绍)

          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通过将音频文件添加到一个队列里面,播放大量音乐文件相对简单方便。大家可以去试试。



原文地址:https://www.cnblogs.com/moxuexiaotong/p/4950779.html