LoginSignup
27
17

More than 1 year has passed since last update.

PythonからVOICEVOXを使う

Posted at

VOICEVOX

商用利用可能なAIベースの音声合成ソフトウェア

ボイボと呼びましょう。

APIなのかと思ったら、ダウンロードして.exeを実行すると、ローカルにサーバーが立つみたい。
curlでも利用できるとのことなので、pythonで叩いてみた。
あらかじめ上記リンクから、VOICEVOX本体をダウンロードして実行しておいてください。

実行環境

当方の実行環境は以下

  • CPU: i7 8550u
  • GPU: Nvidia MX150
  • Python = 3.9.5

CPUで実行しました。

ソースコード

合成されるファイルは映像系のサンプルレート(モノラルの24000[Hz])なので注意

voicevox.py
import json
import requests
import wave

def generate_wav(text, speaker=1, filepath='./audio.wav'):
    host = 'localhost'
    port = 50021
    params = (
        ('text', text),
        ('speaker', speaker),
    )
    response1 = requests.post(
        f'http://{host}:{port}/audio_query',
        params=params
    )
    headers = {'Content-Type': 'application/json',}
    response2 = requests.post(
        f'http://{host}:{port}/synthesis',
        headers=headers,
        params=params,
        data=json.dumps(response1.json())
    )

    wf = wave.open(filepath, 'wb')
    wf.setnchannels(1)
    wf.setsampwidth(2)
    wf.setframerate(24000)
    wf.writeframes(response2.content)
    wf.close()

if __name__ == '__main__':
    text = 'こんにちは!'
    generate_wav(text)

感想

上記のPythonからしかためしていないので、GUIからだと解決できる機能があるかもですが、以下が簡単な感想です。

  • 合成にはそこそこ時間がかかるので、リアルタイムでの合成には向いていなさそう(マシンスペックによる?)
  • 英語をアルファベット読みされてしまうことがある(言語指定とかで回避できる?)
  • 音声自体の品質は高い方だと思う
  • 日本語にて、あらかじめ合成しておいて使うような用途であれば、現時点でベストプラクティスかもしれない
  • 音声合成はいつもライセンス周りで困るので、ラピットプロトタイピングできるようになるのはありがたい
  • 他の音声合成でもありがちだが、合成されたファイルは、音声部分のみ再生するとプツっと切れてしまう。 "、"や"。"で無音を置けたり、SSMLでpauseを入れたりできるとよくなりそう。
27
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
17