2014-03-01 78 views
1

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

任何幫助,將不勝感激。謝謝

回答

1

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; 
}; 

書面這隻能與一個音頻格式的工作,但可以很容易地取得通過傳遞有關格式構造一些參數比較一般,等...

+0

感謝,但保存前,我會像處理來自通道1的信號1和來自通道2的信號2實時處理,我真的有一個使用相同的音頻格式,但來自兩個通道。因此,我打算使用兩個緩衝區1和2.我的問題是我不知道如何使用2(setChannelCount(2))調用Ithe函數setChannelCount()時如何分離兩個信號。如何設置或分離來自通道1和通道2的信號。QAudioformat文檔不幫助我 –

+0

@TheMan我沒有看到您的評論更快,但是你現在問的是與原始帖子不同的問題。 – jaket

相關問題