我正在制作一个使用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