Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用音频队列服务录制的音频数据_Iphone_Audio_Nsdata_Recording_Audioqueueservices - Fatal编程技术网

Iphone 使用音频队列服务录制的音频数据

Iphone 使用音频队列服务录制的音频数据,iphone,audio,nsdata,recording,audioqueueservices,Iphone,Audio,Nsdata,Recording,Audioqueueservices,我想把声音从一台iPhone传送到另一台。我已经使用TCP在两台iPhone之间建立了连接,并且我已经成功地在iPhone上录制语音,并使用音频队列服务播放语音。我还设法在两部iPhone之间发送数据。我通过发送NSData包来实现这一点 我的下一步是在录制时将音频数据发送到另一部iPhone。我相信我应该在AudioInputCallback中这样做。我的AudioQueueBufferRef名为inBuffer,似乎我想将inBuffer->mAudioData转换为NSData,然后将NS

我想把声音从一台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,然后有一个单独的网络线程从音频字节创建NSATDATA并发送它。我不知道为什么我应该使用另一个队列。你能详细说明一下吗?您没有将数据转换为NSData的示例代码吗?