繁体   English   中英

AVAudioEngine跟踪音频进度

[英]AVAudioEngine track progress of audio

我已经设置了音频引擎,并连接了几个节点,以便制作如下的音频图:

//
//AVAudioPlayerNode --> AVAudioMixerNode --> AVAudioUnitVarispeed ---> AvAudioOutputNode
//       |                                                         |
// AVAudioPCMBuffer                                             AudioTap
//

一切正常,音频引擎正在运行。 现在,我想获取AVAudioPlayerNode / AVAudioPCMBuffer的framePosition(进度,消耗的帧,%),以便更新UI中的当前位置。 就像是:

[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

只需简单地为您当前的节点时间拍摄快照

AVAudioTime *now = player.lastRenderTime;

然后问你的球员

[player playerTimeForNodeTime:now];

当然您可以一次通话

[player playerTimeForNodeTime:player.lastRenderTime];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM