5
我想從一個iPhone傳輸語音到另一個。我使用TCP建立了兩個iPhone之間的連接,並且我已經設法在iPhone上錄製語音並使用音頻隊列服務播放它。我也設法在兩款iPhone之間發送數據。我通過發送NSData包來做到這一點。使用音頻隊列服務記錄到數據的音頻
我的下一步是在錄音時將音頻數據發送給其他iPhone。我相信我應該在AudioInputCallback
中這樣做。我的AudioQueueBufferRef
被稱爲inBuffer
,似乎我想將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);
}
謝謝你的回答。我不知道爲什麼我應該使用另一個隊列。你能詳細說明一下嗎?你不會碰巧有一些示例代碼將數據轉換爲NSData? – simonbs
在http://stackoverflow.com/a/8486682/486845上查看hotpaw2的答案 – simonbs