私は inBuffer->mAudioData をネットワーク経由で NSData に変換しました。これは、Audio Queue Callback を使用して行います。
この NSData を変換して、.caf サウンド ファイルを作成したり、反対側のスピーカーに直接出力したりするにはどうすればよいですか?
手伝ってくれてありがとう。
編集 1: 以下は、wifi ネットワークでデータを送信するために送信者側で使用したコードです。
void AudioInputCallback(void * inUserData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp * inStartTime,
UInt32 inNumberPacketDescriptions,
const AudioStreamPacketDescription * inPacketDescs)
{
RecordState * recordState = (RecordState*)inUserData;
if (!recordState->recording)
{
printf("Not recording, returning\n");
}
// if (inNumberPacketDescriptions == 0 && recordState->dataFormat.mBytesPerPacket != 0)
// {
// inNumberPacketDescriptions = inBuffer->mAudioDataByteSize / recordState->dataFormat.mBytesPerPacket;
// }
printf("Writing buffer %lld\n", recordState->currentPacket);
OSStatus status = AudioFileWritePackets(recordState->audioFile,
false,
inBuffer->mAudioDataByteSize,
inPacketDescs,
recordState->currentPacket,
&inNumberPacketDescriptions,
inBuffer->mAudioData);
NSLog(@"DATA = %@",[NSData dataWithBytes:inBuffer->mAudioData length:inBuffer->mAudioDataByteSize*NUM_BUFFERS]);
[[NSNotificationCenter defaultCenter] postNotificationName:@"Recording" object:[NSData dataWithBytes:inBuffer->mAudioData length:inBuffer->mAudioDataByteSize*NUM_BUFFERS]];
if (status == 0)
{
recordState->currentPacket += inNumberPacketDescriptions;
}
AudioQueueEnqueueBuffer(recordState->queue, inBuffer, 0, NULL);
}
ここでは、inBuffer->mAudioData を NSData にキャストしてから、outputStream に送信しています。
レシーバー側である反対側では、以下のコードを使用しました。
-(void)audioMessageData:(NSData *)audioData fromUser:(NSString *)userName {
NSLog(@"DATA = %@",audioData);
}
データを取得するたびに、上記の関数が呼び出され、送信者の iPhone から送信した NSData を取得します。ここで、受信した audioData を再生したいと思います。
助けてくれてありがとう。