遇到一个非常奇怪的问题。我正在尝试使用AVAudioPlayer从磁盘播放一个简单的声音文件。我通过一个属性强烈提到它,所以ARC不会过早地杀死它。正如我在标题中所说,我没有声音,错误和没有委托方法被调用 - 包括didFinishPlaying(我期望)。唯一似乎“发生”的是我听到两声安静的点击......
现在这是奇怪的部分...如果我在[_player play]之前设置断点,然后跳过,音频播放就好了!!这基本上向我证实我已经正确设置了,并让我认为其他东西正在从另一个线程踩到共享的AVAudioSession?我不确定。完全没有委托调用是非常奇怪的 - 似乎每当AVAudioPlayer完成时都应该调用某些。
我也使用OpenEars进行语音识别,但在尝试播放音频之前,我在其上调用了suspendListening。我也尝试完全禁用OpenEars,尝试将其隔离为原因 - 但这也没有效果。非常困惑。感谢任何帮助!
-(void)playAudioNoteWithPath:(NSString *)filePath
{
NSError *error = nil;
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord
withOptions:AVAudioSessionCategoryOptionAllowBluetooth
error:&error];
if (error) {
DLog(@"ERROR setting audio session category: %@", [error localizedDescription]);
}
NSURL *URL = [NSURL URLWithString:filePath];
if (!URL) {
DLog(@"No file path!!");
}
_player = [[AVAudioPlayer alloc] initWithContentsOfURL:URL
error:&error];
if (error) {
DLog(@"ERROR initializing audio player: %@", [error debugDescription]);
}
_player.delegate = self;
[_player prepareToPlay];
// Setting a breakpoint here will cause playback to succeed.
if (![_player play]) {
DLog(@"ERROR playing!!");
}
}
答案 0 :(得分:0)
好吧,我似乎找到了解决办法,虽然我不确定为什么......因为它没有那么多代码,我只是把它移到了调用类中。所以调用类现在直接播放AudioNotes,而不是AudioNotes自己播放。现在它有效。