在QT中有没有办法从麦克风获取原始音频数据?

时间:2015-03-13 21:43:49

标签: qt audio real-time

我正试图在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);

有什么办法可以做我想做的事吗?

2 个答案:

答案 0 :(得分:0)

QAudio课值得研究。

我想到的其他选项是QIODeviceQDataStream

This post may get you headed in the right direction.

答案 1 :(得分:0)

我认为您正在寻找的课程是QAudioInputQAudioOutput,它们都是Qt多媒体模块的一部分。

QAudioInput提供从麦克风获取字节流的功能,您可以将其用于任何需要的地方。一旦应用了所需的任何变换,就可以使用QAudioOutput将其推送到扬声器。两者都提供了一些与缓冲区大小,采样频率等相关的不同设置,可以满足您的特定需求。

以下是您可能会发现有用的一些链接:

Qt Audio Overview

QAudioInput documentation

QAudioOutput documentation