我正在尝试使用 AudioToolbox 和 CoreFoundation 框架从系统麦克风获取原始音频数据。到目前为止,将数据包写入文件逻辑是有效的,但是当我尝试将原始数据捕获到文件中时,某些值是 0。
static void MyAQInputCallback(void *inUserData, AudioQueueRef inQueue,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp *inStartTime,
UInt32 inNumPackets,
const AudioStreamPacketDescription *inPacketDesc)
{
MyRecorder *recorder = (MyRecorder *)inUserData;
if (inNumPackets > 0)
{
CheckError(AudioFileWritePackets(recorder->recordFile, FALSE, inBuffer->mAudioDataByteSize,
inPacketDesc, recorder->recordPacket, &inNumPackets,
inBuffer->mAudioData), "AudioFileWritePackets failed");
recorder->recordPacket += inNumPackets;
int sampleCount = inBuffer->mAudioDataBytesCapacity / sizeof(AUDIO_DATA_TYPE_FORMAT);
AUDIO_DATA_TYPE_FORMAT* samples = (AUDIO_DATA_TYPE_FORMAT*)inBuffer->mAudioData;
FILE *fp = fopen(filename, "a");
for (int i = 0; i < sampleCount; i++){
fprintf(fp, "%i;\n",samples[i]);
}
fclose(fp);
}
if (recorder->running)
CheckError(AudioQueueEnqueueBuffer(inQueue, inBuffer,
0, NULL), "AudioQueueEnqueueBuffer failed");
}
还有一些属性:
NumberRecordBuffers = 3
缓冲持续时间 = 0.1
格式->mFramesPerPacket = 1024
采样率 = 44100
inNumPackets = 4
1024 个样本中,仅填充了约 400 个。增加缓冲区持续时间会按比例增加有效数量,但总体数据仍然存在差距。写入的音频文件没有这样的错误。任何帮助表示赞赏。预先感谢您。
解决了它使用
recordFormat.mFormatID = kAudioFormatLinearPCM
记录和使用
int sampleCount = inBuffer->mAudioDataByteSize / sizeof(AUDIO_DATA_TYPE_FORMAT)