我的viewcontroller中有以下代码。当我运行时,音频不会在xcode模拟器中播放。关于我应该做什么的任何建议?
另外,我已将anomaly.mp3保存在与ViewController.m相同的目录(无子文件夹)中。
#import <AVFoundation/AVFoundation.h> //before viewDidLoad
NSError * error = nil;
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:@"anomaly"
ofType:@"mp3"]];
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:url
error:&error];
if (error){
NSLog(@"error: %@", [error localizedDescription]);
}
NSLog(@"test");
[audioPlayer play];
答案 0 :(得分:0)
尝试设置音频播放器的音量。您还可以查看&#34;播放&#34;的结果。功能,看看事情是否正常。 play函数隐式调用prepareToPlay。此功能可能由于多种原因而失败,令人生气,没有任何错误对象或消息......
NSError * error = nil;
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:@"anomaly"
ofType:@"mp3"]];
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:url
error:&error];
if (error){
NSLog(@"error: %@", [error localizedDescription]);
} else {
audioPlayer.volume = 50;
if([audioPlayer play]) NSLog(@"Should be playing");
else NSLog(@"Something weird happened"); //usually related to unavailable hardware
}
答案 1 :(得分:0)
通过将其声明为:{/ p>来强烈引用audioPlayer
@property (nonatomic) AVAudioPlayer *audioPlayer;
,然后在使用self.audioPlayer
的任何地方使用audioPlayer
。
您的代码存在的问题是,因为您的audioPlayer
只是方法的局部变量,所以只要您的方法完成,它就会被ARC取消分配。保持对它的强烈引用将保留audioPlayer
对象和内存,只要你不打电话,你的声音就会一直播放
[self.audioPlayer stop];