CoderMrWu

生活诚可期,爱情价更高!

IOS音频2:AVFoundation框架

AVAudioPlayer 类实现本地音乐的播放

1、初始化播放器

#pragma mark - 初始化播放器
-(AVAudioPlayer *)musicPlayer{
    
    if(!_musicPlayer){
        NSError * error;
        
        // 加载本地的音乐资源
        NSURL * url = [[NSURL alloc] initWithString:[[NSBundle mainBundle] pathForResource:@"qinghua" ofType:@"mp3"]];
        
        // 初始化
        _musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
        
        // 设置代理
        _musicPlayer.delegate = self;
        
        // 获取系统的声音的配置
        AVAudioSession * audioSession = [AVAudioSession sharedInstance];
        
        // 获取系统音量
        CGFloat currentVol = audioSession.outputVolume;
        
        // 设置播放音量
        _musicPlayer.volume = currentVol;
        
        // 设置播放速率
        _musicPlayer.rate = 1.0;
        
        //设置播放次数,负数代表着无限循环
        _musicPlayer.numberOfLoops = -1;
        
        // 预加载资源
        [_musicPlayer prepareToPlay];
    }
    
    return _musicPlayer;
}

2、实现 AVAudioPlayerDelegate 的代理方法,获取进度

-(void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError *)error{
    NSLog(@"播放出错!");
}

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{
    NSLog(@"播放完成!");
}

3、调用播放的播放的方法

- (void)viewDidLoad {
    [super viewDidLoad];
    // 调用播放音乐的方法
    [self.musicPlayer play];
    
    // 调用暂停的方法
    [self.musicPlayer pause];

}

AVPlayer 类实现网络音乐的播放

1、初始化AVPlayer音乐播放器

#pragma mark - 初始化播放器
-(AVPlayer *)player{
    if (_player) {
        
        NSURL * url = [NSURL fileURLWithPath:_songModel.urlPath];
        
        _songItem = [[AVPlayerItem alloc] initWithURL:url];
        
        _player = [[AVPlayer alloc] initWithPlayerItem:_songItem];
        
    }
    return _player;
}

2、调用开始播放或者暂停播放的方法

#pragma mark - 开始播放
-(void)paly{
    [self.player play];
}

#pragma mark - 暂停播放
-(void)pause{
    [self.player pause];
}

3、监控播放的进度

[self.player addPeriodicTimeObserverForInterval:CMTimeMake(0.1*30, 30) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {
    // 操作代码
}

以上仅仅是列出了初始化播放器、播放、暂停等简单功能,其实这两个类可以满足普通的音乐播放的需求。如果你感兴趣的话,你还可以去研究一下音乐进度的控制、循环播放、歌词展示、后天播放、Now Playing Center以及Remote Control控制音乐的播放等。

点赞