要实现在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秒后自动停止录音,并将录音保存到本地文件中

qt实现录音设备录音5秒并保存本地

原文地址: https://www.cveoy.top/t/topic/ijto 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录