如何在 Swift 中用 Float 填充 AudioBuffer

Kos*_*Zzz 1 objective-c audioqueueservices swift ezaudio

我制作了一个使用 EZAudio 库的应用程序,它必须从麦克风获取数据并将其存储在变量中(我已经这样做了):

    func microphone(microphone: EZMicrophone!, 
                    hasAudioReceived buffer: UnsafeMutablePointer<UnsafeMutablePointer<Float>>, 
                    withBufferSize bufferSize: UInt32, 
                    withNumberOfChannels numberOfChannels: UInt32) 
   {
       let new = (buffer[0].memory)
       audioStack.append(new)
   }
Run Code Online (Sandbox Code Playgroud)

如您所见,我使用 EZMicrophoneDelegate 和上面的 func 从麦克风获取缓冲区数据。

未来的想法是通过 WebSocket 发送值并立即播放。

我想使用 EZOuput 和 EZOuputDataSource`s 方法播放该数组:

    func output(output: EZOutput!, 
                shouldFillAudioBufferList audioBufferList: UnsafeMutablePointer<AudioBufferList>, 
                withNumberOfFrames frames: UInt32, 
                timestamp: UnsafePointer<AudioTimeStamp>) -> OSStatus 
    {
         if audioStack.count > 0 {
         let data = audioBufferList.memory.mBuffers.mData
         // "data" = is pointer to mData, that i want to fill with float
         // and I have do it here

         return noErr
    }
Run Code Online (Sandbox Code Playgroud)

但“MDATA”类型是UnsafeMutablePointer,我不`吨知道如何来填补它,我看到在Objective-C像一些例子 ,正是这条线:

Float32 *buffer = (Float32 *)audioBufferList->mBuffers[0].mData;
Run Code Online (Sandbox Code Playgroud)

我无法理解如何将我的 Float 类型从数组快速存储到带有 Void 类型的 mData ?

铸造如:

(audioBufferList.memory.mBuffers.mData) as Float = audioStack[0]
Run Code Online (Sandbox Code Playgroud)

失败..

Kos*_*Zzz 5

看起来我找到了如何将 UnsafeMurtablePointer 转换为 UnsafeMutablePointer :

let data = UnsafeMutablePointer<Float>(audioBufferList.memory.mBuffers.mData)
Run Code Online (Sandbox Code Playgroud)