【问题标题】:How can I capture audio signal from two channels with QAudioInput如何使用 QAudioInput 从两个通道捕获音频信号
【发布时间】:2014-03-01 22:06:22
【问题描述】:

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

【问题讨论】:

    标签: c++ qt audio signals


    【解决方案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;
    };
    

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

    【讨论】:

    • 谢谢,但在保存之前,我想实时处理来自通道 1 的信号 1 和来自通道 2 的信号 2,我真的可以使用相同的音频格式但来自两个通道。所以我打算使用两个缓冲区 1 和 2。我的问题是当我使用 2(setChannelCount(2)) 调用函数 setChannelCount() 时,我不知道如何分离这两个信号。如何设置或分离来自通道 1 的信号和频道 2. QAudioformat 文档对我没有帮助
    • @TheMan 我没有早点看到你的评论,但你现在问的是一个与你原来的帖子不同的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 2011-10-21
    • 2017-07-30
    相关资源
    最近更新 更多