2014-03-01 55 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

相关问题