AVAudioPlayer使用总结

作者: 桃花流水鳜鱼肥 | 来源:发表于2016-05-03 14:35 被阅读3110次

一、实现一个播放器


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

1.取消全局断点。

相关文章

网友评论

  • 子小每文:必须重新初始化吗?别的方法不行么?
  • survivorsfyh:播放的时候为什么会报 “OSStatus”错误 2003334207。这个错误呢?
  • 44832370a1f6:太感谢了,调试了半年都没找到原因,楼主一语道破! :smile:
  • f30ae180496c:就遇到这个问题,谢谢解答 :smile:

本文标题:AVAudioPlayer使用总结

本文链接:https://www.haomeiwen.com/subject/dqnxrttx.html