0

私は 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 を再生したいと思います。

助けてくれてありがとう。

4

1 に答える 1