AudioBufferList размещают в Swift

Я борюсь с этим 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))
 }

1 ответ

Вот один из способов инициализации AudioBufferList с одним пустым массивом монобуфера, который вы можете передать вызовам Audio Unit, таким как AudioUnitRender(), который затем распределяет и заполняет буфер по мере необходимости:

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

Решил проблему с помощью 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)))
Другие вопросы по тегам