오디오 대기열 서비스를 사용하여 Mac OS X에서 PCM 오디오 데이터를 기록합니다. 작동하지만 콜백에서받는 프레임 수는 다양합니다. 내 오디오 입력 큐의 각 호출에 오디오 큐 입력 콜백의 패킷 번호가 다른 이유는 무엇입니까?
static void MyAQInputCallback(void *inUserData, AudioQueueRef inQueue, AudioQueueBufferRef inBuffer, const AudioTimeStamp *inStartTime, UInt32 inNumPackets, const AudioStreamPacketDescription *inPacketDesc)
나는 오디오 데이터의 5 MS (240 프레임/
inNumPackets
, 48 kHz에서)을 얻을합니다.
이 내가 사용하는 오디오 형식입니다
for (int i = 0; i < 2; ++i) {
AudioQueueBufferRef buffer;
AudioQueueAllocateBuffer(queue, 960, &buffer);
AudioQueueEnqueueBuffer(queue, buffer, 0, NULL);
}
내 문제 :
AudioStreamBasicDescription recordFormat = {0};
memset(&recordFormat, 0, sizeof(recordFormat));
recordFormat.mFormatID = kAudioFormatLinearPCM;
recordFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked;
recordFormat.mBytesPerPacket = 4;
recordFormat.mFramesPerPacket = 1;
recordFormat.mBytesPerFrame = 4;
recordFormat.mChannelsPerFrame = 2;
recordFormat.mBitsPerChannel = 16;
내가 960 바이트의 두 버퍼가 큐에있는 240 프레임마다 204 배 (inNumPackets
) 콜백을 위해 한 번만 192 프레임 만 호출됩니다.
왜 그런 일이 발생하고 240 프레임을 지속적으로 얻을 수 있습니까?