我试图理解QT中QAudioInput类的bufferSize()和bytesReady()之间的关系。 假设我有:
m_audioInput = new QAudioInput(m_Inputdevice, m_format, this);
bs = m_audioInput->bufferSize();
br = m_audioInput->bytesReady();
当我查看bs
和br
的值(这些是默认值而我没有更改缓冲区大小)时,我发现bs
比br
大5倍{ {1}}。所以看起来有一个缓冲区可以容纳5个音频输入数据块。我的问题:
这是一个循环缓冲区吗?如果我有这些:
m_input = m_audioInput->start();
connect(m_input, SIGNAL(readyRead()), SLOT(myFunc()));
然后当我执行阅读时:
MainClass::myFunc()
{
qint64 l = m_input->read(m_buffer.data(), br);
.
.
}
readyRead()
之后执行了2次读取,缓冲区指针是否从1个块移动到第2个块(如果它总共有5个块)?非常感谢任何与此相关的帮助和指针。
答案 0 :(得分:0)
我真的不了解你的用例。首先,我想你打电话时
br = m_audioInput->bytesReady();
您位于QAudio::ActiveState
或QAudio::IdleState
。否则br
只是垃圾。
所以看起来有一个缓冲区可容纳5个音频输入数据块。
Sample是音频数据的单位。如果你的意思是5个样本,那么它是不正确的。当涉及到非编码数据时,也没有block
音频这样的东西。
您可以计算缓冲区中音频的秒数(或毫秒):
在Qt:
BuffersizeSeconds = (int)((1.0/m_format->sampleRate())
*(m_audioInput->bufferSize()/m_format->sampleSize())
*(1.0/m_format->channelCount())
);