🎤

discordでつくよみちゃんの読み上げbotを作ってみる [Python]

2 min read

法政大学 Advent Calendar 2021 10日目穴埋めのほっとここあです。

discordのボイスチャットに入っているけど夜中で静かにしなきゃいけなく、テキストで通話に参加したいみたいな場面があると思います。
そういう時に使うのがdiscordの読み上げbotなのですが、無料で使えるもののほとんどは人工的な声が多く、発音が若干悪いため何を言ってるか分からないときがあります。

というわけで誰でも無料で使えそうなつくよみちゃんというテキスト読み上げモデルを使って自然に喋る読み上げbotを作成してみようと思います。

簡単に作ってみる

つくよみちゃん(TsukuyomichanTalksoft)をインストールします。
以下の記事の「Bot用のトークンを手に入れる」を参考にdiscordのbotのトークンを取得します。

https://qiita.com/PinappleHunter/items/af4ccdbb04727437477f
ひとまず形だけつくよみちゃんができました。

ローカルで以下のpythonコードを書いて実行します。
app.py
import discord
from discord.channel import VoiceChannel
from discord.player import FFmpegPCMAudio
import pydub
from tsukuyomichan_talksoft import TsukuyomichanTalksoft
tsukuyomichan_talksoft = TsukuyomichanTalksoft(model_version='v.1.2.0')
fs = 24000

TOKEN = '作ったbotのTokenをここに貼ってください'
client = discord.Client()

voiceChannel: VoiceChannel 

@client.event
async def on_ready():
    print('つくよみちゃんがサーバーにログインしました!')

@client.event
async def on_message(message):
    global voiceChannel

    if message.author.bot:
        return
    if message.content == '!tukuyomi':
        voiceChannel = await VoiceChannel.connect(message.author.voice.channel)
        await message.channel.send('つくよみちゃんが参加したよ!')
        return
    elif message.content == '!dtukuyomi':
        voiceChannel.stop()
        await message.channel.send('つくよみちゃんが退出したよ!')
        await voiceChannel.disconnect()
        return

    play_voice(message.content)

def play_voice(text):
    wav = tsukuyomichan_talksoft.generate_voice(text, 0)
    sound = pydub.AudioSegment.from_wav("out.wav")
    sound.export("out.mp3", format="mp3")
    voiceChannel.play(FFmpegPCMAudio("out.mp3"))

client.run(TOKEN)
$ python3 app.py

discordのボイスチャンネルに入って!tukuyomiと打つとdiscordでつくよみちゃんが起動します。適当な文章を書くと可愛い声で読み上げてくれると思います。

ちなみに!dtukuyomiでbotを切断できます。

感想

とてもいい感じだな~と思ったのですが、GPUでないとつくよみちゃんの反応が遅く、タイムアウトしてしまう時があったのでGPUでの使用をおすすめします。他にも Cloud Text-to-Speechのような高性能なものもありますが、お金がかかるため少し悩んでしまうなーという感じもします。

Discussion

ログインするとコメントできます