1

私は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 と上記の関数を使用して、マイクからバッファ データを取得しています。

将来のアイデアは、WebSocket で値を送信し、1 つずつすぐに再生することです。

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 であり、それを埋める方法がわかりません。このような目的の C の例をいくつか見ました まさにこの行です。

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

Float 型を配列から Void 型の mData に迅速に格納する方法を理解できませんか?

次のようなキャスティング:

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

失敗..

4

1 に答える 1

5

UnsafeMurtablePointer を UnsafeMurtablePointer にキャストする方法を見つけたようです:

let data = UnsafeMutablePointer<Float>(audioBufferList.memory.mBuffers.mData)
于 2016-04-20T12:10:49.553 に答える