2011-12-09 10 views
5

あるiPhoneから別のiPhoneに音声を送信したい。私はTCPを使って2つのiPhone間の接続を確立しました。私はiPhoneで音声を録音し、Audio Queue Servicesを使って再生しました。私は2つのiPhone間でデータを送信することもできました。私はNSDataパッケージを送信してこれを行います。オーディオキューサービスを使用してオーディオに録音されたデータ

私の次のステップは、録音中に他のiPhoneにオーディオデータを送信することです。私はAudioInputCallbackでこれを行うべきだと私は信じています。私のAudioQueueBufferRefinBufferと呼ばれており、inBuffer->mAudioDataをNSDataに変換してからNSDataを他のデバイスに送信し、それを解凍したいと思うようです。

これはこれを行う方法で、私のinBuffer->mAudioDataをNSDataに変換する方法があれば誰にも分かりますか?他のアプローチも歓迎されます。

これは私がデータを「つかむ」や他のiPhoneに送信しなければならないと信じている私のコールバックメソッドです:

void AudioInputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer, const AudioTimeStamp *inStartTime, UInt32 inNumberPacketDescriptions, const AudioStreamPacketDescription *inPacketDescs) 
{ 
    RecordState *recordState = (RecordState *)inUserData; 
    if(!recordState->recording) 
     return; 

    OSStatus status = AudioFileWritePackets(recordState->audioFile, 
              false, 
              inBuffer->mAudioDataByteSize, 
              inPacketDescs, 
              recordState->currentPacket, 
              &inNumberPacketDescriptions, 
              inBuffer->mAudioData); 
    if(status == 0) 
    { 
     recordState->currentPacket += inNumberPacketDescriptions; 
    } 

    AudioQueueEnqueueBuffer(recordState->queue, inBuffer, 0, NULL); 
} 

答えて

2

あなたは、オーディオデータの保存を検討する必要があります(あなたの例は、オーディオを示しサンプルポインタとバイトカウント)をオーディオコールバックから別のキューまたはFIFOに転送し、別のネットワーキングスレッドでオーディオバイトからNSDataを作成して送信します。

+0

ありがとうございます。私はなぜ別のキューを使うべきかわかりません。あなたはそれを詳述できますか?また、データをNSDataに変換するためのサンプルコードを用意することはありませんか? – simonbs

+0

http://stackoverflow.com/a/8486682/486845でhotpaw2からの回答を見る – simonbs

関連する問題