私は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]
失敗..