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 までお願いします!