Qt から VoiceText Web API(β版) を使う
Qt 勉強会 #14 @ Tokyo で倒せなかった VoiceText Web API(β版) を Qt/Quick で簡単に使えるようにしてみました。
API利用登録
API キーを取得してください。
ソースコードのダウンロード、コンパイル、インストール
$ git clone git://git.qt-users.jp/codereview/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 までお願いします!