这个示例展示了如何在 Qt 中集成 Vosk 进行中文语音识别。该示例不仅涵盖了录音的设置与保存,还确保录制的音频文件符合 Vosk 的要求格式。通过 Vosk 的中文模型,我们可以对音频内容进行识别,获取准确的中文转写结果。此外,示例中通过 QString::fromUtf8 来正确解析 Vosk 返回的 UTF-8 编码字符串,确保最终显示的中文内容没有乱码。
示例详细概述
前期准备
在开始编写代码之前,确保已下载 Vosk 库和中文语音模型文件,并将其存放在项目路径中,使程序能够正确加载所需的资源。
功能说明
音频录制:通过 Qt 的 QAudioInput 类,我们设置了一个16kHz采样率、单声道、PCM 编码的录音格式,录制的音频将保存为 .wav 文件,这也是 Vosk 模型所要求的标准音频格式。
语音识别:示例中加载了 Vosk 的中文语音模型,录制完成后将音频文件输入到模型中,由 Vosk 提供的识别器对音频内容进行处理,并生成中文转写结果。
中文字符显示:由于 Vosk 返回的识别结果是 UTF-8 编码的字符串,为了确保 Qt 能正确显示中文,使用 QString::fromUtf8 将识别结果解析成 QString 类型。这样可以避免乱码,使最终的中文文本能够正确显示在控制台或界面中。
通过以上几个步骤,整个流程能够将录制的中文音频文件成功转换为文本,并正确显示。
代码示例
#include <QCoreApplication>
#include <QAudioInput>
#include <QFile>
#include <QTimer>
#include <QDebug>
#include <vosk_api.h>
#include <iostream>
// 音频录制类
class AudioRecorder : public QObject {
Q_OBJECT
public:
AudioRecorder(QObject *parent = nullptr) : QObject(parent), audioFile("recorded_audio.wav") {
// 设置音频格式:16kHz、单声道、16位深度
QAudioFormat format;
format.setSampleRate(16000);
format.setChannelCount(1);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSample