乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

音声合成

今回はずんだもんなどのキャラクターの声を
音声合成できるソフトVOICEBOXを
Google Colabで使う方法についてです


解説動画はこちら



VOICEVOXとは

VOICEVOXは無料のテキスト読み上げソフトウェアで
ずんだもんなど、複数のキャラクターが存在する
音声合成ソフトです。

音声合成の精度もなかなかなものです。


インストール方法

下記のコマンドを貼り付けて実行です
!curl -sSfL https://raw.githubusercontent.com/VOICEVOX/voicevox_core/8cf307df4412dc0db0b03c6957b83b032770c31a/scripts/downloads/download.sh | bash -s
cd voicevox_core/
!wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.14.1/voicevox_core-0.14.1+cpu-cp38-abi3-linux_x86_64.whl
!pip install voicevox_core-0.14.1+cpu-cp38-abi3-linux_x86_64.whl
!wget https://raw.githubusercontent.com/VOICEVOX/voicevox_core/406f6c41408836840b9a38489d0f670fb960f412/example/python/run.py



音声合成のコマンド

下記のコマンドで音声合成が行えます
主にテキストとスピーカーIDの部分を
変えるだけです。
dirs = './open_jtalk_dic_utf_8-1.11'
out_path = '../out.wav'
text = 'テキスト'
speaker_id = スピーカーID

!python ./run.py --dict-dir $dirs --text $text --out $out_path --speaker-id $speaker_id
out_pathで指定した場所に音声ファイルが出力されます。


スピーカーID

この指定で使えるIDは次のようになっているようです

キャラクター 口調 キャラクターID
四国めたん ノーマル 2
四国めたん あまあま 0
四国めたん ツンツン 6
四国めたん セクシー 4
四国めたん ささやき 36
四国めたん ヒソヒソ 37
ずんだもん ノーマル 3
ずんだもん あまあま 1
ずんだもん ツンツン 7
ずんだもん セクシー 5
ずんだもん ささやき 22
ずんだもん ヒソヒソ 38
春日部つむぎ ノーマル 8
雨晴はう ノーマル 10
波音リツ ノーマル 9
玄野武宏 ノーマル 11
玄野武宏 喜び 39
玄野武宏 ツンギレ 40
玄野武宏 悲しみ 41
白上虎太郎 ふつう 12
白上虎太郎 わーい 32
白上虎太郎 びくびく 33
白上虎太郎 おこ 34
白上虎太郎 びえーん 35
青山龍星 ノーマル 13
冥鳴ひまり ノーマル 14
九州そら ノーマル 16
九州そら あまあま 15
九州そら ツンツン 18
九州そら セクシー 17
九州そら ささやき 19
もち子さん ノーマル 20
剣崎雌雄 ノーマル 21
WhiteCUL ノーマル 23
WhiteCUL たのしい 24
WhiteCUL かなしい 25
WhiteCUL びえーん 26
後鬼 人間ver. 27
後鬼 ぬいぐるみver. 28
No.7 ノーマル 29
No.7 アナウンス 30
No.7 読み聞かせ 31
ちび式じい ノーマル 42
櫻歌ミコ ノーマル 43
櫻歌ミコ 第二形態 44
櫻歌ミコ ロリ 45
小夜/SAYO ノーマル 46
ナースロボ_タイプT ノーマル 47
ナースロボ_タイプT 楽々 48
ナースロボ_タイプT 恐怖 49
ナースロボ_タイプT 内緒話 50

IDを指定してキャラクターを変更できます。


試しにずんだもんで音声合成すると
こんなコードになります。
dirs = './open_jtalk_dic_utf_8-1.11'
out_path = '../out.wav'
text = 'どうも、ずんだもんです。よろしくね'
speaker_id = 1

!python ./run.py --dict-dir $dirs --text $text --out $out_path --speaker-id $speaker_id
from IPython.display import Audio
Audio('../out.wav', autoplay=True)

出来上がった音声は
動画の方で確認してみて下さいね

VOICEBOX自体は
UI付きのソフトウェアで提供されていますが
大量のテキストを自動で音声化させたりしたい場合は
プログラムを使ってやるのが楽ですねー

そういう用途に使いたい方は
是非参考にしてみて下さい。

それでは。

今回はマイクロソフトの音声合成ソフトである
EdgeTTSを試してみました。

解説動画はこちら



Edge-TTSとは

Microsoftの音声合成ライブラリのことで
TTSとは(Text-to-Speech)の略です。

最新のAI技術が用いられているので
発話の精度が向上していて

無料で使える割に精度は良さそうなので
音声合成試したい方には丁度良いライブラリです。


Google Colabでのインストール方法

次のコマンドを実行するだけです。
!pip install edge-tts


声のリスト一覧を見る
!edge-tts --list-voices




日本語対応のvoice

日本語に対応しているのは
次の2種類の音声があります。

ja-JP-KeitaNeural : 男性の声
ja-JP-NanamiNeural : 女性の声




EdgeTTSの使い方

設定を行い、音声ファイルを作成するだけです。

・設定可能な項目
text : 文章
voice : 声(声優)
rate : 読み上げのスピード( + - でパーセンテージを指定)
name : 出力する音声ファイル名

サンプルコードを実行すると
ファイル置き場に出力されます。

サンプルコードではそのファイルを再生しています。


サンプルコード

英文の読み上げ
import edge_tts

TEXT = "My son is doing very well. I'm very energetic, especially in the morning."
VOICE = "en-GB-SoniaNeural"
OUTPUT_FILE = "test2.mp3"

communicate = edge_tts.Communicate(TEXT, VOICE)
await communicate.save(OUTPUT_FILE)

from IPython.display import Audio
Audio("test2.mp3")

日本語の読み上げ(女性)
import edge_tts

TEXT = """
太くて固い、立派な松茸です。
エリンギが如く、たくましくそそり立っています。
こんなに素晴らしいものは初めてです。
今夜は美味しく頂きます。
""".replace("\n"," ")

VOICE = "ja-JP-NanamiNeural"
RATE = "+20%"
OUTPUT_FILE = "test3.mp3"

communicate = edge_tts.Communicate(TEXT, VOICE,rate=RATE)
await communicate.save(OUTPUT_FILE)

from IPython.display import Audio
Audio(OUTPUT_FILE)


日本語の読み上げ(男性)
import edge_tts

TEXT = """
うわー、すごい綺麗なアワビです。
ねっとりと艶やかで、ほんのり湿っています。
真ん中を触ってみると、クネクネ動きますね。
こいつは大漁だーー。
""".replace("\n"," ")

VOICE = "ja-JP-KeitaNeural"
RATE = "-5%"
OUTPUT_FILE = "test4.mp3"

communicate = edge_tts.Communicate(TEXT, VOICE,rate=RATE)
await communicate.save(OUTPUT_FILE)

from IPython.display import Audio
Audio(OUTPUT_FILE)


まとめ

音声合成の精度も良く
音声ファイルの作成スピードも
かなり速いです。

無料で使える分には
過去一の性能かもしれません。

簡単な文章を音声ファイルにするニーズには
十分に答えられると思います。

昔紹介したWisperと組み合わせたら
文章化と音声化が両方捗ります

色々遊んでみて下さいね
それでは。

今回はpythonで簡単に音声を合成できる
pyopenjtalkを使ってみました

解説動画はこちら


 

今回使用したpyopenjtalkは
日本語の文章を音素表記に
変換してくれる便利ツールです

普通のWindowsPCだと
インストールにコツがいるかもしれません

MacやLinuxは大丈夫っぽいので
Google Colabで実行できるコードを用意しました

colabだと入っていないので
まずはインストールが必要です



インストール方法
こちらのコードでインストールできます
pip install pyopenjtalk



音素表記へ変換

次は日本語のテキストを
音素表記に変換してみましょう

日本語テキストを入力してあげると
簡単に変換できます

import pyopenjtalk

talk_text = 'こんにちは'
voice = pyopenjtalk.g2p(talk_text)
print(voice)
k o N n i ch i w a




音声ファイルに変換する

次は日本語のテキストを
音声にしてみましょう

ファイル化することもできるので
colab上に音声ファイルとして出力します

displayを使うと
colab上で音声を再生することもできます
import pyopenjtalk
import numpy as np
from scipy.io import wavfile

taik_text = "どうもこんにちは 乙ぱいです"
x , sr = pyopenjtalk.tts(taik_text)
wavfile.write("output.wav", sr , x.astype(np.int16))

# 音声ファイルの再生
import IPython.display
IPython.display.Audio("output.wav" , autoplay=True )



ファイル化せず直接喋らせてみる

pyopenjtalkでは音声データとして
周波数と数値配列を生成するようです

displayを使えば
ファイル化しなくても
再生できます
import IPython.display
import pyopenjtalk
from scipy.io import wavfile

taik_text = "どうも、ゆっくり不動産です"
#taik_text = "じょ、女子高生が、す、好きなんだなぁ"
#taik_text = "先にシャワー浴びてこいよ"
#taik_text = "この紋所が目に入らぬか!"
#taik_text = "事件は会議室で起きてるんじゃない 現場で起きてるんだ!"
#taik_text = "室井さん、レインボーブリッジ封鎖できません"
#taik_text = "じっちゃんのなににかけて"

x , sr = pyopenjtalk.tts(taik_text)
IPython.display.Audio(x , rate=sr , autoplay=True)

合成した音声は
動画の方で聞いてみてください

日本語の小説など
大量の文章を音声化したいなら
少しは使えるかも知れませんね

動画作成の自動化なんかも
うまくやれば出来てしまうかもしれません

なかなか面白いツールでした
それでは

今回は最近出来た
AIによる音声合成サービスである
CoefontStudioのご紹介です


解説動画はこちら


さて
こちらは最近出来た音声合成のサービスのようです
coefont.studio


何も登録しなくても30文字までなら
音声を確認する事ができます
スクリーンショット 2021-05-02 17.27.20

せっかくなんで
もっと試したいですよね

Googleアカウントを持っていれば
そのままログインできますんで
YouTubeなんかみてる人は
Gアカウントでログインしましょう


ログインするとこんな感じです
スクリーンショット 2021-05-02 17.29.33

音声合成できるキャラクターは
「アリアル」と「ミリアル」の2種類で
「ミリアル」の方はプロトタイプの明記がありました。

テキストは1ブロック200文字まで入力でき
それ以上はブロックを分けるみたいです。
スクリーンショット 2021-05-02 17.31.51

ブロックごとに読み上げの設定が行えます
声のスピードや声の高さ
読みやアクセントの修正が行えるようです

スクリーンショット 2021-05-02 17.32.23

また、音声データのダウンロードも行えます。

かなり自然に読み上げている部分もあり
最近の音声合成サービスの質の高さには
おどろかされるばかりです。

このサービス自体は無料で利用できますが
合成した音声を利用する場合は
コピーライトを付けてください。

自分の声でフォントを作れるみたいな
明記もあったので
そっちは有料かもしれませんね

なかなか面白くて使えるサービスですので
音声読み上げの際は利用したいですね

今回はこれまでです
それでは。

このページのトップヘ