概要
irodori_tts_api.py は、リモートで稼働している Irodori-TTS Flask API に対してHTTPリクエストを送信し、テキストから音声を合成して保存するためのコマンドラインクライアントツールです。音声合成の他に、サーバーの稼働状態の確認や、サーバー側に登録されている利用可能な音声IDのリスト取得機能を備えています。
動作環境・依存ライブラリ
Python 3
標準ライブラリのみを使用(
argparse、json、os、sys、urllib.error、urllib.request、pathlib)外部の Irodori-TTS Flask API サーバーへのネットワークアクセスが必要
入出力仕様
入力
合成するテキスト文字列(コマンドライン引数
--text)合成するテキストファイル(UTF-8エンコーディング、コマンドライン引数
--text-file)接続先サーバーアドレス(環境変数
IRODORI_TTS_APIまたはコマンドライン引数--server)各種合成パラメータ(
--voice、--caption、--num-steps、--duration-scale、--sway、--sway-coeff、--timeout)
出力
音声合成時:指定したパスへのWAV形式の音声ファイル(コマンドライン引数
--outputで指定)ヘルスチェック実行時:標準出力へのJSON形式のステータス情報
音声リスト取得実行時:標準出力への音声IDの一覧
動作原理
本プログラムは標準ライブラリの urllib.request を使用してREST APIと通信を行います。データ処理ツールとして動作するため、複雑な物理的・数学的計算は伴わず、REST API仕様に従ったJSONの構築とバイナリデータの保存を行います。
パラメータ解析
argparseを用いてコマンドライン引数を解析します。サーバーアドレスのデフォルト値は環境変数IRODORI_TTS_API(設定がない場合はhttp://192.168.27.18:8002)から取得します。情報照会機能
サーバーヘルスチェック(
--health):APIエンドポイント/healthに対してGETリクエストを送信し、レスポンスをJSONとして整形して標準出力に表示し、終了します。音声リスト取得(
--list-voices):APIエンドポイント/v1/audio/voicesに対してGETリクエストを送信し、取得したJSONデータのdataリスト内からidのみを取り出して標準出力に表示し、終了します。
音声合成機能
指定されたテキストデータと各種オプションを元に、JSONペイロードを構築します。
APIエンドポイント
/v1/audio/speechに対して、Content-Type: application/jsonおよびAccept: audio/wavヘッダを付与してPOSTリクエストを送信します。タイムアウト(デフォルト1800秒)内でレスポンスとしてバイナリの音声データ(WAV形式)を受信し、指定されたファイルパスのディレクトリが存在しない場合は作成した上でファイルに保存します。
HTTPエラーやネットワークエラーが発生した場合は、例外を捕捉し標準エラー出力にエラー内容を表示します。
実行例
テキストを直接指定して音声合成を実行する例:
python irodori_tts_api.py --text "こんにちは" --output out.wav
テキストファイルを入力とし、音声IDやキャプション、パラメータを指定して実行する例:
python irodori_tts_api.py --text-file input.txt --output result.wav --voice my_voice --caption "cheerful" --num-steps 20 --duration-scale 1.2
サンプリングスケジュールに関するオプションを指定する例:
python irodori_tts_api.py --text "テスト" --output out.wav --sway --sway-coeff 0.5
サーバーの稼働状態を確認する例:
python irodori_tts_api.py --health
サーバーに登録されている音声のリストを取得する例:
python irodori_tts_api.py --list-voices
環境変数でサーバーアドレスを上書きして実行する例:
IRODORI_TTS_API=http://127.0.0.1:8000 python irodori_tts_api.py --text "テスト" --output test.wav