Bic*_*ick 6 avfoundation swift avaudioplayernode
我正在制作一个使用AVAudioPlayerNode的音频播放器并播放一些有效(延迟,音高变化,速率变化等)的歌曲,但我仍然坚持显示歌曲的当前时间和持续时间.AVAudioPlayerNode似乎没有AVAudioPlayer.currentTime或.duration.
如果您可以通过使用AVAudioPlayerNode帮助我显示当前时间和持续时间,我真的很感激.
Tho*_*rer 13
目前,这是我使用的:
- (NSTimeInterval)currentTimeInSeconds
{
AVAudioTime *nodeTime = self.playerNode.lastRenderTime;
AVAudioTime *playerTime = [self.playerNode playerTimeForNodeTime:nodeTime];
NSTimeInterval seconds = (double)playerTime.sampleTime / playerTime.sampleRate;
return seconds;
}
Run Code Online (Sandbox Code Playgroud)
除了抽象时基中的渲染时间之外,播放器节点还将此时间转换为其自己的播放时间线playerTimeForNodeTime.也尊重暂停等
这是快速的:
private func currentTime() -> NSTimeInterval {
if let nodeTime: AVAudioTime = myAvAudioPlayer.lastRenderTime, playerTime: AVAudioTime = myAvAudioPlayer.playerTimeForNodeTime(nodeTime) {
return Double(Double(playerTime.sampleTime) / playerTime.sampleRate)
}
return 0
}
Run Code Online (Sandbox Code Playgroud)
只需将myAvAudioPlayer替换为您的 AVAudioPlayerNode!
快乐编码!
斯威夫特5:
持续时间,使用AVAudioPlayrtNode'sAVAudioFile
extension AVAudioFile{
var duration: TimeInterval{
let sampleRateSong = Double(processingFormat.sampleRate)
let lengthSongSeconds = Double(length) / sampleRateSong
return lengthSongSeconds
}
}
Run Code Online (Sandbox Code Playgroud)
然后当前时间:
extension AVAudioPlayerNode{
var current: TimeInterval{
if let nodeTime = lastRenderTime,let playerTime = playerTime(forNodeTime: nodeTime) {
return Double(playerTime.sampleTime) / playerTime.sampleRate
}
return 0
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢@布莱恩·贝克尔
在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
}
}
Run Code Online (Sandbox Code Playgroud)
在此期间,AVAudioFile的.length属性起作用。我将文件中的样本帧数除以采样率(44100hz)。
对于当前时间,我暂时使用UISlider.value并将该值与示例帧合成。
| 归档时间: |
|
| 查看次数: |
4017 次 |
| 最近记录: |