【TTS】音声データから合成音声を作成する

はじめに

生物は進化の過程で不要な器官を退化させてきた歴史があります。
舌が退化してきたのかわかりませんが、最近ろれつが回らなくなってたのが悩みです。
それなら自分以外にしゃべらせよう!ということで、前回に引き続き合成音声シリーズです。

今回行うのは
・音声データの文字起こし
・文字起こししたテキストの再音声化
です。
それではやっていきましょう!

使用技術

・VOICEVOX
・Python3.6.8
SpeechRecognition
・PlaySound

導入方法

WSL上だとマイクやスピーカーを認識してくれないため、今回はwindows上に直接Pythonをダウンロードして行いました。
また、VOICEVOXを起動しておく必要があります。

使用方法

早速ですが、コード全文です。

import speech_recognition as sr
import requests
import random
import json
from playsound import playsound

r = sr.Recognizer()

with sr.AudioFile("sangetsuki.wav") as source:
audio = r.record(source)

text = r.recognize_google(audio, language='ja-JP')

query_url = "http://127.0.0.1:50021/audio_query"
synthesis_url = "http://127.0.0.1:50021/synthesis"

# 音声合成用のクエリを作成
response = requests.post(query_url, params = {'text': text, 'speaker': 14})

# 音声合成
data = json.dumps(response.json())
wav = requests.post(synthesis_url, params = {'speaker': 1}, data=data)

filename = ""
if wav.status_code == 200:
filename = "new-sangetsuki.wav"
with open(filename, "wb") as fp:
fp.write(wav.content)

# 再生
playsound(filename)

上記を実行すると
wavファイルの文字起こし→合成音声の作成→再生まで行ってくれます。

解説

今回のメインとしては、音声データから日本語のテキストデータを取得する部分です。
以下の部分ですね。

text = r.recognize_google(audio, language='ja-JP')

こちらはPythonライブラリのSpeechRecognitionを使用しています。
その中のGoogle Speech Recognition APIを使ってテキストデータを作成しました。
お試しで使用するのであればAPI keyを発行しなくても良いため、気軽に試せるのが利点です。

API keyを使用せず検証用のAPIを叩く場合、以下の点に注意してください。
※以下抜粋
Google 音声認識 API キーはkeyで指定されます。指定しない場合は、そのまま使用できる汎用キーが使用されます。これは、Google によっていつでも取り消される可能性があるため、通常は個人用またはテスト目的のみに使用してください。
https://github.com/Uberi/speech_recognition/blob/master/reference/library-reference.rs

この後は作成されたテキストデータをやり取りして.wavファイルを作成、PlaySoundを使用して再生するといった流れになります。

以下に原本と各音声ファイルの文字起こしを記載します

原本

残月の光をたよりに林中の草地を通って行った時、
果して一匹の猛虎がくさむらの中から躍り出た。
虎は、あわやえんに躍りかかるかと見えたが、
たちまち身をひるがえして、元のくさむらに隠れた。
くさむらの中から人間の声で
「あぶないところだった」
と繰返しつぶやくのが聞えた。その声にえんは聞きおぼえがあった。
きょうくの中にも、彼はとっさに思いあたって、叫んだ。
「その声は、我が友、りちょうしではないか?」
えんはりちょうと同年に進士の第に登り、
友人の少かったりちょうにとっては、最も親しい友であった。
温和なえんの性格が、
しゅんしょうなりちょうの性情と衝突しなかったためであろう。

sangetsuki.wavの文字起こし

三月の光を頼りに 林中の草地を通っていったとき 
果たして一匹の猛虎が草むらの中から 躍り出た
虎は淡いラインに 踊りかかるかと見えたが
たちまち 見を翻して元の草むらに隠れた
草むらの中から人間の声で
危ないところだった
と繰り返し つぶやくのが聞こえたその声には聞き覚えがあった
恐怖の中にも彼は とっさに思い当たって叫んだ
その声は 我がとも 微調子ではないか
縁は李朝 と同年に紳士の第二に 上り
友人の少なかった理長にとっては最も親しい友であった
温和 ナインの性格が
抽象なり長の正常と衝突しなかったためであろう

new-sangetsuki.wavの文字起こし

3月の光を頼りに 林中の草地を通っていったとき 
果たして一匹の猛虎が草むらの中から 躍り出た
ドラはワイラインに躍りかかるかと見えたが
たちまち 御堂 翻して元の草むらに隠れた
草むらの中から人間の声で
危ないところだった
と繰り返し 呟くのが聞こえたその声には聞き覚えがあった
恐怖の中にも彼は とっさに思い当たって叫んだ
その声は 我がともほろ 調子ではないか
縁はリーチをと同年に紳士の第二に 上り
友人の少なかった 次長にとっては最も親しい友であった
おんはナインの性格が
中傷なり長の正常と衝突しなかったためであろう

今回のテキストが山月記ということもありイントネーションや文字起こしには難があったようです。
とは言っても常用外漢字や固有名詞以外では「残月」以外認識できています。

おわりに

前回に引き続き、合成音声について取り上げましたがいかがでしたでしょうか?
本来であればマイク入力→合成音声の変換を行いたかったのですが、自環境でPyAudioがうまく動作せず・・・。
次回までには解決しておきたいところです。

今回はここまでとなります。ご覧頂きありがとうございました。
技術が発達していけば、そのうち喉に変換器を仕込める日が来るかもしれませんね。

クレジット

VOICEVOX:https://voicevox.hiroshiba.jp/
VOICEVOX:ずんだもん
VOICEVOX:春日部つむぎ
VOICEVOX:猫使アル
VOICEVOX:猫使ビィ

前へ

AWS IoT サービスについて

次へ

1dayインターンシップを開催しました!【2024年2月度】