Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 音频缓冲区列表在Swift中分配_Ios_Swift3_Core Audio_Audiobuffer_Audiobufferlist - Fatal编程技术网

Ios 音频缓冲区列表在Swift中分配

Ios 音频缓冲区列表在Swift中分配,ios,swift3,core-audio,audiobuffer,audiobufferlist,Ios,Swift3,Core Audio,Audiobuffer,Audiobufferlist,我正在努力使用这个API和Swift中的语法 audioBufferList = AudioBufferList(mNumberBuffers: 2, mBuffers: (AudioBuffer)) 我不知道()的(AudioBuffer)是什么意思?有什么想法吗?我如何初始化它?这来自标题: public struct AudioBufferList { public var mNumberBuffers: UInt32 public var mBuffers

我正在努力使用这个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))
 }

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

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

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

import-AVFoundation
//非交叉立体数据
let processingFormat=AVAudioFormat(
commonFormat:.pcmFormatFloat32,
采样器:44100,
频道:2,
交错:假
)!
//此行还创建AudioBufferList实例。
let buffer=AVAudioPCMBuffer(
pcmFormat:processingFormat,
帧容量:1024)!
//此行更新mDataByteSize属性
buffer.frameLength=1024
let bufferList:UnsafePointer=buffer.audioBufferList
print(bufferList.pointee)//Prints:AudioBufferList(mNumberBuffers:2,mbuffer:C.AudioBuffer(mNumberChannels:1,mDataByteSize:4096,mData:Optional(0x00007ff253840e00)))

这取决于您想在何处使用它。不管怎样,看看这个。如果这还不足以解决您的问题,您可能需要编辑您的问题并包含更多的上下文。在同一个缓冲区列表中有两个缓冲区,语法是什么?