一、实现一个播放器
@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.取消全局断点。