给出一个 采集麦克风的 QAudioBuffer,并将其 获取的音频数据到读到 数据中,然后打印出来; QAudioRecorder已经废弃 ,QAudioInput部分接口如start 也已经废弃
时间: 2024-09-14 19:12:38 浏览: 53
在Qt框架中,如果你想采集麦克风的数据,并读取到数据中进行处理,你可以使用 `QAudioInput` 类来代替已废弃的 `QAudioRecorder` 和其部分接口。以下是使用 `QAudioInput` 类采集音频数据的基本步骤:
1. 创建一个 `QAudioInput` 对象,需要传入音频设备的配置信息,如采样率、采样格式、通道数等。
2. 创建一个 `QAudioBuffer` 对象,它用于接收来自 `QAudioInput` 的音频数据。
3. 使用 `QAudioInput` 的 `start()` 方法开始录音,并将数据填充到 `QAudioBuffer` 中。
4. 从 `QAudioBuffer` 中读取音频数据。
5. 处理完数据后,使用 `QAudioInput` 的 `stop()` 方法停止录音。
下面是一个简化的代码示例,展示了如何实现上述步骤:
```cpp
#include <QAudioInput>
#include <QAudioBuffer>
#include <QVector>
int main() {
// 设置音频输入设备和格式
QAudioFormat format;
format.setSampleRate(44100); // 设置采样率
format.setChannelCount(1); // 单声道
format.setSampleSize(16); // 16位采样
format.setCodec("audio/pcm"); // PCM数据
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);
// 创建QAudioInput对象
QAudioInput audioInput(format);
// 开始录音
audioInput.start();
// 创建QAudioBuffer对象
QAudioBuffer buffer;
// 假设我们将读取1秒的音频数据
int bytesToRead = format.sampleRate() * format.channelCount() * format.sampleSize() / 8;
QVector<qint16> audioData(bytesToRead);
buffer = audioInput.readAll(); // 将音频数据读取到QAudioBuffer中
// 从QAudioBuffer中获取数据指针和大小
const void* bufferData = buffer.constData();
int dataSize = buffer.byteCount();
// 假设数据是16位的PCM,将数据转换为QVector存储
if(format.sampleSize() == 16) {
const QByteArray byteData = QByteArray::fromRawData(static_cast<const char*>(bufferData), dataSize);
const QVector<qint16> samples = QByteArray::fromRawData(byteData).mid(0, dataSize).toShort();
// 打印数据示例
for(int i = 0; i < samples.size(); ++i) {
qDebug() << samples[i];
}
}
// 停止录音
audioInput.stop();
return 0;
}
```
需要注意的是,上述代码仅作为一个基础示例,实际应用中可能需要进行错误处理、调整数据格式等操作,并且需要在Qt的事件循环中运行。
阅读全文