Le bot de lecture de chat utilisé dans Discord est temporairement devenu inutilisable, je l'ai donc créé temporairement. Je l'ai fait en réécrivant une partie du code faisant référence à Créer un bot qui lit le chat de Discord.
J'ai fait la création de bot et la construction d'environnement en regardant ce qui suit.
ffmpeg
place le fichier décompressé dans C: \ open_jtalk \ bin
.
N'oubliez pas le paramètre Path
...
Veuillez réécrire le jeton de chaque bot dans la partie de la ligne du bas, qui est le jeton copié lors de la création du bot.
read_bot.py
import discord
from discord.ext import commands
import asyncio
import os
import subprocess
import ffmpeg
from voice_generator import creat_WAV
client = commands.Bot(command_prefix='.')
voice_client = None
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
@client.command()
async def join(ctx):
print('#Obtenez un canal vocal')
vc = ctx.author.voice.channel
print('#Connectez-vous au canal vocal')
await vc.connect()
@client.command()
async def bye(ctx):
print('#Déconnecter')
await ctx.voice_client.disconnect()
@client.event
async def on_message(message):
msgclient = message.guild.voice_client
if message.content.startswith('.'):
pass
else:
if message.guild.voice_client:
print(message.content)
creat_WAV(message.content)
source = discord.FFmpegPCMAudio("output.wav")
message.guild.voice_client.play(source)
else:
pass
await client.process_commands(message)
client.run("Jeton copié lors de la création du bot")
Il y a divers commentaires dans le chemin du fichier vocal, mais si vous téléchargez le Code source
de Sample Script
dans MMD Agent Vous pouvez le changer en une voix féminine.
(Puisqu'il y a un fichier htsvoice
dans le répertoire Voice / mei
du fichier décompressé, placez le répertoire mei
dans la même hiérarchie que le code source.)
voice_generator.py
import subprocess
import re
# remove_custom_emoji
#L'identifiant du pictogramme n'est pas lu à voix haute
def remove_custom_emoji(text):
pattern = r'<:[a-zA-Z0-9_]+:[0-9]+>' #Motif de pictogramme personnalisé
return re.sub(pattern,'',text) #Processus de remplacement
# urlAbb
#Omis si URL
def urlAbb(text):
pattern = "https?://[\w/:%#\$&\?\(\)~\.=\+\-]+"
return re.sub(pattern,'Mort de l'URL omise!',text) #Processus de remplacement
# creat_WAV
# message.Écrire du contenu dans un fichier texte
def creat_WAV(inputText):
# message.Écrire du contenu dans un fichier texte
inputText = remove_custom_emoji(inputText) #L'identifiant du pictogramme n'est pas lu à voix haute
inputText = urlAbb(inputText) #Omis si URL
input_file = 'input.txt'
with open(input_file,'w',encoding='shift_jis') as file:
file.write(inputText)
command = 'C:/open_jtalk/bin/open_jtalk -x {x} -m {m} -r {r} -ow {ow} {input_file}'
#Chemin du dictionnaire
x = 'C:/open_jtalk/bin/dic'
#Chemin du fichier vocal
m = 'C:/open_jtalk/bin/nitech_jp_atr503_m001.htsvoice'
#m = 'C:/open_jtalk/bin/mei/mei_sad.htsvoice'
#m = 'C:/open_jtalk/bin/mei/mei_angry.htsvoice'
#m = 'C:/open_jtalk/bin/mei/mei_bashful.htsvoice'
#m = 'C:/open_jtalk/bin/mei/mei_happy.htsvoice'
#m = 'C:/open_jtalk/bin/mei/mei_normal.htsvoice'
#Vitesse de parole
r = '1.0'
#Nom et chemin du fichier de sortie
ow = 'output.wav'
args= {'x':x, 'm':m, 'r':r, 'ow':ow, 'input_file':input_file}
cmd= command.format(**args)
print(cmd)
subprocess.run(cmd)
return True
if __name__ == '__main__':
creat_WAV('tester')
La composition est comme ça.
Il y avait une description au point d'inviter le bot, mais il n'a pas été écrit sur la façon de l'utiliser, donc je vais l'écrire de manière appropriée.
Ensuite, le bot se connectera
Tout d'abord, j'entre dans la voix. (Ce bot vient essentiellement à la personne qui a appelé la voix.) La commande à appeler est «.join»
Si vous discutez correctement, il sera lu. Il ne lit pas les pictogrammes ni les pictogrammes personnalisés ... En outre, j'essaye d'omettre l'URL.
La commande pour quitter le bot du canal vocal est .bye
L'invite de commande doit être «Ctrl + C» ou fermer la fenêtre.
Je pense que même l'anglais simple peut être lu dans les alphabets, alors j'aimerais ajouter une fonction d'enregistrement de dictionnaire.
Eh bien, ce sera bientôt fait. peut être
Recommended Posts