😎

オリジナルのスマートスピーカーを作ってみる 2 読み上げツール選定

2024/03/07に公開

この記事は?

この記事は オリジナルのスマートスピーカーを作ってみる シリーズの続き「その2」です。

まずはラズパイでテキスト読み上げを目指す

スピーカー選定

スピーカーはラズパイへUSBで接続が可能な以下のものをポチった。

エレコム パソコン用2.0chスピーカー USBオーディオタイプ
MS-P08USB2BK
https://amzn.asia/d/17HMrr1

テキスト読み上げツール選定

  • 開発環境OS: Windows 11

テキスト読み上げツールとしては VOICEVOX を試してみることにした。
https://voicevox.hiroshiba.jp/

VOICEVOX は OSS です。
機能はモジュール化され開発されており、コア部分のリポジトリは以下です。
https://github.com/VOICEVOX/voicevox_core.git

こちらに C++ による実行サンプルが用意してあるので、動かしてみた。
このサンプルでテキスト読み上げは実行することはできたが、「これはテストです。」を読み上げるまで15秒くらいかかった。
GUI付きのアプリ(ここでダウンロードできる)ではそんなに時間がかかることは無かったので、初期化やデバッグモードのせいかもしれない。

VOICEVOX ENGINE を動かしてみる

今回は API 提供モジュールの VOICEVOX ENGINE (実態はHTTPサーバー) をラズパイで動かせればいいかなと思った。
まずは自分のPCに VOICEVOX ENGINE を設置し、テキスト読み上げができることを目指す。
VOICEVOX ENGINE のリポジトリより、Release の latest のバージョンをダウンロードして、動かしてみた。
ダウンロードしたファイルの中には exe ファイルがあり、起動したらそのまま http サーバーが立ち上がりました。
API 仕様書を参考にリクエストを送信すると、どうやら正常に音声合成が行われていることを確認しました。
一番単純な使い方としては以下のようです。

  1. 音声合成のための初期パラメーターの生成を行う
  2. 生成した初期パラメーターを利用して、音声合成を行う(レスポンスとしては音声ファイルを得る)

以下に http リクエストの例を紹介します。

request_voicevox_engine.http
# 「hoge」というテキストを読み上げるための音声合成用の初期値を要求する
POST http://127.0.0.1:50021/audio_query?text=hoge&speaker=1 HTTP/1.1
content-type: application/json

# 上記のリクエストのレスポンスで得られた初期値を body に貼り付け、
# 音声合成(音声ファイル)を要求する。
# レスポンスは音声ファイルのバイナリっぽいやつが返ってきました。
POST http://127.0.0.1:50021/synthesis?speaker=0 HTTP/1.1
content-type: application/json

{
  "accent_phrases": [
    {
      "moras": [
        {
          "text": "エ",
          "consonant": null,
          "consonant_length": null,
          "vowel": "e",
          "vowel_length": 0.18199871480464935,
          "pitch": 5.566251277923584
        },
        {
          "text": "イ",
          "consonant": null,
          "consonant_length": null,
          "vowel": "i",
          "vowel_length": 0.09319016337394714,
          "pitch": 5.745299816131592
        },
        {
          "text": "チ",
          "consonant": "ch",
          "consonant_length": 0.10182391852140427,
          "vowel": "i",
          "vowel_length": 0.10982885211706161,
          "pitch": 5.9388651847839355
        },
        {
          "text": "オ",
          "consonant": null,
          "consonant_length": null,
          "vowel": "o",
          "vowel_length": 0.11333081871271133,
          "pitch": 6.027430534362793
        },
        {
          "text": "オ",
          "consonant": null,
          "consonant_length": null,
          "vowel": "o",
          "vowel_length": 0.12144484370946884,
          "pitch": 6.081911563873291
        },
        {
          "text": "ジ",
          "consonant": "j",
          "consonant_length": 0.09930344671010971,
          "vowel": "i",
          "vowel_length": 0.13686157763004303,
          "pitch": 6.061718940734863
        },
        {
          "text": "イ",
          "consonant": null,
          "consonant_length": null,
          "vowel": "i",
          "vowel_length": 0.15468530356884003,
          "pitch": 6.037549018859863
        },
        {
          "text": "イ",
          "consonant": null,
          "consonant_length": null,
          "vowel": "i",
          "vowel_length": 0.13772155344486237,
          "pitch": 5.856762886047363
        },
        {
          "text": "イ",
          "consonant": null,
          "consonant_length": null,
          "vowel": "i",
          "vowel_length": 0.18272963166236877,
          "pitch": 5.76452112197876
        }
      ],
      "accent": 9,
      "pause_mora": null,
      "is_interrogative": false
    }
  ],
  "speedScale": 1.0,
  "pitchScale": 0.0,
  "intonationScale": 1.0,
  "volumeScale": 1.0,
  "prePhonemeLength": 0.1,
  "postPhonemeLength": 0.1,
  "outputSamplingRate": 24000,
  "outputStereo": false,
  "kana": "エイチオオジイイイ'"
}

以下の記事に続く
オリジナルのスマートスピーカーを作ってみる 3 音声ファイル合成

Discussion