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 ↩