💜
自分の声をクローンしてみた!Coqui TTSでの簡単音声合成プロジェクト
はじめに
最近話題の「自分の声のクローン」を実際に試してみました!
いわゆる 音声クローン技術 は、AIの力を借りて自分そっくりの声を生成できる技術です。
声を失った人の補助や、コンテンツ制作などにも応用が期待されています。
今回は オープンソースかつ無料 の Coqui TTS を使い、最も手軽に自分の声をクローンする方法を試した記録をまとめます。
使用した技術
-
Coqui TTS
無料で使えるオープンソースの音声合成ライブラリ。多言語対応で日本語もOK。
-
Python
-
Mac (Intel / M1)
-
マイク(一般的なUSBマイクで十分)
GPUがあれば高速ですが、今回のプロジェクトはCPUのみでも動きます。
プロジェクト構成
プロジェクトフォルダの中身はこんな感じです:
bash
コピーする編集する
aki_voice/
├── create_voice.py # 自分の声を録音するスクリプト
├── voice_generator.py # 音声合成を行うスクリプト
├── models/
│ └── aki_voice.pth # 作成した声モデル(実際にはwaveファイルを使う)
├── samples/
│ └── aki_sample.wav # 自分の声サンプル
└── requirements.txt
全体の流れ
- Coqui TTSをインストール
- 自分の声を録音
- 録音した音声を使いモデル生成
- テキストから音声を生成して確認
- 既存のIoTプログラムなどに統合
1. Coqui TTSインストール
以下を実行するだけ。簡単です。
bash
コピーする編集する
pip install coqui-tts
2. 声を録音する
今回使った録音スクリプト(create_voice.py
)はこちらです。
自分の声を10分~30分程度、静かな環境で録音するのがポイントです。
python
コピーする編集する
import sounddevice as sd
from scipy.io.wavfile import write
import numpy as np
import os
# 保存先パス
SAVE_PATH = os.path.join('models', 'samples', 'aki_sample.wav')
# サンプリングレート
SAMPLE_RATE = 44100
if __name__ == '__main__':
duration = input('録音する秒数を入力してください: ')
try:
duration = float(duration)
except ValueError:
print('数字を入力してください')
exit(1)
print('録音開始...')
recording = sd.rec(int(duration * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=1, dtype='int16')
sd.wait()
print('録音終了。保存中...')
write(SAVE_PATH, SAMPLE_RATE, recording)
print(f'保存しました: {SAVE_PATH}')
使い方例:
python create_voice.py
# → 600 と入力すれば10分録音
3. モデル生成 & 音声合成
録音ができたら、Coqui TTSで自分の声を使って音声合成します。
今回使ったのは XTTS v2 という多言語対応モデルです。
以下は voice_generator.py
の例です。
python
コピーする編集する
import os
from TTS.api import TTS
import torch
class AkiVoice:
def __init__(self):
print("音声モデルを初期化中...")
device = "cuda" if torch.cuda.is_available() else "cpu"
self.tts = TTS(
model_name="tts_models/multilingual/multi-dataset/xtts_v2"
).to(device)
self.speaker_wav = "models/samples/aki_sample.wav"
os.makedirs("output", exist_ok=True)
print("初期化完了!")
def speak(self, text, output_filename="output.wav"):
output_path = os.path.join("output", output_filename)
try:
print(f"音声生成中: {text}")
self.tts.tts_to_file(
text=text,
speaker_wav=self.speaker_wav,
language="ja",
file_path=output_path
)
print(f"生成完了: {output_path}")
return output_path
except Exception as e:
print(f"エラー発生: {e}")
return None
def test_voice(self):
test_text = "こんにちは、お母さん。今日も元気ですか?"
output_file = self.speak(test_text, "test_voice.wav")
if output_file:
print(f"テスト音声を生成しました: {output_file}")
os.system(f"afplay {output_file}") # Mac の場合再生
return output_file
if __name__ == "__main__":
voice = AkiVoice()
voice.test_voice()
voice.speak("お薬の時間です", "medicine_time.wav")
voice.speak("今日は良い天気ですね", "good_weather.wav")
実際に試してみた感想
- 10分の録音でも かなり自分の声に近い 音声が生成できた。
- マイク品質は大事。ノイズが多いと精度が下がる。
- CPUのみでも動作可能だが、生成には少し時間がかかる。
- 短いセリフはほぼ問題なし。長文になるとイントネーションが崩れることがある。
- 日本語も自然。ただし発音がちょっとカタカナ英語っぽいところも残る。
まとめ
- Coqui TTS を使うと、自分の声をクローンするのは意外と簡単!
- 商用利用にはライセンスを確認することを推奨。
- 今後は、生成した音声を IoT 機器の会話アプリなどに組み込む予定。
自分の声で「お薬の時間です」と喋らせるのは、なかなか未来感がありました。
興味ある方はぜひ試してみてください!
Discussion