AVAudioPlayer 只播放自定义音频文件一秒

Posted

技术标签:

【中文标题】AVAudioPlayer 只播放自定义音频文件一秒【英文标题】:AVAudioPlayer only plays a custom audio file for one second 【发布时间】:2012-10-07 21:59:22 【问题描述】:

在我的应用程序中,我使用 AVAudioRecorder 对象来允许用户录制声音文件,当用户完成录制后,他们可以通过 AVAudioPlayer 播放声音。我遇到的问题是当用户尝试播放它只播放一秒钟的音频文件时。更奇怪的是,这段代码在 ios 5 上运行良好,但自从升级到 iOS 6 后,这个问题就开始发生了。

我已经检查了通过 iTunes 文件共享创建的文件,并且我可以在我的桌面上播放整个声音文件。

下面我粘贴了加载音频播放器的操作文件中的代码。据我所知

- (void)playRecordingBtnClk:(id)sender

    NSLog(@"Play btn clk");

    if (!isRecording) 

        // disable all buttons
        [_recordButton disableButton];
        [_stopButton disableButton];
        [_playButton disableButton];
        [_saveButton disableButton];

        // create the player and play the file from the beginning
        if (audioPlayer) 
            [audioPlayer release];
            audioPlayer = nil;
        

        audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioRecorder.url error:&error];
        audioPlayer.delegate = self;
        audioPlayer.currentTime = 0.0;
        [audioPlayer prepareToPlay];

        if (error) 
            NSLog(@"Error Playing Audio File: %@", [error debugDescription]);
            return;
        

        [audioPlayer play];
        [self startTicker];
    

看来

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag 

方法在一秒钟后被调用,这就是音频播放器停止的原因。有人知道这里发生了什么吗?

【问题讨论】:

嗯...我什至没有意识到这是人们需要做的事情。我阅读了您链接的文章并接受了答案。谢谢 【参考方案1】:

对于 iOS 6.0,再添加两行:

soundPlayer.currentTime = soundPlayer.duration + soundPlayer.duration;
soundPlayer.numberOfLoops = 1;

不是一个完美的解决方案。我们可能需要等待 iOS 6.0.1/6.1 更新。

更多请visit this,有人评论说可能是CDAudioManager的问题。

【讨论】:

好的,我会试一试,如果可行,我会回复。我认为这与 iOS 6 中可能存在的错误有关。感谢您的帮助!

以上是关于AVAudioPlayer 只播放自定义音频文件一秒的主要内容,如果未能解决你的问题,请参考以下文章

自定义 tableviewcell 上的 UISlider 和 UILabel 在第二次播放音频之前不会使用 avaudioplayer 更新

iPhone:AVAudioPlayer 并不总是在设备上播放音频

如何用AVAudioPlayer依次播放多个音频文件

iOS 在特定时间停止音频播放(AVAudioPlayer 结束时间)

OCiOS开发:音频播放器 AVAudioPlayer

AVAudioPlayer 不播放音频文件 - swift