AI Tuber作ってみよう、第2回の記録をまとめておきます。
今回はAI要素というより、音声合成のチャプターですね。
10年前くらいにこういう音声合成をやりたいと思っていましたが、その当時は敷居が高かったと思いますが、今だとフリーソフトでサクサク作れるのですね。
感動・・
今回は、有名なソフトVOICEVOXを使っています。
参考書籍
こちらの本で紹介されていることを、やっていく記録です。
今回は第4章にあたる部分です。
合成音声ソフトのインストール
まずは音声合成ソフト、VOICEVOXをパソコンにインストールします。
VOICEVOX | 無料のテキスト読み上げ・歌声合成ソフトウェア (hiroshiba.jp)
このソフトは初めて利用しますが、というか音声合成ソフト自身初めて使いますが、Youtubeなどで聞きなれた声で読み上げてくれます。
次に、Pythonプログラムから音声合成ソフトを呼び出せるか動作確認します。
requestsモジュールを通して、音声合成ソフトのサーバ(ここではローカル、127.0.0.1:50021)に対してPOSTコマンドを投げるプログラムを作成。 ※コードは割愛
実行すると、結果が返ってきました↓ 成功です。
さらに、音声ファイルをテキストにエンコードするプログラムを追加してテスト。できました↓
音声データを作る部分、まったく今まで経験がなかったのですが、このようにPythonプログラムでも実現できるのですね。
音声を再生するためのプログラムを作成(合計3つ)
音声合成ソフトの音声をプログラムから再生するためには、合計3つのプログラムを作ります。
モジュールを分ける感じです。
パソコンのデバイスから音を出すプログラム
こんな感じです↓ 細部割愛
import sounddevice as sd
from typing import TypedDict
class PlaySound:
def __init__(self, output_device_name="CABLE Input") -> None:
# 指定された出力デバイス名に基づいてデバイスIDを取得
output_device_id = self._search_output_device_id(output_device_name)
# 入力デバイスIDは使用しないため、デフォルトの0を設定
input_device_id = 0
# デフォルトのデバイス設定を更新
sd.default.device = [input_device_id, output_device_id]
・・・
音声合成ソフトに文字を渡し喋らせるプログラム
こんな感じです↓ 細部割愛
import json
import requests
import io
import soundfile
class VoicevoxAdapter:
URL = 'http://127.0.0.1:50021/'
# 2回postする。1回目で変換、2回目で音声合成
def __init__(self) -> None:
pass
def __create_audio_query(self, text: str, speaker_id: int) -> json:
item_data = {
'text': text,
'speaker': speaker_id,
}
response = requests.post(self.URL+'audio_query', params=item_data)
return response.json()
・・・
プロンプトから喋らせたい言葉を送り実行するプログラム
これは、上記の2つのプログラムをつなぐプログラムです。
こんな感じ↓
from voicevox_adapter import VoicevoxAdapter
from play_sound import PlaySound
input_str = input("しゃべらせたい言葉を入れてね: ")
Voicevox_adapter = VoicevoxAdapter()
play_sound = PlaySound("スピーカー")
data, rate = Voicevox_adapter.get_voice(input_str)
play_sound.play_sound(data, rate)
実行すると、入力した文字をちゃんと喋ってくれました!
自分の入力した言葉がパソコン音源から発声される・・ これは初めての体験です。
いいぞ、いいぞ、新しい力が湧いてくる!
まとめ
1.音声合成ソフトを使って文字を音声に変換、出力するプログラムを作りました。
今回はAI要素はないですが、音声合成ソフトを初めて使う自分としては新鮮な学びを得られました。
これが、あと10年前くらいに仕えていたら・・今頃はYoutuberになっていたかもしれませんね。
まあ、適当なことを言っていますが。
コメント