录制音频并保存到文档目录后无法使用 AVAudioPlayer 播放音频文件

Posted

技术标签:

【中文标题】录制音频并保存到文档目录后无法使用 AVAudioPlayer 播放音频文件【英文标题】:After recording audio and save to document directory unable to play audio file with AVAudioPlayer 【发布时间】:2013-04-12 10:11:01 【问题描述】:

我正在开发具有录制音频并播放存储在文档目录中的录制文件的应用程序。

这是我的代码:

录制按钮方法。

(IBAction)stopButtonPressed:(id)sender

     UIButton *button = (UIButton *)sender;

     if (button.selected)  // Play recorded file.

     self.stopButton.selected = NO;

     NSError *error;

    self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioRecorder.url     error:&error];

    self.audioPlayer.delegate = self;

    self.audioPlayer.volume = 1.0;

    [self.audioPlayer prepareToPlay];

    [self.audioPlayer play];

    

    else // Stop recording.

    self.stopButton.selected = YES;

    if (recordTimer) 

    [recordTimer invalidate];

    

    [self.audioPlayer stop];

    self.recordButton.selected = NO;

    [audioRecorder stop];

    self.readyLabel.text = @"READY";

    [self insertNewRecording];
        
    

【问题讨论】:

我可以录制文件,但无法播放录制的文件。 你检查过你的错误吗? 它没有显示任何错误。 并且你的 NSError *error 在 self.audioPlayer = [[AVAudioPlayer ??? 之后始终为空 【参考方案1】:

我认为您使用的是 ARC,在这种情况下,您需要保留 AVAudioPlayer,因为它会自动设置为 nil。在你的头文件中输入以下内容`

@property (nonatomic, strong) AVAudioPlayer *audioPlayer;

希望这对你有用, 干杯吉姆

【讨论】:

【参考方案2】:

嗯..我不确定。但作为一个测试,也许你可以尝试通过指定文件名来播放文件?例如。你有一个 forest.mp3 可以播放,代码的关键部分可以是这样的:

path = [[NSBundle mainBundle] pathForResource:@"forest" ofType:@"mp3"]; 
NSData *sampleData = [[NSData alloc] initWithContentsOfFile:path]; 
NSError *audioError = nil; 
av = [[AVAudioPlayer alloc] initWithData:sampleData  error:&audioError];

如果一切顺利,可能与代码中的 audioRecorder.url 有关?

希望这能给你一些想法。

【讨论】:

是的,它与路径问题有关。现在我可以播放录制的文件了。

以上是关于录制音频并保存到文档目录后无法使用 AVAudioPlayer 播放音频文件的主要内容,如果未能解决你的问题,请参考以下文章

在 iphone 应用程序中录制音频,带麦克风保存到文档目录

录制音频,添加效果,然后将结果保存到音频文件

如何录制/保存 iPhone 应用程序中正在播放的音频?

在应用程序终止之前获取 AVAudio 录音 URL

保存录制的音频 blob [JS]

xcode:如何在使用 AVFoundation 录制音频后保存音频文件