Swift 3:获取AVAudioPCMBuffer的长度作为TimeInterval?

时间:2016-10-29 02:58:34

标签: swift audio avfoundation avaudiopcmbuffer

所有我想做的就是标题所说的,但我似乎无法做到。我尝试了以下操作:

=

但是这给了一个巨大的数字,似乎并不是我所追求的。我已经尝试寻找答案,但似乎没有人问这个问题,所以我可能会遗漏一些明显的东西。有人知道吗?

编辑:我将我的代码更改为:

func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval {
  let framecount = buffer.frameCapacity
  let bytesperframe = buffer.format.streamDescription.pointee.mBytesPerFrame
  return TimeInterval(bytesperframe * framecount)
}

这似乎有效,但似乎有点复杂。还有另一种方式吗?

2 个答案:

答案 0 :(得分:1)

您需要使用frameLength代替frameCapacity

答案 1 :(得分:1)

感谢Rhythmic Fistman的想法!我现在把代码更改为:

func getLength(buffer: AVAudioPCMBuffer) -> TimeInterval {
  let framecount = Double(buffer.frameLength)
  let samplerate = buffer.format.sampleRate
  return TimeInterval(framecount / samplerate)
}

现在看起来简单得多,而且有效。希望我做的一切都是正确的。