【发布时间】:2015-03-13 21:43:48
【问题描述】:
我正在尝试在 QT 中实现音高变换器。所以我需要从麦克风获取原始数据,以某种方式对其进行转换并回放。但我不知道如何获取原始数据,将其发送到缓冲区,然后在转换后播放。目前我正在做类似的事情,但这在没有缓冲区的情况下工作,我无法更改将要播放的数据。
QAudioFormat format;
format.setSampleRate(96000);
format.setChannelCount(1);
format.setSampleSize(32);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);
audio = new QAudioInput(format, this);
connect(audio, SIGNAL(stateChanged(QAudio::State)), this, SLOT(handleStateChanged(QAudio::State)));
QIODevice* device = audio->start();
connect(device,SIGNAL(readyRead()),this,SLOT(process()));
QAudioOutput* output = new QAudioOutput(format, this);
output->start(device);
有什么办法可以做我想做的事吗?
【问题讨论】:
-
您是否要实时执行此操作?否则,为什么不直接写入文件,处理文件,然后将其发送到 QAudioOutput?如果您尝试“即时”转换,您可能需要链接 QBuffer 和 QQueue,但会涉及很多转换。因为 QBuffer 和 QQueue 是面向字节的。抓住底层数据指针,并按照我想的那样对句柄进行指针运算。