簡體   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