AVAudioPlayer使用总结

一、实现一个播放器


@interface ViewController ()
@property (strong, nonatomic) AVAudioPlayer * player;
@end

- (void)playerInitialize:(NSString *)musicName{
    
    NSString *musicNameString = [NSString stringWithFormat:@"八音盒-遇见"];
    NSString *path = [[NSBundle mainBundle] pathForResource:musicNameString ofType:@"mp3"];
    NSURL *url = [NSURL fileURLWithPath:path];
    NSError *error = nil;
    //初始化一个音频对象,播放一首就要初始化一次,同时会把之前内容给遗弃。比如正在播放时切换一首歌,就需要重新调用下面代码。
    _player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    //一首歌播放次数:负数--无限循环,0--播放一次,1--播放2次,2--播放3此,以此类推
    _player.numberOfLoops = 0;
    //音量
    _player.volume = 0.5;
    [_player prepareToPlay];
    if (error) {
        NSLog(@"%@",error.localizedDescription);
    }
    [_player play];
}

注意事项:
1.别忘了导入
2.更换播放歌曲需要重新调用[self playerInitialize:musicName],需要重新初始化音频文件,然后加到缓存,最后播放出来,这样才有效。
3.编译器会自动添加[_player prepareToPlay],不过我们是学习就主动添加上去。
4.正常情况下使用模拟器调试会导致xcode停止在[_player prepareToPlay],这是因为使用AVAudioPlayer框架的时候会抛出_cxa_throw,而这个错误实际上是AVAudioPlayer使用C++库产生的。那么为什么xcode会停止呢?这是因为我们设置了全局断点 "All Exceptions”,它会捕捉__cxa_throw,从而使Xcode停止。所以解决方法有两个:

1.取消全局断点。

AVAudioPlayer使用总结_第1张图片

你可能感兴趣的:(AVAudioPlayer使用总结)