2011-12-09 44 views
5

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); 
} 

Trả lời

2

Bạn có thể muốn xem xét việc lưu dữ liệu âm thanh (ví dụ của bạn hiển thị âm thanh con trỏ mẫu và số byte) từ cuộc gọi lại âm thanh đến một hàng đợi khác hoặc FIFO, sau đó có một luồng mạng riêng biệt tạo NSData từ các byte âm thanh và gửi nó.

+0

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

+0

Xem câu trả lời từ hotpaw2 trên http://stackoverflow.com/a/8486682/486845 – simonbs

Các vấn đề liên quan