簡體   English   中英

Qt:QAudioInput 與 QAudioRecorder

[英]Qt: QAudioInput vs QAudioRecorder

我正在使用 Qt Multimedia 5 來分析來自音頻輸入設備的音頻(FFT、LUFS 和 dBFS 等)。 要獲取音頻數據,有兩個主要選項, QAudioRecorderQAudioInput 他們都可以用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

過程如下:

  1. 創建 io 設備的實例。
  2. 將其傳遞給QAudioSource::start(QIODevice*) 音頻源會將原始數據寫入您提供的設備。
  3. 在設備的實現中,您可以直接處理數據,也可以合成一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM