使用 AVAudioPlayer 重复音频播放

Posted

技术标签:

【中文标题】使用 AVAudioPlayer 重复音频播放【英文标题】:Repeating Audio playback with AVAudioPlayer 【发布时间】:2020-04-05 14:31:48 【问题描述】:

我正在使用 AVAudioPlayer,并希望用户可以在循环播放后重新开始播放。对于用户反馈,我使用了 UIAlertController,但我仍然很难使用 AVAudioPlayer 完成重播。我希望用户可以随心所欲地选择重播,直到他选择否。

这是我到目前为止的代码,但是如果用户选择“是”该怎么办...请参阅下面代码中的注释。

    // schedule the audio file
    [self->_playerNode scheduleFile:self->_file atTime:nil completionHandler:^

          dispatch_async(dispatch_get_main_queue(), ^

                UIAlertController * alert=   [UIAlertController
                                              alertControllerWithTitle:@"End of file"
                                              message:@"play again?"
                                              preferredStyle:UIAlertControllerStyleAlert];

               UIAlertAction* yes = [UIAlertAction
                                     actionWithTitle:@"YES"
                                     style:UIAlertActionStyleDefault
                                     handler:^(UIAlertAction * action)
                                     

                                            // WHAT TO DO HERE????

                                            [alert dismissViewControllerAnimated:YES completion:nil];
                                     ];

                UIAlertAction* no = [UIAlertAction
                                     actionWithTitle:@"NO"
                                     style:UIAlertActionStyleDefault
                                     handler:^(UIAlertAction * action)
                                     
                                            NSLog(@"Stop");
                                            [self->_engine stop];
                                            [session setActive:false error:nil];
                                            [alert dismissViewControllerAnimated:YES completion:nil];
                                     ];

                [alert addAction:yes];
                [alert addAction:no];

                [self presentViewController:alert animated:YES completion:nil];
            );
        ];

    // playback the audio file
    [self->_playerNode play];

感谢您的帮助!

【问题讨论】:

【参考方案1】:

由于没有人有任何其他建议,我将回答我自己的问题:

我找不到递归加载播放器的方法,所以我读出了文件的长度并启动了一个计时器:

NSTimeInterval seconds = self->_file.length / SAMPLERATE;

您还需要处理应用程序进入后台模式并停止+恢复计时器的情况!

【讨论】:

以上是关于使用 AVAudioPlayer 重复音频播放的主要内容,如果未能解决你的问题,请参考以下文章

使用 AVAudioPlayer 重复音频播放

如何在 Swift 5 中使用 AV 音频播放器在特定时间间隔内快进或快退音频(如歌曲)?

如何让用户选择 AVAudioPlayer 播放音频的循环次数

AVAssetWriter / AVAudioPlayer 冲突?

如何在底部面板中存储当前音频信息(AVAudioPlayer,Swift)[重复]

当音频输入添加到 AVCaptureSession 时 AVAudioPlayer 停止