QT中的QAudioInput bufferSize()和bytesReady()之间的关系
relation between QAudioInput bufferSize() and bytesReady() in QT
我正在尝试理解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倍。因此,看起来有一个缓冲区可以容纳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个块移动到第二个块(如果它总共有5个块) - 是否有关于缓冲区指针的文档,以及它是否是循环缓冲区等
- 是否有指向缓冲区的自动读写指针?我需要照顾这些吗,还是它会自动得到照顾
非常感谢与此相关的任何帮助和指示。
我真的不理解您的用例。首先,我想当你打电话给时
br = m_audioInput->bytesReady();
您处于QAudio::ActiveState
或QAudio::IdleState
。否则br
就是垃圾。
因此,看起来有一个缓冲区可以容纳5个音频输入数据块。
样本是音频数据的一个单位。如果你的意思是5个样本,那么这是不正确的。当涉及到非编码数据时,也不存在音频的block
。
你可以计算缓冲区中有多少秒(或毫秒)的音频:
- 缓冲区大小/样本大小给出#个样本
- 1/采样频率以秒为单位提供样本大小
- sample size x#以秒为单位对缓冲区的大小进行采样
- 这是单声道模式(一个声道)。你需要除以频道的数量
在Qt:
BuffersizeSeconds = (int)((1.0/m_format->sampleRate())
*(m_audioInput->bufferSize()/m_format->sampleSize())
*(1.0/m_format->channelCount())
);
相关文章:
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 移动语义和深层/浅层复制之间有什么关系?
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 超市管理系统的类别之间应该是什么关系?
- 指针和程序性能之间有什么关系吗?
- node.h/node.cpp/nodelist.cpp之间的关系
- 运行线程和线程对象之间的关系
- 类型大小与其值范围之间的关系?
- 2个期货之间的依赖关系
- Qt:工作线程和 GUI 事件之间的关系
- 如何强制 qbs 产品与依赖关系之间的同步?
- 在头文件和 .cc 文件之间建立关系
- C 和Windows OS之间的关系
- 为什么赋值运算符和相等运算符之间没有 1:1 的关系?
- QComboBox 在 editTextChanged 和 currentIndexChanged 之间的关系
- 使用 .depends 指定 SUBDIRS 项目之间的依赖关系不起作用
- 各种初始化和构造之间的关系
- 变量之间的关系
- 有符号整数类型的最小值和最大值之间关系的C++标准保证是什么