簡體   English   中英

如何使用QAudioInput從兩個通道捕獲音頻信號

[英]How can I capture audio signal from two channels with QAudioInput

我想使用QAudioInput.Audio捕獲來自音頻設備的聲音。我有一個立體聲(兩個聲道)輸入信號,通常我只調用了setChannelCount()函數,帶有聲道數,在這種情況下為2。我的目標是保存來自文件1中通道1的信號和來自文件2中通道2的信號。我的問題是如何分離兩個信號。

QAudioInput的文檔QAudioInput ,您將需要自己的QIODevice ,其中您將重寫writeData以便將數據展開為2個文件。 我沒有嘗試編譯它,但是它應該給您大致的想法。

class MyIODevice : public QIODevice
{
public:
    MyIODevice(QIODevice* file1, QIODevice* file2)
      : m_file1(file1), m_file2(file2) {}

    qint64 writeData(const char* data, qint64 maxSize)
    {
        // for 32-bits with the channels interleaved.
        // I'm also making an assumption that QAudioInput will call this with
        // a complete frame of data.
        for (int i = 0; i < maxSize / 8; ++i)
        {
            m_file1->writeData(data, 4);
            data += 4;
            m_file2->writeData(data, 4);
            data += 4;
        }
    }
private:
    QIODevice* m_file1;
    QIODevice* m_file2;
};

如所寫,這僅適用於一種音頻格式,但是可以通過將有關格式的一些參數傳遞給構造函數等輕松地變得更通用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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