如何使用QAudioInput捕获来自两个通道的音频信号

How can I capture audio signal from two channels with QAudioInput

本文关键字:两个 通道 信号 音频 QAudioInput 何使用      更新时间:2023-10-16

我想用QAudioInput从我的音频设备捕获声音.我有一个立体声(两个通道)输入信号,通常我只需要调用函数setChannelCount()我的通道数,在本例中为2。 我的目标是将来自通道 1 的信号保存在文件 1 中,将来自通道 2 的信号保存在文件 2 中。 我的问题是如何分离这两个信号。

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

正如所写,这仅适用于一种音频格式,但可以通过将有关格式的一些参数传递给构造函数等来轻松变得更加通用......