【问题标题】:Swift 3: Get length of AVAudioPCMBuffer as TimeInterval?Swift 3:获取 AVAudioPCMBuffer 的长度作为 TimeInterval?
【发布时间】:2016-10-29 02:58:34
【问题描述】:

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

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

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

【问题讨论】:

    标签: swift audio avfoundation avaudiopcmbuffer


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      您需要使用frameLength 而不是frameCapacity

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-09
        • 1970-01-01
        相关资源
        最近更新 更多