Swift 3: Get length of AVAudioPCMBuffer as TimeInterval?
audio, avaudiopcmbuffer, avfoundation, swift
Solution
Thanks for the idea Rhythmic Fistman! I changed my code to this now:
func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval {
let framecount = Double(buffer.frameLength)
let samplerate = buffer.format.sampleRate
return TimeInterval(framecount / samplerate)
}
It seems a lot simpler now, and it works. Hopefully I'm doing everything right.
Problem
I'm trying to get the time length of an AVAudioPCMBuffer, but I can't seem to do it. I tried doing the following: ``` func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval { let framecount = buffer.frameCapacity let bytesperframe = buffer.format.streamDescription.pointee.mBytesPerFrame return TimeInterval(bytesperframe * framecount) } ``` But this gives a huge number that doesn't seem to be what I'm after. EDIT: I changed my code to this: ``` func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval { let framecount = Float64(buffer.frameCapacity) let samplerate = buffer.format.streamDescription.pointee.mSampleRate return TimeInterval(framecount / samplerate) } ``` Which seems to work, but seems a bit complicated. Is there another way?