我想用QAudioRecorder
來記錄用戶的音頻,然後使用音頻輸出文件進行語音到文本。我可以成功運行並錄製此示例中的音頻http://doc.qt.io/qt-5/qtmultimedia-multimedia-audiorecorder-example.html。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)
這可能有助於檢查音頻的水平,但我不知道如何使用它,以及可以使用什麼水平來檢測用戶是否不說話。