![見出し画像](https://assets.st-note.com/production/uploads/images/134314545/rectangle_large_type_2_978744cbf488efacdad25ebbf48d57bc.png?width=1200)
PythonとVOICEVOXを繋げる
どうもアキオです。
最近動画を作りたいなという思いがありまして,
Python上でVOICEVOXを操作するための前準備をしたので,
そのやり方をまとめてみました。
環境
OS: Windows, IDE: VScord
下記の手順で
VOICEVOXをインストール
VOICEVOXのサイトに行き,インストーラでダウンロード
https://voicevox.hiroshiba.jp/
ローカルサーバの確認
ローカルサーバが動いてるか確認するため,Voicevoxを開きながら,下記にアクセスする
http://127.0.0.1:50021/docs
PythonからVOICEVOXにアクセス
ローカルサーバが動いていることを確認したら,Pythonでローカルサーバからデータが引っ張れるか試す。
ローカルサーバとPythonを連携させるライブラリをinstall
pip install requests
加えて
Returnが見やすくするために,richライブラリをinstall
pip install rich
installが済んだら
試しにidを入手してみましょう
# キャラクターの声の種類とidの一覧を表示する
import requests
from rich import print
host = "127.0.0.1"
port = "50021"
def get_speakers():
# キャラクターの一覧を取得する
res = requests.get(f"http://{host}:{port}/speakers")
print(res.json())
if __name__ == "__main__":
get_speakers()
idの入手ができたら,今度はvscord上で発音させてみましょう
vscord上で実際に話させてみる
PCのスピーカーで話すには,sounddeviceが必要なのでinstall
pip install sounddevice
計算を効率化するためにnumpyをinstall
pip install numpy
vscord上でずんだもんに喋らせるコード
# PythonからVOICEVOXを実行する
import requests
import json
import sounddevice as sd
import numpy as np
# from rich import print
host = "127.0.0.1"
port = "50021"
speaker = 3
def post_audio_query(text: str) -> dict:
# 音声合成用のクエリを作成する
params = {"text": text, "speaker": speaker}
res = requests.post(
f"http://{host}:{port}/audio_query",
params=params,
)
query_data = res.json()
# query_data["speedScale"] = 1.5
# print(query_data)
return query_data
def post_synthesis(query_data: dict) -> bytes:
# 音声合成を実行する
params = {"speaker": speaker}
headers = {"content-type": "application/json"}
res = requests.post(
f"http://{host}:{port}/synthesis",
data=json.dumps(query_data),
params=params,
headers=headers,
)
return res.content
def play_wavfile(wav_data: bytes):
# 音声を再生する
sample_rate = 24000 # サンプリングレート
wav_array = np.frombuffer(wav_data, dtype=np.int16) # バイトデータをnumpy配列に変換
sd.play(wav_array, sample_rate, blocking=True) # 音声の再生
def text_to_voice():
# 入力したテキストをVOICEVOXの音声で再生する
while True:
text = input("テキストを入力してください: ")
if text == "q":
exit()
res = post_audio_query(text)
wav = post_synthesis(res)
play_wavfile(wav)
if __name__ == "__main__":
text_to_voice()
これを実行すると,ターミナルが下記みたいな感じになります。
![](https://assets.st-note.com/img/1710739386189-uUi0Jn80qU.png?width=1200)
これを確認できたら
一番下の”テキストを入力してください:”に右に適当な文章を打ってみて,再度実行してください。
そうすると,お手元のPCにずんだもんの声が流れるとおもいます。
ずんだもんの声が流せたところで,今回は終了となります。
お疲れさまでした。
近いうちに続きを出そうと思います。
リソース
【たった10分】アプリにもずんだもんを組み込める!PythonでVOICEVOXを使う方法を解説
☝の動画内で使われたコード
https://github.com/cmqr/voicevox
AITuberを作ってみたら生成AIプログラミングがよくわかった件-阿部-由延-sald_ra/dp/4296070789
この記事が気に入ったらサポートをしてみませんか?