文本转语音 | Windows使用SAPI.SpVoice

一、概要

提示:从Qt5.8推出的QTextToSpeech类用于方便将文本转换成语音。
由于我目前使用的版本是Qt5.7.1,所以只能另辟蹊径。使用Windows自带的SAPI.SpVoice,以下是部分核心代码。

二、生成 SAPI.SpVoice 官方接口文档

//需要在联网的情况下,才能生成成功
void TextToSpeech::exportGenerateDocumentation()
{
    // "SAPI.SpVoice" 是 Windows 平台上的一个语音识别和合成引擎的 COM 组件
    QAxObject axObject("SAPI.SpVoice");
    // 生成 SpVoice 官方接口文档
    QString doc = axObject.generateDocumentation();
    // 保存文档
    QFile file("SpVoice.html");
    file.open(QIODevice::WriteOnly);
    file.write(doc.toLocal8Bit());
    file.close();
}

三、初始化

bool TextToSpeech::initSpeech()
{ 
    if(m_binit)
        return true;
    /*
     * 注册表中:计算机\HKEY_CLASSES_ROOT\SAPI.SpVoice\CLSID (96749377-3391-11D2-9EE3-00C04F797396)
     * 设置COM的名称用来初始化COM的模型
    */
    m_binit = m_voice.setControl("96749377-3391-11D2-9EE3-00C04F797396"); //返回是否加载成功
    if(m_binit)
        connect(&m_voice,SIGNAL(signal(QString, int, void*)), this, SLOT(dealeventSlot(QString, int, void*)));

    return m_binit;
} 

四、将Windows平台上已有的声音添加到下拉框以备选择

void Widget::initVoice()
{
    ui->voiceComboBox->addItem("Microsoft HuihuiM",
                               "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech_OneCore\\Voices\\Tokens\\MSTTS_V110_zhCN_HuihuiM");
    ui->voiceComboBox->addItem("Microsoft YaoyaoM",
                               "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech_OneCore\\Voices\\Tokens\\MSTTS_V110_zhCN_YaoyaoM");
    //C:\Windows\Speech_OneCore\Engines\TTS\zh-CN目录下找对应文件,注册表修改一下
    ui->voiceComboBox->addItem("Microsoft KangkangM",
                               "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech_OneCore\\Voices\\Tokens\\MSTTS_V110_zhCN_KangkangM");
}

五、文本转语音朗读函数

bool TextToSpeech::Speak(QString Text, int Volume, int Rate, QString VoiceKey)
{
    if(!m_binit)
        return false;
    setVolume(Volume);
    setRate(Rate);
    SetVoice(VoiceKey);
    //执行第一个参数的方法名,以第二个参数返回是否执行成功
    int result = m_voice.dynamicCall("Speak(QString, SpeechVoiceSpeakFlags)", Text , 1).toInt();
    m_bReading = true;
    return result;
}

六、设置声音、语速和音量

//设置声音
bool TextToSpeech::SetVoice(QString VoiceKey)
{
    QAxObject obj(clsidSpObjectToken);
    if (obj.isNull()) {
        return false;
    }
    obj.dynamicCall("SetId(const QString&)", VoiceKey);
    m_voice.setProperty("Voice", obj.asVariant());
    return true;
}
//设置语音朗读速度-10到10
void TextToSpeech::setRate(int rate)
{ 
    if(!m_binit)
        return;

    m_voice.dynamicCall("SetRate(int)", rate);
} 
//设置语音音量0到100 
void TextToSpeech::setVolume(int value)
{ 
    if(!m_binit)
        return;

    m_voice.dynamicCall("SetVolume(int)", value);
}
如有不足之处,还请各位大佬指正!
  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
sapi.spvoiceWindows操作系统中的一个语音合成技术,它可以通过人工智能算法将文本化为声音,并通过电脑的音频输出设备播放出来。 sapi.spvoice使用非常简单。首先,我们需要通过COM接口获取sapi.SpVoice对象。然后,我们可以调用该对象的相关方法和属性来实现我们想要的功能。 通过sapi.spvoice,我们可以将文本合成为语音。可以使用Speak方法来实现这一功能,例如: ```python import win32com.client # 获取sapi.SpVoice对象 voice = win32com.client.Dispatch("SAPI.SpVoice") # 将文本合成为语音并播放 text = "你好,欢迎使用sapi.spvoice技术" voice.Speak(text) ``` 此外,sapi.spvoice还支持一些其他的功能。我们可以通过设置voice对象的属性来实现特定的效果,例如设置语速和音量: ```python # 设置语速和音量 voice.Rate = 1 # 语速,范围从-10到10,默认为0 voice.Volume = 100 # 音量,范围从0到100,默认为100 # 合成为语音并播放 text = "你好,欢迎使用sapi.spvoice技术" voice.Speak(text) ``` 除了上述的基本功能之外,sapi.spvoice还支持其他一些高级的功能,例如选择不同的音频输出设备、选择不同的语音合成引擎等等。具体的使用方法可以参考相关的文档或者教程。 总的来说,sapi.spvoiceWindows平台上实现文本合成语音的技术之一,通过简单的调用相关的方法和属性,我们可以实现将文本化为声音并播放的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值