PythonからSofTalkを利用したいのです
環境
- Python 3.8.3
- SofTalk 1.93.46
- Windows10
準備
SofTalkをダウンロードしておきましょう
以下のページから最新バージョンをダウンロードしておいてください
https://w.atwiki.jp/softalk/pages/15.html
コマンドラインからSofTalkを使ってみる
同梱されている help.chm にも記載されていますが、コマンドラインからSoftalkを利用する方法があります
DLしたzipを解凍して
start ..\softalk\Softalk.exe
これでSofTalk本体を起動するとともに、以下の引数が利用可能です
SofTalk引数早見表
ゆっくりボイスでは利用できない(Aquestalk10でのみ利用可能)な引数は除いています
| 種類 | 値 | 効果 | 詳細 | 備考 |
|---|---|---|---|---|
| /NM: | 文字列 | 声指定 | 声を名前で指定 | 例)/NM:女性01 |
| /M: | 0~? | 声を番号で指定 | ||
| /PR: | 文字列 | プリセット指定 | プリセットを名前で指定 | 例)/PR:初期設定 |
| /N: | 0~? | プリセットを番号で指定 | ||
| /O: | 0~300 | 音程 | 声の音程 | 低くすると読む速度が落ちるだけなので、速度との違いがあまりないかも |
| /P: | 読み | 読み追加 | 読み(ひらがな),単語,全/半角を区別(True/False) | 例)/P:てすと,Test,True |
| 登録済みの単語の場合は以前の単語を更新 | ||||
| /Q: | 0~5 | 読み上げ方 | 0:平仮名変換無・抑揚無 | 選択中のライブラリに対して設定 |
| 1:平仮名変換無・抑揚有 | ||||
| 2:平仮名変換有・抑揚無 | ||||
| 3:平仮名変換有・抑揚有 | ||||
| 4:平仮名変換有・抑揚無・空耳有 | ||||
| 5:平仮名変換有・抑揚有・唄詠有 | ||||
| /R: | 録音 | 読み上げた文章の録音 | 例)/R:c:\test.wav | |
| /S: | 1~300 | 速度 | 読み上げの速度 | |
| /T: | 7~11 | ライブラリ指定 | ライブラリ(エンジン)の指定 | 0でゆっくり霊夢、1でゆっくり魔理沙ボイス |
| 7:AquesTalk | ||||
| 8:SAPI | ||||
| 9:Speech Platform | ||||
| 10:AquesTalk2 | ||||
| 11:AquesTalk10 | ||||
| /U: | 0~? | 声指定 | ライブラリ(エンジン)から声を指定 | 選択中のライブラリに対して設定 |
| /V: | 0~100 | 音量 | 声の音量 | |
| /W: | 文章 | 文章 | 読み上げたい文章 | このオプション以降の文字は全て文章とみなす |
| /X: | 0~1 | 画面表示 | 0:表示 1:非表示 | 起動時のみ有効、終了する場合は/close |
| /Z: | パス | XML出力 | 指定可能な声をXML形式で出力 |
/Wの位置にさえ注意すれば特に難しいことはなさそうです
Pythonから実行してみる
毎回コマンドラインから入力するのは面倒です
面倒なことはPythonにやらせましょう
Pythonからコマンドを実行したい時は、subprocessモジュール1を利用します
本記事を書くまで知らなかったのですが、Python3.5以降では subprocess.call() ではなく subprocess.run() を利用すべきだそうです
**サブプロセスを起動するために推奨される方法は、すべての用法を扱える run() 関数を使用することです。**より高度な用法では下層の Popen インターフェースを直接使用することもできます。
run() 関数は Python 3.5 で追加されました; 過去のバージョンとの互換性の維持が必要な場合は、古い高水準 API 節をご覧ください。
コードを書いてみる
yukkuri
├yukkuritest.py
└softalk(解凍フォルダ)
└ SofTalk.exe
こんな感じのディレクトリ構成を想定します
コマンドをスペースごとにリストにしてrun()関数に渡せばOK
…と思っていたのですが、どうやら一度リストを半角スペース入りで結合しなければいけない模様
というわけで、簡単に書くと以下のようになります
import os
import subprocess
os.chdir(os.path.dirname(os.path.abspath(__file__)))
_start = "start SofTalk.exeのPath"
_speed = "/S:120"
_word = "/W:おはようございます"
_command = [_start, _speed, _word]
subprocess.run(' '.join(_command), shell=True)
これでゆっくりボイスをPythonから出力できるようになりました
-
subprocess --- サブプロセス管理
https://docs.python.org/ja/3/library/subprocess.html ↩