AudioQueue 以 8 KHz 录制,而不是每 20 毫秒调用一次回调
AudioQueue recording at 8 KHz, not calling Callback every 20 ms
iOS 10+
iPhone: 5 秒 & 6
Xcode: 9+
我正在使用 aLaw 编解码器以 8 KHz 采样率录制音频,样本大小为 8 位 .我像这样创建一个 AudioQueue:
// create the queue
XThrowIfError(AudioQueueNewInput(
&mRecordFormat,
MyInputBufferHandler,
this /* userData */,
NULL /* run loop */,
kCFRunLoopCommonModes /* run loop mode */,
0 /* flags */,
&mQueue), "AudioQueueNewInput failed");
MyInputBufferHandler 是每次填充缓冲区(每 20 毫秒 160 字节)时调用的回调。所以我希望 回调 被调用 每 20 毫秒 。但是当测试它时,每 128 ms , MyInputBufferHandler 回调被突发调用 6 次。虽然我希望每 20 毫秒调用一次回调。
我的录音配置是:
mRecordFormat.mSampleRate = 8000.0; // 8 KHz
mRecordFormat.mChannelsPerFrame = 1;
mRecordFormat.mBytesPerFrame = 1;
mRecordFormat.mBitsPerChannel = 8;
mRecordFormat.mBytesPerPacket = 1;
mRecordFormat.mFramesPerPacket = 1;
有人可以帮帮我吗?为什么 MyInputBufferHandler 每 128 毫秒而不是 20 毫秒调用一次? 8 KHz 的采样率和 160 字节的记录缓冲区,意味着每 20 毫秒调用 MyInputBufferHandler 而不是每 128 毫秒!
似乎 AudioQueue 位于 AudioUnit 之上,无论您在 AudioQueue 级别上设置什么缓冲区大小,都无法以某种方式控制内部缓冲区大小。所以默认情况下,内部缓冲区至少设置为 1024 字节。所以如果你想在160字节的记录数据后回调,它不会。
所以对于那些运行遇到同样问题的人,你需要使用AudioUnit。
类似情况的链接:
iOS 10+ iPhone: 5 秒 & 6 Xcode: 9+
我正在使用 aLaw 编解码器以 8 KHz 采样率录制音频,样本大小为 8 位 .我像这样创建一个 AudioQueue:
// create the queue
XThrowIfError(AudioQueueNewInput(
&mRecordFormat,
MyInputBufferHandler,
this /* userData */,
NULL /* run loop */,
kCFRunLoopCommonModes /* run loop mode */,
0 /* flags */,
&mQueue), "AudioQueueNewInput failed");
MyInputBufferHandler 是每次填充缓冲区(每 20 毫秒 160 字节)时调用的回调。所以我希望 回调 被调用 每 20 毫秒 。但是当测试它时,每 128 ms , MyInputBufferHandler 回调被突发调用 6 次。虽然我希望每 20 毫秒调用一次回调。 我的录音配置是:
mRecordFormat.mSampleRate = 8000.0; // 8 KHz
mRecordFormat.mChannelsPerFrame = 1;
mRecordFormat.mBytesPerFrame = 1;
mRecordFormat.mBitsPerChannel = 8;
mRecordFormat.mBytesPerPacket = 1;
mRecordFormat.mFramesPerPacket = 1;
有人可以帮帮我吗?为什么 MyInputBufferHandler 每 128 毫秒而不是 20 毫秒调用一次? 8 KHz 的采样率和 160 字节的记录缓冲区,意味着每 20 毫秒调用 MyInputBufferHandler 而不是每 128 毫秒!
似乎 AudioQueue 位于 AudioUnit 之上,无论您在 AudioQueue 级别上设置什么缓冲区大小,都无法以某种方式控制内部缓冲区大小。所以默认情况下,内部缓冲区至少设置为 1024 字节。所以如果你想在160字节的记录数据后回调,它不会。
所以对于那些运行遇到同样问题的人,你需要使用AudioUnit。
类似情况的链接: