【问题标题】:Audio recorded using Audio Queue Services to data使用音频队列服务记录到数据的音频
【发布时间】:2012-01-17 01:48:56
【问题描述】:

我想将语音从一部 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);
}

【问题讨论】:

    标签: iphone audio nsdata recording audioqueueservices


    【解决方案1】:

    您可能需要考虑将音频数据(您的示例显示音频样本指针和字节数)从音频回调保存到另一个队列或 FIFO,然后让一个单独的网络线程从音频字节创建 NSData 并发送它.

    【讨论】:

    • 感谢您的回答。我不知道为什么我应该使用另一个队列。你能详细说明一下吗?而且您没有一些将数据转换为 NSData 的示例代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2012-11-05
    • 2013-02-13
    • 2014-05-29
    相关资源
    最近更新 更多