QT语音系统官方下载、配置与使用
QT语音系统是一款高效的语音识别、处理与合成软件,目前已经得到广泛应用。官方下载与配置非常简单,下面将详细介绍下载、配置与使用步骤。
一、QT语音系统官方下载
QT语音系统官方下载地址为:https://www.qtvoice.com/download.html,打开链接后会有三个版本供选择,分别是Windows、Linux和MacOS。根据自己的电脑系统选择相应版本的下载,点击即可开始下载。
下载完成后会生成一个压缩包,解压后即可得到一个名为“QT_Voice”的文件夹,这个文件夹里包括qt_voice.exe等重要文件以及配置文件。
二、QT语音系统的配置
1、打开QT_Voice文件夹,将qt_voice.exe程序复制到本地文件夹(例如:C:\\Software\\QT_Voice\\qt_voice.exe)。
2、打开windows终端,进入到qt_voice.exe所在目录,输入qt_voice --initconfig,即可开始配置工作。这个过程中要填写一些必要信息,如开发者账号、密码、appid等,配置完成后会得到一个秘钥文件。
3、将得到的秘钥文件放置在同一目录下,重命名为“license.json”。
至此,QT语音系统的配置工作已经完成,下面进入语音识别的应用场景。
三、QT语音系统的使用
1、启动终端,进入到qt_voice.exe所在目录,运行命令qt_voice,即可开启语音识别服务。
2、打开Windows自带的录音机,在录音机中选择麦克风作为输入设备,并录入你所要识别的语音语句。语句录制完成后,存储到本地的WAV格式文件中。
3、使用QT语音系统的识别功能,进行语音识别。示例代码如下:
```c++
#include
#include
#include
#include
#include
#include
#include \"asr_engine.h\"
#define MS_PER_SECOUND 1000
#define BUFFER_SAMPLES (16000/1000*20)
#define SAMPLES_PER_MS 16
#define MAX_RECORD_SIZE (300*1024) /* max record size in samples */
#define RECORD_PERIOD_MS 20
int main(int argc, char *argv[])
{
int err;
int card = -1;
int device = -1;
int rate = 16000;
int channels = 1;
snd_pcm_t *capture_handle;
snd_pcm_hw_params_t *hw_params;
snd_pcm_sw_params_t *sw_params;
char *buffer = NULL;
char *file_buffer = NULL;
unsigned int period = 20;
unsigned int buffer_frames = BUFFER_SAMPLES * channels;
unsigned int period_frames = period * rate * channels / MS_PER_SECOUND;
unsigned int filesize = 0;
snd_pcm_uframes_t frames, available_frames;
unsigned int count = 0;
std::string language = \"zh-cn\";
std::string category = \"general\";
std::string usage = \"recognition\";
if(argc > 2) {
card = atoi(argv[1]);
device = atoi(argv[2]);
}
err = asr_engine_init();
if(0 != err) {
std::cout << \"Init engine error, error code: \" << err << std::endl;
return 0;
}
if(card < 0 || device < 0) // Use default device
err = snd_pcm_open(&capture_handle, \"default\", SND_PCM_STREAM_CAPTURE, 0);
else
err = snd_pcm_open(&capture_handle, \"hw:card=\" + std::to_string(card) + \",device=\" + std::to_string(device), SND_PCM_STREAM_CAPTURE, 0);
if (err < 0) {
std::cout << \"Cannot open audio device \" << snd_strerror(err) << std::endl;
return 0;
}
snd_pcm_hw_params_alloca(&hw_params);
snd_pcm_hw_params_any(capture_handle, hw_params);
err = snd_pcm_hw_params_set_access(capture_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED);
if (err < 0) {
std::cout << \"Can't set interleaved mode \" << snd_strerror(err) << std::endl;
return 0;
}
err = snd_pcm_hw_params_set_format(capture_handle, hw_params, SND_PCM_FORMAT_S16_LE);
if (err < 0) {
std::cout << \"Can't set format \" << snd_strerror(err) << std::endl;
return 0;
}
err = snd_pcm_hw_params_set_channels_near(capture_handle, hw_params, &channels);
if (err < 0) {
std::cout << \"Can't set channels \" << snd_strerror(err) << std::endl;
return 0;
}
err = snd_pcm_hw_params_set_rate_near(capture_handle, hw_params, &rate, 0);
if (err < 0) {
std::cout << \"Can't set rate \" << snd_strerror(err) << std::endl;
return 0;
}
err = snd_pcm_hw_params_set_buffer_size(capture_handle, hw_params, buffer_frames);
if (err < 0) {
std::cout << \"Can't set buffer size \" << snd_strerror(err) << std::endl;
return 0;
}
err = snd_pcm_hw_params(capture_handle, hw_params);
if (err < 0) {
std::cout << \"Can't set hw params \" << snd_strerror(err) << std::endl;
return 0;
}
snd_pcm_sw_params_alloca(&sw_params);
snd_pcm_sw_params_current(capture_handle, sw_params);
err = snd_pcm_sw_params_set_avail_min(capture_handle, sw_params, period_frames);
if (err < 0) {
std::cout << \"Can't set avail min \" << snd_strerror(err) << std::endl;
return 0;
}
err = snd_pcm_sw_params_set_start_threshold(capture_handle, sw_params, buffer_frames - period_frames);
if (err < 0) {
std::cout << \"Can't set start threshold \" << snd_strerror(err) << std::endl;
return 0;
}
err = snd_pcm_sw_params_set_stop_threshold(capture_handle, sw_params, buffer_frames);
if (err < 0) {
std::cout << \"Can't set stop threshold \" << snd_strerror(err) << std::endl;
return 0;
}
err = snd_pcm_sw_params(capture_handle, sw_params);
if (err < 0) {
std::cout << \"Can't set sw params \" << snd_strerror(err) << std::endl;
return 0;
}
buffer = (char*)malloc(buffer_frames * 2);
file_buffer = (char*)malloc(MAX_RECORD_SIZE);
while(1) {
err = snd_pcm_wait(capture_handle, 1000);
if (err < 0)
break;
if(err == 0) {
count = 16384 / rate;
frames = 0;
while(frames < period_frames * count) {
err = snd_pcm_readi(capture_handle, buffer, period_frames);
if (err < 0) {
std::cout << \"read error: \" << snd_strerror(err) << std::endl;
break;
}
memcpy(file_buffer + filesize, buffer, period_frames * 2);
filesize += period_frames * 2;
frames += period_frames;
}
if(filesize > RECORD_PERIOD_MS * rate * channels / SAMPLES_PER_MS) {
std::cout << \"Start speech recognition\" << std::endl;
asr_engine_set_setting(common::SettingType::LANGUAGE, language);
asr_engine_set_setting(common::SettingType::CATEGORY, category);
asr_engine_set_setting(common::SettingType::USAGE, usage);
int text_size = 4096;
char *text = (char*)malloc(text_size);
err = asr_engine_speech_recognize(file_buffer, filesize, text, &text_size, NULL);
if (err == 0) {
std::cout << \"Recognization result: \" << text << std::endl;
} else {
std::cout << \"Recognization error, error code: \" << err << std::endl;
}
free(text);
filesize = 0;
}
}
}
snd_pcm_close(capture_handle);
free(buffer);
free(file_buffer);
return 0;
}
```
以上代码的主要作用是读取录音机的语音文件,调用QT语音系统的识别API进行语音识别,并返回语音识别的结果。其中,asr_engine_init()函数是用来初始化QT语音系统的。
恭喜您,经过以上步骤,您已经可以愉快地使用QT语音系统了!