【发布时间】:2016-05-17 06:58:51
【问题描述】:
我想使用QAudioRecorder 录制用户的音频,然后使用音频输出文件将语音转换为文本。我可以成功运行并录制此示例中的音频,http://doc.qt.io/qt-5/qtmultimedia-multimedia-audiorecorder-example.html。
但我的问题是,当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) 这可能有助于检查音频电平,但我不知道如何使用它以及可以使用什么电平来检测用户是否在说话。
【问题讨论】:
标签: qt audio record qaudiorecorder qmediarecorder