2016-06-16 6 views
1

私はマイクからオーディオをキャプチャするために、私のスウィフトのプロジェクトで、このEZAudio方法があります:UnsafeMutablePointer <UnsafeMutablePointer <Float>>変数をAudioBufferListに変換する方法はありますか?

func microphone(microphone: EZMicrophone!, hasAudioReceived bufferList: UnsafeMutablePointer<UnsafeMutablePointer<Float>>, withBufferSize bufferSize: UInt32, withNumberOfChannels numberOfChannels: UInt32) { 

} 

しかし、私が本当に必要なことは送信するために、「bufferList」パラメータがAudioBufferList型として入ってくることを持っていることです私はObjective Cの中でやったようにソケットを介してこれらのオーディオパケット、:

//Objective C pseudocode: 
for(int i = 0; i < bufferList.mNumberBuffers; ++i){ 
    AudioBuffer buffer = bufferList.mBuffers[i]; 
    audio = ["audio": NSData(bytes: buffer.mData, length: Int(buffer.mDataByteSize))]; 
    socket.emit("message", audio); 
} 

は、どのように私はAudioBufferListにそのUnsafeMutablePointer>変数を変換することができますか?

+0

、あなたがこのために新たなアップデートを持っている 私は同じことを達成しようとしています、私は ソケットしたNSDataを送信する必要があり、私はcocoasyncsocketとezaudio –

+0

こんにちは@MuhammadFaizanKhatriを使用しています、私は事はいくつかの時間前に働いてしまいました、コードは答えとして下に貼り付けられます。それが動作すればUpvote! – Josh

答えて

0

私はこのように、ソケットに、マイクからオーディオをストリーミングすることができた。この一般AudioStreamDescriptorのセットアップが私のために働いた、あなたがあなた自身のニーズのためにそれを微調整する必要がある場合があります

func microphone(microphone: EZMicrophone!, hasBufferList bufferList: UnsafeMutablePointer<AudioBufferList>, withBufferSize bufferSize: UInt32, withNumberOfChannels numberOfChannels: UInt32) { 
     let blist:AudioBufferList=bufferList[0] 
     let buffer:AudioBuffer = blist.mBuffers 
     let audio = ["audio": NSData(bytes: buffer.mData, length: Int(buffer.mDataByteSize))]; 
     socket.emit("message", audio);//this socket comes from Foundation framework 
    } 

か波形アニメーションのようないくつかの部分を、OMMIT:

func initializeStreaming() { 
     var streamDescription:AudioStreamBasicDescription=AudioStreamBasicDescription() 
     streamDescription.mSampleRate  = 16000.0 
     streamDescription.mFormatID   = kAudioFormatLinearPCM 
     streamDescription.mFramesPerPacket = 1 
     streamDescription.mChannelsPerFrame = 1 
     streamDescription.mBytesPerFrame = streamDescription.mChannelsPerFrame * 2 
     streamDescription.mBytesPerPacket = streamDescription.mFramesPerPacket * streamDescription.mBytesPerFram 
     streamDescription.mBitsPerChannel = 16 
     streamDescription.mFormatFlags  = kAudioFormatFlagIsSignedInteger 
     microphone = EZMicrophone(microphoneDelegate: self, withAudioStreamBasicDescription: sstreamDescription, startsImmediately: false) 
     waveview?.plotType=EZPlotType.Buffer 
     waveview?.shouldFill = false 
     waveview?.shouldMirror = false 
    } 

それは、この事ランニング、幸運を得るために複雑でした!

+0

kAudioFormatLinearPCMフォーマットでセットアップしようとしましたが、うまくいきましたが、フォーマットをULawに変換する必要があります。その設定は私に厳しい時間を与えています。 –

+0

@MuhammadFaizanKhatri代わりにkAudioFormatULawを使ってみましたか?理論的には、あなたがそこで使用できる多くのオーディオフォーマットがありますが、現実には、ほとんどのフォーマットの組み合わせがクラッシュしたり、iOSで正しく動作しないことがあります。この構成は、他のすべてのものがクラッシュしたために使用しました。 – Josh

+0

@MuhammadFaizanKhatriここでULawを使用しようとしている人もいます:http://stackoverflow.com/questions/8426967/ios-audio-unit-playback-with-constant-noise – Josh

0

AudioBufferListポインタを作成し、memory関数の結果を使用すると思います。

let audioBufferList = UnsafePointer<AudioBufferList>(bufferList).memory 
関連する問題