1

我想做的只是标题所说的,但我似乎做不到。我尝试执行以下操作:

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)
}

这似乎有效,但似乎有点复杂。还有其他方法吗?

4

2 回答 2

3

感谢节奏拳手的创意!我现在将代码更改为:

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

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

于 2016-10-29T04:08:05.223 回答
2

您需要使用frameLength而不是frameCapacity.

于 2016-10-29T04:00:37.677 回答