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
クラスにはこの信号がありますが、これはオーディオのレベルを確認するのに役立ちますが、使用方法がわからず、ユーザーが話していない場合にどのレベルを検出できるのかわかりません。