Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift 3: Get length of AVAudioPCMBuffer as TimeInterval?

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?

like image 314
MysteryPancake Avatar asked Oct 15 '25 19:10

MysteryPancake


1 Answers

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.

like image 94
MysteryPancake Avatar answered Oct 18 '25 13:10

MysteryPancake