Skip to content

Instantly share code, notes, and snippets.

@ytakky2014
Created March 19, 2025 05:08
Show Gist options
  • Save ytakky2014/fc5df7539d0062866a6dcf39915dd347 to your computer and use it in GitHub Desktop.
Save ytakky2014/fc5df7539d0062866a6dcf39915dd347 to your computer and use it in GitHub Desktop.

VOICEVOXとは

  • 商用利用もできるAI音声読み上げツール
  • いわゆるゆっくりボイスだったりVOICEROIDだったりと似たようなもの
    • 実際は自分で設定する必要があるが...
  • エディタ+エンジン+コアからなる
    • 実際にはエディタはElectron + Vue 、エンジン部分は Python + FastAPI 、コアはC++で作られている (コアに関しては多分)
  • 今回は手元でエンジンを動かしてそこに対してgoからリクエストを行ってみる

VOICEVOXの環境準備

  • python3.9.0以上の導入
  • 依存ライブラリの導入 cmake,libtorch,onnxruntime,play
    • すべて brew install hogehoge で導入可能
  • coreの準備
  • engineの準備
    • github上のソースをclone もしくは、zipでDLして適当なディレクトリに配置
  • engineの依存ライブラリを導入
    • python -m pip install -r requirements.txt
  • engineの起動
    • DYLD_LIBRARY_PATH="../core" python run.py --voicevox_dir="../core" --cpu_num_threads=1
    • 以下のディレクトリ構成にしてある。
   voicebox ─┬ core
             └ engine 
curl -s -XPOST -G "http://localhost:50021/audio_query?speaker="1 --data-urlencode text=てすと | curl -s -XPOST "http://localhost:50021/synthesis?speaker="1 -H 'accept: audio/wav' -H 'Content-Type: application/json' -d @- | play -`

APIの確認

  • 音声合成用のクエリを作成する
    • /audio_query
    • spkaerとtextを指定して、音声合成用のクエリを作成する
  • 音声合成
    • /syntesis
    • 他パラメータは/audio_queryで取得できるもの
    • responseでaudio/wavが返却される

Goから実行する

  • 基本的にHttpClientを作れば良い
  • そして、モダンなアプリケーションなのでoapi形式で書かれている
  • swagger.jsonをDLしてきてoapi-codegenで構造体とclientを作る
oapi-codegen -generate "types" -package oapi swagger.json > oapi/type.go
oapi-codegen -generate "client" -package oapi swagger.json > oapi/client.go

今回は、audio_queryとsyntesis(合成)だけ実行すれば良い

goで音声を鳴らす

  • github.com/faiface/beep を利用する
  • 合成された音声はwav形式なので、wavパッケージを利用する
  • wav.Decodeは以下のような関数
    • func Decode(r io.Reader) (s beep.StreamSeekCloser, format beep.Format, err error)
    • API実行のresp.Bodyは io.ReadCloserなのでそのまま利用できる
  • spaker.Initで初期設定をして、Playすれば良い
    • 実際には 、channelを使って実行まで待たないとプログラムが終了して何もならない状態になる
  • こちらが生成された音声

まとめ

  • voicevoxを利用して合成音声の出力に成功した。
    • beepパッケージ面白いよ。
  • あとはmacでループバック再生ができるようになれば一言も喋らずに一週間過ごすことができる。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment