Tôi muốn truyền giọng nói từ iPhone này sang iPhone khác. Tôi đã thiết lập kết nối giữa hai iPhone bằng cách sử dụng TCP và tôi đã quản lý để ghi lại giọng nói trên iPhone và chơi nó bằng cách sử dụng Dịch vụ âm thanh xếp hàng. Tôi cũng đã quản lý để gửi dữ liệu giữa hai iPhone. Tôi làm điều này bằng cách gửi các gói NSData.Âm thanh được ghi bằng Dịch vụ âm thanh hàng đợi đến dữ liệu
Bước tiếp theo của tôi là gửi dữ liệu âm thanh đến iPhone khác khi đang được ghi. Tôi tin rằng tôi nên làm điều này trong AudioInputCallback
. My AudioQueueBufferRef
được gọi là inBuffer
và có vẻ như tôi muốn chuyển đổi inBuffer->mAudioData
thành NSData và sau đó gửi NSData đến thiết bị kia và sau đó giải nén nó.
Có ai biết nếu đây là cách để làm điều đó và làm thế nào tôi có thể chuyển đổi inBuffer->mAudioData
thành NSData của tôi? Các cách tiếp cận khác cũng được hoan nghênh.
Đây là phương pháp gọi lại của tôi trong đó tôi tin rằng tôi nên "lấy" dữ liệu và gửi nó vào iPhone khác:
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);
}
Cảm ơn câu trả lời của bạn. Tôi không chắc tại sao tôi nên sử dụng hàng đợi khác. Bạn có thể giải thích điều đó không? Và bạn không có một số mã mẫu để chuyển đổi dữ liệu sang NSData? – simonbs
Xem câu trả lời từ hotpaw2 trên http://stackoverflow.com/a/8486682/486845 – simonbs