【问题标题】:AudioBufferList allocate in SwiftAudioBufferList 在 Swift 中分配
【发布时间】:2017-04-27 20:22:28
【问题描述】:

我正在努力使用这个 API 和 Swift 中的语法

audioBufferList = AudioBufferList(mNumberBuffers: 2, mBuffers: (AudioBuffer))

我不知道 (AudioBuffer) 和 () 是什么意思?任何想法以及如何初始化它?这是来自标题:

  public struct AudioBufferList {

      public var mNumberBuffers: UInt32
      public var mBuffers: (AudioBuffer) // this is a variable length array of mNumberBuffers elements
      public init()
      public init(mNumberBuffers: UInt32, mBuffers: (AudioBuffer))
 }

【问题讨论】:

  • 这取决于你想如何以及在哪里使用它。无论如何检查这个thread。如果这不足以解决您的问题,您可能需要编辑您的问题并包含更多上下文。

标签: ios swift3 core-audio audiobuffer audiobufferlist


【解决方案1】:

这是一种使用空单声道缓冲区数组初始化 AudioBufferList 的方法,您可以将其传递给音频单元调用,例如 AudioUnitRender(),然后根据需要分配和填充缓冲区:

var bufferList = AudioBufferList(
        mNumberBuffers: 1,
        mBuffers: AudioBuffer(
            mNumberChannels: UInt32(1),
            mDataByteSize: 1024,
            mData: nil))

【讨论】:

  • 同一个缓冲区列表中的2个缓冲区怎么样,语法是什么?
【解决方案2】:

通过以下方式使用AVAudioPCMBuffer类解决了问题:

import AVFoundation

// noninterleaved stereo data
let processingFormat = AVAudioFormat(
  commonFormat: .pcmFormatFloat32,
  sampleRate: 44100,
  channels: 2,
  interleaved: false
)!

// this line also creates AudioBufferList instance.
let buffer = AVAudioPCMBuffer(
  pcmFormat: processingFormat,
  frameCapacity: 1024)!
// this line updates mDataByteSize properties
buffer.frameLength = 1024

let bufferList: UnsafePointer<AudioBufferList> = buffer.audioBufferList

print(bufferList.pointee) // Prints: AudioBufferList(mNumberBuffers: 2, mBuffers: __C.AudioBuffer(mNumberChannels: 1, mDataByteSize: 4096, mData: Optional(0x00007ff253840e00)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多