我已经设置了音频引擎并连接了一些节点,以便制作如下所示的音频图:
//
//AVAudioPlayerNode --> AVAudioMixerNode --> AVAudioUnitVarispeed ---> AvAudioOutputNode
// | |
// AVAudioPCMBuffer AudioTap
//
一切正常,音频引擎正在运行。现在我想获取 AVAudioPlayerNode/AVAudioPCMBuffer 的framePosition(进度、消耗的帧、%),以便更新用户界面中的当前位置。像这样的东西:
[timeEffectNode installTapOnBus:0 bufferSize:4096 format:[timeEffectNode outputFormatForBus:0] block:^(AVAudioPCMBuffer *buffer, AVAudioTime *when) {
//calculate the current node progress here. ???
}];
我确信必须有一种方法可以做到这一点,但我似乎找不到任何有关如何实现这一目标的文档?
任何想法将不胜感激。
最佳答案
我最近创建了一个与 AVAudioEngine 和 AVPCMBufferNode 配合使用的播放器。玩家保存玩家已玩游戏的总时间的内部时间。要访问它,您必须获取播放器的lastRenderTime,然后使用(sampleTime/sampleRate)。这应该返回玩家玩游戏的总时间(以秒为单位)。
如果您想重置播放器计时器(例如当您搜索文件或切换到新歌曲时),您必须使用播放器的 playAtTime 方法进行设置。 playAtTime 不执行任何文件查找,它只是修改播放器内部计时器,然后开始播放。
我希望这会有所帮助。
如果您想了解我如何使用它,请查看我的项目:https://github.com/danielmj/AEAudioPlayer
关于ios - AVAudioEngine 跟踪音频进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26928309/