我正在使用Qt Multimedia 5来分析音频(快速傅立叶变换、查找表文件和dBFS等)。来自音频输入设备。要获取音频数据,有两个主要选项,QAudioRecorder和QAudioInput。他们都可以读取音频数据与PCM (QAudioInput使用QBuffer和QAudioRecorder使用QAudioBuffer)和设置格式(例如,采样率),我应该使用什么?我想知道QAudioRecorder和QAudioInput之间的区别。
发布于 2021-09-20 14:18:48
QAudioBuffer
非常方便,只要有新的缓冲区可用,就会使用QAudioProbe
类进行通知--在Qt5中。不幸的是,Mac不支持QAudioProbe
。
QAudioProbe
在Qt6中不存在,在Qt5中也不完全支持。
在Qt5和Qt6中访问“实时”原始音频数据的唯一方法是制作自己的QIODevice
,并在推送模式下从QAudioSource
获得数据-请参阅Audio Source example,特别是AudioInfo
class。
具体流程如下:
QAudioSource::start(QIODevice*)
。音频源将向您提供的设备写入原始数据。QAudioBuffer
实例并以信号形式将其发送出去。下面这样的代码将会起作用:
class AudioProbeDevice : public QIODevice
{
Q_OBJECT
QAudioFormat m_format;
public:
AudioProbeDevice (QObject* parent = {}) : QIODevice(parent) {}
void start(QAudioInput *source)
{
Q_ASSERT(source);
m_format = source->format();
open(QIODevice::WriteOnly);
}
qint64 readData(char *, qint64) override { return 0; }
qint64 writeData(const char *data, qint64 count) override
{
QAudioBuffer buffer({data, static_cast<int>(count)}, m_format);
emit audioAvailable(buffer);
return count;
}
Q_SIGNAL void audioAvailable(const QAudioBuffer &buffer);
};
https://stackoverflow.com/questions/69254792
复制相似问题