[英]Qt: QAudioInput vs QAudioRecorder
我正在使用 Qt Multimedia 5 來分析來自音頻輸入設備的音頻(FFT、LUFS 和 dBFS 等)。 要獲取音頻數據,有兩個主要選項, QAudioRecorder和QAudioInput 。 他們都可以用PCM讀取音頻數據(QAudioInput使用QBuffer,QAudioRecorder使用QAudioBuffer)和設置格式(例如,采樣率),我應該用什么? 我想知道 QAudioRecorder 和 QAudioInput 之間的區別。
QAudioBuffer
非常方便,您可以使用QAudioProbe
class 在新緩沖區可用時收到通知 - 在 Qt 中 5. QAudioProbe
的是,Mac 操作系統不支持 QAudioProbe。
QAudioProbe
在 Qt 6 中不存在,在 Qt 5 中也不完全支持。
在 Qt 5 和 Qt 6 中以最小延遲訪問“實時”原始音頻數據的唯一方法是制作您自己的QIODevice
並以推送模式從QAudioSource
饋送數據 - 請參閱音頻源示例,特別是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);
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.