この記事で扱っていること
- 音声合成ソフトでテキストの読み上げを行う方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWで外部のソフトウェアを操作するにはapiを通して行いますが、今回はテキストを読み上げるソフトウェアの操作に対してapiを使用する一例を紹介しています。
ただ、実態としてはapi操作のメイン部分はPythonを使用しています。また、読み上げソフトウェアそのものもPCにインストールする必要があります。
それ、Pythonでよくね?なんて言わずに、LabVIEWで他の機能、処理を実装しながら一緒に使えるのが魅力と考えてください。
Pythonなどの環境さえそろえればLabVIEWでの実装は複雑ではないので、最初の準備の手間だけ乗り越えれば簡単な実装になると思います。
なお、読み上げソフトウェアとしてはVOICEVOXを使用しています。
どんな結果になるか
インタフェースには読み上げたいテキストを入力する部分と、声の種類を選択するための数値制御器、読み上げを開始させるボタンを配置しています。
残念ながら図では使用感を表現することはできませんが、プログラムを実行することでテキストを読み上げてくれます。
プログラムの構造
下準備として、PythonおよびVOICEVOXをインストールします。
Pythonについては、LabVIEWのPython用の関数がサポートしているバージョンを選ぶ必要があり、またLabVIEWのビット数と同じビット数のPythonである必要があります。
各LabVIEWによって対応するPythonのバージョンが異なりますが、ヘルプで確認することができます(例えば以下の図ではLabVIEW 2021の場合ですがPythonは3.6から3.9まで、という記載が見えます)
VOICEVOXについてはダウンロードページからインストーラを入手します。
ダウンロードは以下のページから行えます。
インストーラ実行時には特にこだわりがなければデフォルトの設定で進めていけばいいと思います。
LabVIEWのプログラムは以下に示したような見た目をしています。
私の環境の都合上、Pythonは64 bitのものを使用しているのでLabVIEWも64 bitを使用したためにメニュー画面などの表示は英語になっていますが、プログラム実行時には日本語を入力できるので不自由はありませんでした。
なお、apiを使用する際にはVOICEVOXのソフトが立ち上がっている必要があります。そのため、LabVIEWプログラム側でVOICEVOXのソフトを起動するために、システム実行の関数を使用して
cmd /c start < VOICEVOX.exeのパス>
と指定します。
同様に、プログラム終了時にVOICEVOXを終了させるためには
taskkill /im VOICEVOX.exe
というコマンドをシステム実行の関数で実行しています。
ケースストラクチャの一番最初にある関数は、比較的新しいLabVIEWだと関数パレットに出てくる「データフローを一時停止」というタイミングパレットの関数ですが、要はVOICEVOXのソフトが起動して準備ができるまでの時間稼ぎです。
20000(=20秒)という値を配線していますが、適宜調整してください。
イベントストラクチャの中ではPythonスクリプトを実行しています。
呼び出すPythonスクリプトの一例は以下の通りです。
LabVIEWでPythonスクリプトを呼び出す場合には、「関数」である必要があります。この関数名(今回でいえばautoread)をLabVIEW側で指定します。
もし基本的な使い方がわからないよ、という方はこちらの記事が参考になるかもしれません。
simpleaudioなど、必要なモジュールはあらかじめインストールしておく必要があります。
読み上げの音声の種類を表示する
VOICEVOXの場合、読み上げ時の音声の種類がいくつかありそれを切り替えることができます。
どんな音声が使用できるかはネットで検索すると情報が見つかると思いますので詳しくは割愛しますが、例えばVOICEVOXの中で選べる「ずんだもん」の声の場合
- あまあま:1
- ノーマル:3
- セクシー:5
- ツンツン:7
- ささやき:22
- ヒソヒソ:38
となっています。
数値で指定するのであれば、ヒントラベルを表示させることでプログラム実行時にどの数値がどの声か、といった情報を表示させることができます。
あるいはもっとわかりやすくしたい場合には列挙体とケースストラクチャを使用するのも便利だと思います。
ただし、列挙体で指定する場合には当然、その列挙体に定義した項目しか選択することができなくなります。
本記事ではVOICEVOXを使用してテキストを読み上げさせるプログラムの例を紹介しました。
Pythonを使用しないような組み方もあり得るかもしれないですが、LabVIEW側のプログラムをシンプルな実装にすることを考えると今回の記事で紹介したものはかなり楽な方だと思います。
何かプログラムの操作説明を音声で案内する機能を持たせるのも面白いと思います。
ここまで読んでいただきありがとうございました。
コメント