Swift 3:获取AVAudioPCMBuffer的长度作为TimeInterval?
Swift 3: Get length of AVAudioPCMBuffer as TimeInterval?
我想做的就是标题所说的,但我似乎做不到。我尝试执行以下操作:
func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval {
let framecount = buffer.frameCapacity
let bytesperframe = buffer.format.streamDescription.pointee.mBytesPerFrame
return TimeInterval(bytesperframe * framecount)
}
但这给出的数字似乎不是我想要的。我已经尝试寻找答案,但似乎没有人问这个,所以我可能遗漏了一些明显的东西。有人知道吗?
编辑:我将代码更改为:
func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval {
let framecount = Float64(buffer.frameCapacity)
let samplerate = buffer.format.streamDescription.pointee.mSampleRate
return TimeInterval(framecount / samplerate)
}
这似乎可行,但似乎有点复杂。还有别的办法吗?
您需要使用 frameLength
而不是 frameCapacity
。
感谢 Rhythmic Fistman 的创意!我现在将代码更改为:
func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval {
let framecount = Double(buffer.frameLength)
let samplerate = buffer.format.sampleRate
return TimeInterval(framecount / samplerate)
}
现在看起来简单多了,而且行得通。希望我做的一切都是对的。
我想做的就是标题所说的,但我似乎做不到。我尝试执行以下操作:
func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval {
let framecount = buffer.frameCapacity
let bytesperframe = buffer.format.streamDescription.pointee.mBytesPerFrame
return TimeInterval(bytesperframe * framecount)
}
但这给出的数字似乎不是我想要的。我已经尝试寻找答案,但似乎没有人问这个,所以我可能遗漏了一些明显的东西。有人知道吗?
编辑:我将代码更改为:
func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval {
let framecount = Float64(buffer.frameCapacity)
let samplerate = buffer.format.streamDescription.pointee.mSampleRate
return TimeInterval(framecount / samplerate)
}
这似乎可行,但似乎有点复杂。还有别的办法吗?
您需要使用 frameLength
而不是 frameCapacity
。
感谢 Rhythmic Fistman 的创意!我现在将代码更改为:
func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval {
let framecount = Double(buffer.frameLength)
let samplerate = buffer.format.sampleRate
return TimeInterval(framecount / samplerate)
}
现在看起来简单多了,而且行得通。希望我做的一切都是对的。