使用Qt的文本转语音模块

前言

最近参与一个项目,已经处于收尾阶段,谁知突然又冒出一个提示音的需求,而产品经理又异想天开,直接读语音(老天,早说啊)。还好Qt有文本转语音模块,使用方法也不复杂。本次记录,笔者在win10下的测试

一、封装一个最简单的文本转语音类

笔者需要说明下,若是使用中文系统,QTextToSpeech默认会设置成支持中文的,而笔者是英文系统,所以需要增加一些设置

class Tool_Speech : public QObject
{
    Q_OBJECT
public:
    explicit Tool_Speech(QObject *parent = nullptr);
    //可以从Qml中调用
    Q_INVOKABLE void speak(const QString text);
signals:

private:

    QTextToSpeech *m_speech = nullptr;
};

 类的头文件很简单,只是留了一个函数,以便在qml中调用

Tool_Speech::Tool_Speech(QObject *parent)
    : QObject{parent}
{
    m_speech = new QTextToSpeech(this);

//需要选择中国
    const QVector locales = m_speech->availableLocales();
//    qDebug()<<"locale"<setLocale(locale);
            break;
        }
    }
//先选择女声吧
    const QVector voices = m_speech->availableVoices();
//    qDebug()<<"voices" <setVoice(voice);
            break;
        }
    }
    qDebug()<locale();
//以下是测试用的,乱敲的
    m_speech->say("高耸,高峻。女(汝)死必于崤之岩崟之下。");
}

void Tool_Speech::speak(const QString text)
{
    m_speech->say(text);
}

 因为笔者是英文系统,且安装了中文包,首先需要选中国,若没安装中文包,可能不会出现中国选择;

笔者测试发现,选择中文包后,只有成年女声,好吧没得先。笔者没有找到修改性别和年龄段的地方,应该是系统中没有吧

以上修改完成后,就可以使用QTextToSpeech::say()来读文本了

注:若遇到不支持的语言,是不会读的,直接跳到下一句

二、其他可供调节的参数

1.QTextToSpeech::pause()

在指定的边界位置暂停,这个位置可以是如下值:

  • QTextToSpeech::BoundaryHint::Default0Uses 引擎的默认值
  • QTextToSpeech::BoundaryHint::Immediate 立即停下
  • QTextToSpeech::BoundaryHint::Word 读完当前的词组再停下
  • QTextToSpeech::BoundaryHint::Sentence 读完当前这句话再停下 

2.QTextToSpeech::resume()

暂停后,可恢复阅读

3.QTextToSpeech::stop()

在指定的边界位置停止阅读,参数同暂停

4.setPitch(double pitch)

调节音高,取值范围为-1.0到1.0

越小声音越低沉,越大声音再尖锐

5.setRate(double rate)

调节阅读速度,取值范围为-1.0到1.0

6.setVolume(double volume)

调节阅读声音大小,取值范围为0.0到1.0

后记

Qt6.4版本还未发布,但文本转语音模块已经回归,笔者在win10下测试了Qt6.4的beta3版本。 引擎又增加了一个(不支持中文),还出现了Qml导入(当前无法使用),期待正式版的发布

PS.Qt6.4版本,示例加载已默认使用CMake了

你可能感兴趣的:(Qt通用,qt,speech)