AVAudioPlayer不会以声音方式播放,不会抛出任何错误,也不会调用委托方法

时间:2014-05-29 22:29:44

标签: ios avaudioplayer

遇到一个非常奇怪的问题。我正在尝试使用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!!");
    }
}

1 个答案:

答案 0 :(得分:0)

好吧,我似乎找到了解决办法,虽然我不确定为什么......因为它没有那么多代码,我只是把它移到了调用类中。所以调用类现在直接播放AudioNotes,而不是AudioNotes自己播放。现在它有效。