我正在製作一個使用AVAudioPlayerNode的音頻播放器,播放具有某種效果(延遲,音高變化,比率變化等)的歌曲,但我一直顯示歌曲電流時間和持續時間。 AVAudioPlayerNode似乎不像AVAudioPlayer.currentTime或.duration。如何使用AVAudioPlayerNode顯示歌曲的當前時間和持續時間
我真的很感激,如果你可以幫助我通過使用AVAudioPlayerNode顯示當前時間和持續時間。
我正在製作一個使用AVAudioPlayerNode的音頻播放器,播放具有某種效果(延遲,音高變化,比率變化等)的歌曲,但我一直顯示歌曲電流時間和持續時間。 AVAudioPlayerNode似乎不像AVAudioPlayer.currentTime或.duration。如何使用AVAudioPlayerNode顯示歌曲的當前時間和持續時間
我真的很感激,如果你可以幫助我通過使用AVAudioPlayerNode顯示當前時間和持續時間。
持續時間,.length屬性AVAudioFile工作。 我將文件中的採樣幀數除以採樣率(44100hz)。
在當前時間,暫時我使用UISlider.value並與示例幀合成值。
對於當前的時間,這是我用:
- (NSTimeInterval)currentTimeInSeconds
{
AVAudioTime *nodeTime = self.playerNode.lastRenderTime;
AVAudioTime *playerTime = [self.playerNode playerTimeForNodeTime:nodeTime];
NSTimeInterval seconds = (double)playerTime.sampleTime/playerTime.sampleRate;
return seconds;
}
除了渲染時間在一個抽象的時間基準,玩家節點提供的這個時間轉換成通過playerTimeForNodeTime
自己的播放時間表。也尊重暫停等
這是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!
快樂編碼!
對於AVAudioPlayerNode
SWIFT 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
}
}
@KeitaBickOhshiro它是否適合你,你可以標記的答案正確或給予好評它,使其對其他成員都看得到。 – 2014-12-16 12:48:22
這給出了實際的位置,但是如果你做AudioNode.ScheduleSegment(...),位置將不會被重置爲0,它只會繼續計數。 – 2017-11-10 09:17:26
如何解決這個問題,@DanielDirtyNativeMartin。請回復 – 2018-01-15 06:09:01