2014-10-26 57 views
4

我正在製作一個使用AVAudioPlayerNode的音頻播放器,播放具有某種效果(延遲,音高變化,比率變化等)的歌曲,但我一直顯示歌曲電流時間和持續時間。 AVAudioPlayerNode似乎不像AVAudioPlayer.currentTime或.duration。如何使用AVAudioPlayerNode顯示歌曲的當前時間和持續時間

我真的很感激,如果你可以幫助我通過使用AVAudioPlayerNode顯示當前時間和持續時間。

回答

2

持續時間,.length屬性AVAudioFile工作。 我將文件中的採樣幀數除以採樣率(44100hz)。

在當前時間,暫時我使用UISlider.value並與示例幀合成值。

9

對於當前的時間,這是我用:

- (NSTimeInterval)currentTimeInSeconds 
{ 
    AVAudioTime *nodeTime = self.playerNode.lastRenderTime; 
    AVAudioTime *playerTime = [self.playerNode playerTimeForNodeTime:nodeTime]; 

    NSTimeInterval seconds = (double)playerTime.sampleTime/playerTime.sampleRate; 
    return seconds; 
} 

除了渲染時間在一個抽象的時間基準,玩家節點提供的這個時間轉換成通過playerTimeForNodeTime自己的播放時間表。也尊重暫停等

+1

@KeitaBickOhshiro它是否適合你,你可以標記的答案正確或給予好評它,使其對其他成員都看得到。 – 2014-12-16 12:48:22

+1

這給出了實際的位置,但是如果你做AudioNode.ScheduleSegment(...),位置將不會被重置爲0,它只會繼續計數。 – 2017-11-10 09:17:26

+0

如何解決這個問題,@DanielDirtyNativeMartin。請回復 – 2018-01-15 06:09:01

2

這是SWIFT:

private func currentTime() -> NSTimeInterval { 
    if let nodeTime: AVAudioTime = myAvAudioPlayer.lastRenderTime, playerTime: AVAudioTime = myAvAudioPlayer.playerTimeForNodeTime(nodeTime) { 
     return Double(Double(playerTime.sampleTime)/playerTime.sampleRate) 
    } 
    return 0 
} 

只需更換myAvAudioPlayer你AVAudioPlayerNode!

快樂編碼!

0

對於AVAudioPlayerNodeSWIFT 4的持續時間:

func durationOfNodePlayer(_ fileUrl: URL) -> TimeInterval { 
    do { 

     let file = try AVAudioFile(forReading: fileUrl) 
     let audioNodeFileLength = AVAudioFrameCount(file.length) 
     return Double(Double(audioNodeFileLength)/44100) //Divide by the AVSampleRateKey in the recorder settings 

     } catch { 

      return 0 
     } 

} 
相關問題