【发布时间】:2014-03-01 22:06:22
【问题描述】:
我想用 QAudioInput 从我的音频设备捕获声音。我有一个立体声(双声道)输入信号,通常我只需调用函数 setChannelCount() 和我的声道数,在这种情况下 2. 我的目标是将来自通道1的信号保存在文件1中,将来自通道2的信号保存在文件2中。我的问题是如何分离这两个信号。
【问题讨论】:
我想用 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;
};
正如所写,这仅适用于一种音频格式,但可以通过将有关格式的一些参数传递给构造函数等来轻松使其更通用...
【讨论】: