簡體   English   中英

使用音頻隊列服務將數據錄制到數據

[英]Audio recorded using Audio Queue Services to data

我想將語音從一個iPhone傳輸到另一個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);
}

您可能需要考慮將音頻數據(您的示例顯示音頻樣本指針和字節數)從音頻回調保存到另一個隊列或FIFO,然后使用單獨的網絡線程從音頻字節創建NSData並發送它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM