簡體   English   中英

如何在Swift中用Float填充AudioBuffer

[英]how to fill AudioBuffer with Float in Swift

我制作了一個使用EZAudio庫的應用程序,它必須從麥克風獲取數據並將其存儲在變量中(我已經做到了):

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

如您所見,我正在使用EZMicrophoneDelegate和上面的func從麥克風獲取緩沖區數據。

未來的想法是通過WebSocket發送值並立即一個接一個地播放。

我想使用EZOuput和EZOuputDataSource的方法播放該數組:

    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
    }

但是“ mData”的類型是UnsafeMutablePointer,我不知道如何填充它,我在Objective-C中看到了一些示例,如下所示

Float32 *buffer = (Float32 *)audioBufferList->mBuffers[0].mData;

我不明白如何將我的Float類型從數組快速存儲到Void類型的mData中?

投射方式:

(audioBufferList.memory.mBuffers.mData) as Float = audioStack[0]

失敗..

看起來我發現了如何將UnsafeMurtablePointer轉換為UnsafeMutablePointer:

let data = UnsafeMutablePointer<Float>(audioBufferList.memory.mBuffers.mData)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM