Qt QAudioRecorder检测用户不说话并停止

Qt QAudioRecorder检测用户不说话并停止,qt,audio,record,qaudiorecorder,qmediarecorder,Qt,Audio,Record,Qaudiorecorder,Qmediarecorder,我想使用QAudioRecorder录制用户的音频,然后使用音频输出文件将语音转换为文本。我可以成功运行并录制此示例中的音频 但我的问题是,我需要检测用户是否在QAudioRecorder正在积极录制音频时停止讲话。因此,QAudioRecorder应该只在用户不说话时停止 我可以使用QTimer停止QAudioRecorder固定秒,如下所示: void AudioRecorder::toggleRecord() { if (audioRecorder->state() == Q

我想使用
QAudioRecorder
录制用户的音频,然后使用音频输出文件将语音转换为文本。我可以成功运行并录制此示例中的音频

但我的问题是,我需要检测用户是否在
QAudioRecorder
正在积极录制音频时停止讲话。因此,
QAudioRecorder
应该只在用户不说话时停止

我可以使用
QTimer
停止
QAudioRecorder
固定秒,如下所示:

void AudioRecorder::toggleRecord()
{
    if (audioRecorder->state() == QMediaRecorder::StoppedState) {
        audioRecorder->setAudioInput(boxValue(ui->audioDeviceBox).toString());

        QAudioEncoderSettings settings;
        settings.setCodec(boxValue(ui->audioCodecBox).toString());
        settings.setSampleRate(boxValue(ui->sampleRateBox).toInt());
        settings.setBitRate(boxValue(ui->bitrateBox).toInt());
        settings.setChannelCount(boxValue(ui->channelsBox).toInt());
        settings.setQuality(QMultimedia::EncodingQuality(ui->qualitySlider->value()));
        settings.setEncodingMode(ui->constantQualityRadioButton->isChecked() ?
                                 QMultimedia::ConstantQualityEncoding :
                                 QMultimedia::ConstantBitRateEncoding);

        QString container = boxValue(ui->containerBox).toString();

        audioRecorder->setEncodingSettings(settings, QVideoEncoderSettings(), container);
        audioRecorder->record();
        this->recordTimeout();
    }
    else {
        this->stopRecording();
    }
}

void AudioRecorder::recordTimeout()
{
    QTimer* mTimer = new QTimer(this);
    mTimer->setSingleShot(true);
    connect(mTimer, SIGNAL(timeout()), SLOT(stopRecording()));
    mTimer->start(6000);
}

void AudioRecorder::stopRecording()
{
    audioRecorder->stop();
}

但当用户不说话时,它应该停止录音。
QAudioProbe
类有一个信号
audioBufferProbed(QAudioBuffer)
,它可能有助于检查音频的音量,但我不知道如何使用它,以及可以使用什么音量来检测用户是否不说话。

我已经尝试做了一段时间或多或少相同的事情了。这里有一个例子,它向您展示了如何实现一个音频电平表,这应该是有帮助的。该示例使用
QAudioInput
。具体来说,它使用
QAudioInput::start(QIODevice*设备)
并通过自定义
QIODevice
实现音频电平计。使用
QAudioInput
这种方法的问题是,一旦获得数据,就不容易编码并将其写入文件,而使用
QAudioRecorder
则很简单

无论如何。。。如果您想使用
QAudioRecorder
轻松录制,您的右侧
QAudioProbe
是最佳选择。我修改了Qt音频电平表示例,使其能够使用
QAudioProbe
而不是
QAudioInput
/
QIODevice
。见-

液位计需要
QAudioFormat
QAudioRecorder
仅为您提供
QEncoderSettings
(可能需要修复代码才能使用后者。我不知道为什么
QEncoderSettings
QAudioFormat
都需要存在…)。您只需为您使用的设备获取一个
QAudioDeviceInfo
,然后使用
QAudioDeviceInfo::preferredFormat()


相关帖子: