qt实现录音设备录音5秒并保存本地
要实现在Qt中录音设备录音5秒并保存到本地,可以使用Qt Multimedia模块中的QAudioInput类和QAudioOutput类来完成。
首先,需要在.pro文件中添加multimedia模块的依赖:
QT += multimedia
然后,在Qt的窗口类中,添加以下成员变量和槽函数:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void startRecording();
void stopRecording();
private:
QAudioInput *audioInput;
QIODevice *inputDevice;
QAudioOutput *audioOutput;
QIODevice *outputDevice;
};
在构造函数中,创建QAudioFormat对象来指定录音的音频格式,然后创建QAudioInput对象和QAudioOutput对象:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// 创建音频格式
QAudioFormat format;
format.setSampleRate(44100); // 设置采样率为44100Hz
format.setChannelCount(1); // 设置声道数为1
format.setSampleSize(16); // 设置采样大小为16位
format.setCodec("audio/pcm"); // 设置编码格式为PCM
format.setByteOrder(QAudioFormat::LittleEndian); // 设置字节顺序为LittleEndian
format.setSampleType(QAudioFormat::SignedInt); // 设置采样类型为有符号整数
// 创建音频输入对象
audioInput = new QAudioInput(format, this);
connect(audioInput, &QAudioInput::stateChanged, [this](QAudio::State state){
if (state == QAudio::StoppedState) {
audioInput->deleteLater();
inputDevice->deleteLater();
}
});
// 创建音频输出对象
audioOutput = new QAudioOutput(format, this);
connect(audioOutput, &QAudioOutput::stateChanged, [this](QAudio::State state){
if (state == QAudio::StoppedState) {
audioOutput->deleteLater();
outputDevice->deleteLater();
}
});
}
在startRecording槽函数中,创建QFile对象来指定保存录音的文件路径,然后打开文件并将其设置为音频输入设备的输出设备,开始录音:
void MainWindow::startRecording()
{
// 创建文件对象
QFile file("output.wav");
if (!file.open(QIODevice::WriteOnly)) {
qDebug() << "Failed to open file for writing";
return;
}
// 设置文件为音频输入设备的输出设备
inputDevice = audioInput->start();
inputDevice->open(QIODevice::WriteOnly);
// 设置音频输出设备的输入设备为文件
outputDevice = audioOutput->start();
outputDevice->open(QIODevice::ReadOnly);
// 将音频输出设备的数据写入文件
connect(outputDevice, &QIODevice::readyRead, [this, &file]() {
file.write(outputDevice->readAll());
});
// 录制5秒后停止录音
QTimer::singleShot(5000, this, &MainWindow::stopRecording);
}
在stopRecording槽函数中,停止音频输入和输出设备的录音,并关闭文件:
void MainWindow::stopRecording()
{
// 停止音频输入设备的录音
audioInput->stop();
// 停止音频输出设备的录音
audioOutput->stop();
// 关闭文件
inputDevice->close();
outputDevice->close();
}
最后,在窗口类的构造函数中,连接开始录音的信号和槽函数:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// ...
// 连接开始录音的信号和槽函数
connect(startButton, &QPushButton::clicked, this, &MainWindow::startRecording);
}
这样,当点击开始录音按钮时,就会开始录音,并在5秒后自动停止录音,并将录音保存到本地文件中
原文地址: https://www.cveoy.top/t/topic/ijto 著作权归作者所有。请勿转载和采集!