答案 0 :(得分:1)
看一下SpeakHere示例。此行提供音频数据:
OSStatus result = AudioFileReadPackets(THIS->GetAudioFileID(), false, &numBytes, inCompleteAQBuffer->mPacketDescriptions, THIS->GetCurrentPacket(), &nPackets,
inCompleteAQBuffer->mAudioData);
因此,您可以使用memcpy复制记录的数据缓冲区,而不是调用AudioFileReadPackets
。或者,替代地,向回放AudioQueue
提供指向音频数据缓冲区的指针。当播放继续时,将mCurrentPacket
指针推进缓冲区。
要记录,你会做一些非常相似的事情。您将写入内存中的缓冲区,而不是写入文件。您首先需要使用malloc
进行分配。然后,您的传入AudioQueue
捕获记录的数据,然后将该数据复制到缓冲区。随着复制的数据越来越多,您可以将录音头前进,或mCurrentPacket
到新的位置。