(この記事は コマンドラインツール/CLI の Advent Calendar 2025 の記事【3つ目】にする予定です)
はじめに
この記事は、以下の記事などで扱った「VOICEVOX」の話です(VOICEVOX に関する記事は、この他にもいくつか書いています)。
●ブラウザの JavaScript で VOICEVOX をシンプルに扱う(HTML + JavaScript での簡単なお試し) - Qiita
https://qiita.com/youtoy/items/9caab75e1ec0565cef60
今回は、VOICEVOX の API を使って音声合成(TTS)で指定可能な話者情報を取得します。その際、情報の必要な部分を抽出したりなどといったことも行います。
実際にやってみる
実際にやってみます。
まず話者情報を取得するだけなら、以下に記載されたエンドポイントに GETリクエストを行うだけです。
●VOICEVOX/voicevox_engine: 無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXの音声合成エンジン
https://github.com/VOICEVOX/voicevox_engine
話者一覧をシンプルに取得する
VOICEVOXデフォルトのポート番号は「50021」なので、ローカルで上記のエンドポイントにアクセスするのは以下のコマンドで行えます。
curl http://localhost:50021/speakers
話者一覧を少し見やすくする
このコマンドの出力だと、文字が詰まって読みにくい表示になるので、ひとまず jqコマンドで見やすくします。
curl http://localhost:50021/speakers | jq
この場合は、以下のように整形された出力を得ることができます。
出力する情報を絞り込む
話者の名前のみ取得する
ここから表示する情報を絞ってみます。まずは、以下のコマンドで名前のみを出力するようにしてみました。
curl http://localhost:50021/speakers | jq '.[].name'
これを実行した結果は、以下のとおりです。
名前のみが列挙された結果を得られました。
話者名と合わせてスタイル・ID も取得
音声合成を API で行う時は、ID の情報が必要です。ID は、同じ話者の場合でもスタイル違いで異なる番号が割り振られています。
そのため、話者・スタイル・ID を出力するようにしてみました。
curl http://localhost:50021/speakers | jq -r '.[] | .name as $speaker | .styles[] | "\($speaker) - \(.name): \(.id)"'
上記のコマンドを実行して得られた結果は、以下の通りです。
話者ごと分かれて情報が表示されました。
出力される情報を並べ替える
今度は、出力される情報を並べ替えてみます。
ID順に並べ変える
以下は、ID順に並べ替える処理を加えたものです。2通りの書き方を示しています。
curl http://localhost:50021/speakers | jq -r '[.[] | .name as $speaker | .styles[] | {speaker: $speaker, style: .name, id: .id}] | sort_by(.id) | .[] | "\(.speaker) - \(.style): \(.id)"'
curl -s http://localhost:50021/speakers | jq -r '[.[] as $s | $s.styles[] | { speaker: $s.name, style: .name, id: .id }] | sort_by(.id)[] | "\(.speaker) - \(.style): \(.id)"'
どちらも、実行すると以下のように、ID 0 から順番に列挙される出力になります。
「特定話者の情報を抽出 + ID順の並べ変え」
最後に、出力する情報を特定話者に限定する、ということをやってみました。
curl -s http://localhost:50021/speakers | jq -r '.[] | select(.name == "ずんだもん") | .name as $speaker | .styles | sort_by(.id)[] | "\($speaker) - \(.name): \(.id)"'
上記を実行すると、以下のように「ずんだもん」関連の内容のみが出力されました。




