Qt 5 の未来は明るいブログ

Qt から VoiceText Web API(β版) を使う

Published: 2014-08-24 / Last modified: 2014-08-25

Qt 勉強会 #14 @ Tokyo で倒せなかった VoiceText Web API(β版) を Qt/Quick で簡単に使えるようにしてみました。

API利用登録

API キーを取得してください。

ソースコードのダウンロード、コンパイル、インストール

$ git clone git://git.qtquick.me/qmlplugins/qtvoicetextwebapi.git
$ cd qtvoicetextwebapi
$ perl Qtがインストールされている場所/bin/syncqt.pl -version 0.1.0
$ cd ..
$ mkdir build
$ qmake ../qtvoicetextwebapi/
$ (n)make
$ (sudo) make install
$ make sub-examples

Widget サンプル

$ ./examples/widget/widget

Widget::Private::Private(Widget *parent)
    : q(parent)
{
    ui.setupUi(q);
    connect(ui.apiKey, &QLineEdit::textChanged, [&](const QString &text) {
        voiceText.setApiKey(text.toUtf8());
    });
    ui.apiKey->setFocus();
    connect(ui.text, &QLineEdit::textChanged, [&](const QString &text) {
        voiceText.setText(text);
    });
    connect(ui.text, &QLineEdit::returnPressed, &voiceText, &QVoiceTextWebAPI::play);
    ui.text->selectAll();
    connect(ui.speaker, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [&](int index) {
        voiceText.setSpeaker(static_cast<QVoiceTextWebAPI::Speaker>(index));
    });
    connect(ui.emotion, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [&](int index) {
        voiceText.setEmotion(static_cast<QVoiceTextWebAPI::Emotion>(index));
    });

    QButtonGroup *emotionLevel = new QButtonGroup(q);
    emotionLevel->addButton(ui.emotionLevel1);
    emotionLevel->addButton(ui.emotionLevel2);
    connect(emotionLevel, static_cast<void (QButtonGroup::*)(int)>(&QButtonGroup::buttonClicked), [&, emotionLevel]() {
        voiceText.setEmotionLevel(emotionLevel->checkedId() + 1);
    });

    connect(ui.pitch, &QDial::valueChanged, [&](int value) {
        voiceText.setPitch(value);
    });
    connect(ui.speed, &QDial::valueChanged, [&](int value) {
        voiceText.setSpeed(value);
    });
    connect(ui.volume, &QDial::valueChanged, [&](int value) {
        voiceText.setVolume(value);
    });
    connect(ui.play, &QPushButton::clicked, &voiceText, &QVoiceTextWebAPI::play);
}

QtQuick サンプル

$ ./examples/quick/quick

import QtVoiceTextWebAPI 0.1

...

VoiceTextWebAPI {
id: voiceText
apiKey: apiKey.text
text: text.text
speaker: speaker.currentIndex
emotion: emotion.currentIndex
emotionLevel: parseInt(emotionLevel.current.text)
pitch: pitch.value
speed: speed.value
volume: volume.value
}

...

Button {
text: qsTr('Speak')
onClicked: voiceText.play()
}

...

おわりに

フィードバックは @task_jp までお願いします!