※2022年1月1日21時追記:まだバグあるので直しながら使ってます
もはや解説してもわかる人は少ないであろうソースコード
Pythonわかる人は読んだらわかる・・・かも・・・
一通りテストしたつもりだけどまだバグあるかも
コードはもっときれいに書いたほうがいいぞ小森ィ!
前提:
discordbotの作り方の知識
VOICEVOXのインストール&VOICEVOXの起動
Python3のインストール(Ubuntuとかだと最初から入ってるかも)
pip3 install discord.py[voice]
pip3 install requests
pip3 install pytchat
コード一番下のtokenのところは自分のdiscordbotのトークンに置き換えてください。
import discord
import json
import requests
import wave
from discord.ext import tasks
import pytchat
from datetime import datetime
class VoicevoxConnect():
async def generate_wav_file(self, text, speaker, filepath):
audio_query = requests.post(f'http://127.0.0.1:50021/audio_query?text={text}&speaker={speaker}')
headers = {'Content-Type': 'application/json',}
synthesis = requests.post(
f'http://127.0.0.1:50021/synthesis?speaker={speaker}',
headers=headers,
data=json.dumps(audio_query.json())
)
wf = wave.open(filepath, 'wb')
wf.setnchannels(1)
wf.setsampwidth(2)
wf.setframerate(24000)
wf.writeframes(synthesis.content)
wf.close()
# guild_id, livechat, filepath, voice_client
livechatdata = []
# guild_id, message_channel
voice_channel_data = []
# guild_id, speaker
guild_speaker = []
voicevoxConnect = None
# チェンジスピーカーフラグ
cs_flag = 0
# ボイスの種類
speakers = [ "0:四国めたん、あまあま"
,"1:ずんだもん、あまあま"
,"2:四国めたん、ノーマル"
,"3:ずんだもん、ノーマル"
,"4:四国めたん、セクシー"
,"5:ずんだもん、セクシー"
,"6:四国めたん、ツンツン"
,"7:ずんだもん、ツンツン"
,"8:春日部つむぎ、ノーマル"
,"9:波音リツ、ノーマル"
]
@tasks.loop(seconds=5)
async def youtube_text_to_speech():
for i in range(len(livechatdata)):
livechat = livechatdata[i][1]
speaker = 0
for j in range(len(guild_speaker)):
if guild_speaker[j][0] == livechatdata[i][0]:
speaker = guild_speaker[j][1]
break
filepath = livechatdata[i][2]
voice_client = livechatdata[i][3]
if livechat.is_alive():
# チャットデータの取得
chatdata = livechat.get()
for c in chatdata.items:
print(f"{c.datetime} {c.author.name} {c.message} {c.amountString}")
await voicevoxConnect.generate_wav_file(c.author.name + "、" + c.message, speaker, filepath)
source = await discord.FFmpegOpusAudio.from_probe(filepath, before_options="-channel_layout mono")
try:
voice_client.play(source)
except Exception as e:
print(datetime.now().strftime("%Y/%m/%d %H:%M:%S - ") + str(e))
else:
livechatdata.pop(i)
return
class MyClient(discord.Client):
@youtube_text_to_speech.before_loop
async def before_youtube_text_to_speech():
print('waiting...')
await client.wait_until_ready()
async def on_ready(self):
global voicevoxConnect
print(f'{self.user}がログインしました。')
voicevoxConnect = VoicevoxConnect()
async def on_message(self, message):
global voicevoxConnect
global livechatdata
global voice_channel_data
global cs_flag
if message.author.bot:
return
if message.content == 'つむぎちゃんおいで':
if message.author.voice is None:
await message.channel.send('ボイスチャンネルに入ってから呼んでね!')
else:
if message.guild.voice_client is None:
await message.author.voice.channel.connect()
voice_channel_data.append([message.guild.id, message.channel])
guild_speaker.append([message.guild.id, 8])
await message.channel.send("はーい、ボイスチャンネル入るね")
else:
await message.channel.send("もうボイスチャンネルに入ってるよ?")
return
if message.content == 'つむぎちゃんばいばい':
if message.guild.voice_client is None:
await message.channel.send("ボイスチャンネル入ってないよ?")
return
else:
for i in range(len(voice_channel_data)):
if voice_channel_data[i][0] == message.guild.id:
voice_channel_data.pop(i)
await message.guild.voice_client.disconnect()
await message.channel.send("ボイスチャンネル抜けるねー!")
return
return
if cs_flag == 1:
if len(message.content) == 1:
if message.content.isdecimal():
speaker = int(message.content)
for i in range(len(guild_speaker)):
if guild_speaker[i][0] == message.guild.id:
guild_speaker[i][1] = speaker
await message.channel.send("ボイスを「" + speakers[speaker] + "」に変えたよ")
cs_flag = 0
return
await message.channel.send("ボイスチャットに入っていないからボイスは変えられないよ")
return
else:
await message.channel.send("1桁の数字で入力してね")
return
else:
await message.channel.send("1桁の数字で入力してね")
return
# チェンジスピーカー、ボイスを変更したい時
if message.content == 'cs':
for i in range(len(guild_speaker)):
if guild_speaker[i][0] == message.guild.id:
if cs_flag == 0:
cs_flag = 1
await message.channel.send(
speakers[0] + "\n"
+ speakers[1] + "\n"
+ speakers[2] + "\n"
+ speakers[3] + "\n"
+ speakers[4] + "\n"
+ speakers[5] + "\n"
+ speakers[6] + "\n"
+ speakers[7] + "\n"
+ speakers[8] + "\n"
+ speakers[9] + "\n"
+ "どれにするか数字で選んでね"
)
return
await message.channel.send("ボイスチャットに入っていないからボイスは変えられないよ")
return
# YouTube読み上げ開始
if message.content.startswith("https://www.youtube.com/watch?v="):
message.content = message.content.replace('https://www.youtube.com/watch?v=', '')
if len(message.content) != 11:
await message.channel.send("YouTubeのリンクがおかしいです")
return
else:
guild_id = message.guild.id
livechat = pytchat.create(video_id = message.content)
filepath = message.content + '.wav'
voice_client = message.guild.voice_client
livechatdata.append([guild_id, livechat, filepath, voice_client])
await message.channel.send("YouTube読み上げを開始します")
return
# YouTube読み上げ停止
if message.content == 'すとっぷ' or message.content == 'ストップ' or message.content == 'stop':
for i in range(len(livechatdata)):
if livechatdata[i][0] == message.guild.id:
await message.channel.send("YouTube読み上げを停止します")
livechatdata.pop(i)
return
await message.channel.send("YouTube読み上げは現在行われていません")
return
# YouTube読み上げ中はdiscordのチャットに反応しない
for i in range(len(livechatdata)):
if livechatdata[i][0] == message.guild.id:
return
# ボイスチャットに入っていない場合はdiscordのチャットに反応しない
if message.guild.voice_client is None:
return
else:
# ボイスチャットに入っている場合はdiscordのチャットに反応する
for i in range(len(voice_channel_data)):
if voice_channel_data[i][0] == message.guild.id:
if voice_channel_data[i][1] == message.channel:
for i in range(len(guild_speaker)):
if guild_speaker[i][0] == message.guild.id:
speaker = guild_speaker[i][1]
filepath = str(message.guild.id) + '.wav'
if (message.guild.voice_client.is_playing()):
return
await voicevoxConnect.generate_wav_file(message.content, speaker, filepath)
source = await discord.FFmpegOpusAudio.from_probe(filepath, before_options="-channel_layout mono")
try:
message.guild.voice_client.play(source)
except Exception as e:
print(datetime.now().strftime("%Y/%m/%d %H:%M:%S - ") + str(e))
return
client = MyClient()
youtube_text_to_speech.start()
client.run('token')
BOTの使い方説明!
自分がボイスチャンネルに入って「つむぎちゃんおいで」と打つと
ボイスチャンネルに入ってきます。
「つむぎちゃんばいばい」って言うと出ていきます。
つむぎちゃんがボイスチャンネルに入っている状態でつむぎちゃんを呼ぶのに使ったテキストチャンネルで発言するとそのテキストを読み上げてくれます。
「cs」って打つとボイスが変更できます。今のところ10種類くらいから選べるみたいです。
テキストチャンネルに配信中のYouTubeのリンクを貼るとそのコメント欄を読み上げてくれるようになります。
例:https://www.youtube.com/watch?v=WCDTV3JggZE
「すとっぷ」「ストップ」「stop」のどれかを打つとYouTubeの読み上げを停止します。YouTubeのコメント読み上げ中はdiscordのチャットを読み上げてくれなくなります。
配信に使う時とかの注意:
概要欄にクレジット表記が必要です。
四国めたん・ずんだもんの音声ライブラリを用いて生成した音声は、 「VOICEVOX:四国めたん」「VOICEVOX:ずんだもん」とそれぞれクレジットを記載すれば、商用・非商用で利用可能です。
春日部つむぎの音声ライブラリを用いて生成した音声は、 「VOICEVOX:春日部つむぎ」とクレジットを記載すれば、商用・非商用で利用可能です。
波音リツの音声ライブラリを用いて生成した音声は、 「VOICEVOX:波音リツ」とクレジットを記載すれば、商用・非商用で利用可能です。
こんなもんかな?・・・
気がついたことがあったらあとで追記するかも。
初めまして!
すみません!!
こちらを試してみたのですが、起動まではできたのですが
喋ってくれないです。
ご教授お願い致します。
import discord
import json
import requests
import asyncio
import wave
from discord.ext import tasks
import pytchat
from datetime import datetime
# client = discord.Client(intents=discord.Intents.all())
class VoicevoxConnect():
async def generate_wav_file(self, text, speaker, filepath):
audio_query = requests.post(f’http://127.0.0.1:50021/audio_query?text={text}&speaker={speaker}’)
headers = {‘Content-Type’: ‘application/json’,}
synthesis = requests.post(
f’http://127.0.0.1:50021/synthesis?speaker={speaker}’,
headers=headers,
data=json.dumps(audio_query.json())
)
wf = wave.open(filepath, ‘wb’)
wf.setnchannels(1)
wf.setsampwidth(2)
wf.setframerate(24000)
wf.writeframes(synthesis.content)
wf.close()
# guild_id, livechat, filepath, voice_client
livechatdata = []
# guild_id, message_channel
voice_channel_data = []
# guild_id, speaker
guild_speaker = []
voicevoxConnect = None
# チェンジスピーカーフラグ
cs_flag = 0
# ボイスの種類
speakers = [ “0:四国めたん、あまあま”
,”1:ずんだもん、あまあま”
,”2:四国めたん、ノーマル”
,”3:ずんだもん、ノーマル”
,”4:四国めたん、セクシー”
,”5:ずんだもん、セクシー”
,”6:四国めたん、ツンツン”
,”7:ずんだもん、ツンツン”
,”8:春日部つむぎ、ノーマル”
,”9:波音リツ、ノーマル”
]
@tasks.loop(seconds=5)
async def youtube_text_to_speech():
for i in range(len(livechatdata)):
livechat = livechatdata[i][1]
speaker = 0
for j in range(len(guild_speaker)):
if guild_speaker[j][0] == livechatdata[i][0]:
speaker = guild_speaker[j][1]
break
filepath = livechatdata[i][2]
voice_client = livechatdata[i][3]
if livechat.is_alive():
# チャットデータの取得
chatdata = livechat.get()
for c in chatdata.items:
print(f”{c.datetime} {c.author.name} {c.message} {c.amountString}”)
await voicevoxConnect.generate_wav_file(c.author.name + “、” + c.message, speaker, filepath)
source = await discord.FFmpegOpusAudio.from_probe(filepath, before_options=”-channel_layout mono”)
try:
voice_client.play(source)
except Exception as e:
print(datetime.now().strftime(“%Y/%m/%d %H:%M:%S – “) + str(e))
else:
livechatdata.pop(i)
return
class MyClient(discord.Client):
@youtube_text_to_speech.before_loop
async def before_youtube_text_to_speech():
print(‘waiting…’)
await client.wait_until_ready()
async def on_ready(self):
global voicevoxConnect
print(f'{self.user}がログインしました。’)
voicevoxConnect = VoicevoxConnect()
async def on_message(self, message):
global voicevoxConnect
global livechatdata
global voice_channel_data
global cs_flag
if message.author.bot:
return
if message.content == ‘つむぎちゃんおいで’:
if message.author.voice is None:
await message.channel.send(‘ボイスチャンネルに入ってから呼んでね!’)
else:
if message.guild.voice_client is None:
await message.author.voice.channel.connect()
voice_channel_data.append([message.guild.id, message.channel])
guild_speaker.append([message.guild.id, 8])
await message.channel.send(“はーい、ボイスチャンネル入るね”)
else:
await message.channel.send(“もうボイスチャンネルに入ってるよ?”)
return
if message.content == ‘つむぎちゃんばいばい’:
if message.guild.voice_client is None:
await message.channel.send(“ボイスチャンネル入ってないよ?”)
return
else:
for i in range(len(voice_channel_data)):
if voice_channel_data[i][0] == message.guild.id:
voice_channel_data.pop(i)
await message.guild.voice_client.disconnect()
await message.channel.send(“ボイスチャンネル抜けるねー!”)
return
return
if cs_flag == 1:
if len(message.content) == 1:
if message.content.isdecimal():
speaker = int(message.content)
for i in range(len(guild_speaker)):
if guild_speaker[i][0] == message.guild.id:
guild_speaker[i][1] = speaker
await message.channel.send(“ボイスを「” + speakers[speaker] + “」に変えたよ”)
cs_flag = 0
return
await message.channel.send(“ボイスチャットに入っていないからボイスは変えられないよ”)
return
else:
await message.channel.send(“1桁の数字で入力してね”)
return
else:
await message.channel.send(“1桁の数字で入力してね”)
return
# チェンジスピーカー、ボイスを変更したい時
if message.content == ‘cs’:
for i in range(len(guild_speaker)):
if guild_speaker[i][0] == message.guild.id:
if cs_flag == 0:
cs_flag = 1
await message.channel.send(
speakers[0] + “\n”
+ speakers[1] + “\n”
+ speakers[2] + “\n”
+ speakers[3] + “\n”
+ speakers[4] + “\n”
+ speakers[5] + “\n”
+ speakers[6] + “\n”
+ speakers[7] + “\n”
+ speakers[8] + “\n”
+ speakers[9] + “\n”
+ “どれにするか数字で選んでね”
)
return
await message.channel.send(“ボイスチャットに入っていないからボイスは変えられないよ”)
return
# YouTube読み上げ開始
if message.content.startswith(“https://www.youtube.com/watch?v=”):
message.content = message.content.replace(‘https://www.youtube.com/watch?v=’, ”)
if len(message.content) != 11:
await message.channel.send(“YouTubeのリンクがおかしいです”)
return
else:
guild_id = message.guild.id
livechat = pytchat.create(video_id = message.content)
filepath = message.content + ‘.wav’
voice_client = message.guild.voice_client
livechatdata.append([guild_id, livechat, filepath, voice_client])
await message.channel.send(“YouTube読み上げを開始します”)
return
# YouTube読み上げ停止
if message.content == ‘すとっぷ’ or message.content == ‘ストップ’ or message.content == ‘stop’:
for i in range(len(livechatdata)):
if livechatdata[i][0] == message.guild.id:
await message.channel.send(“YouTube読み上げを停止します”)
livechatdata.pop(i)
return
await message.channel.send(“YouTube読み上げは現在行われていません”)
return
# YouTube読み上げ中はdiscordのチャットに反応しない
for i in range(len(livechatdata)):
if livechatdata[i][0] == message.guild.id:
return
# ボイスチャットに入っていない場合はdiscordのチャットに反応しない
if message.guild.voice_client is None:
return
else:
# ボイスチャットに入っている場合はdiscordのチャットに反応する
for i in range(len(voice_channel_data)):
if voice_channel_data[i][0] == message.guild.id:
if voice_channel_data[i][1] == message.channel:
for i in range(len(guild_speaker)):
if guild_speaker[i][0] == message.guild.id:
speaker = guild_speaker[i][1]
filepath = str(message.guild.id) + ‘.wav’
if (message.guild.voice_client.is_playing()):
return
await voicevoxConnect.generate_wav_file(message.content, speaker, filepath)
source = await discord.FFmpegOpusAudio.from_probe(filepath, before_options=”-channel_layout mono”)
try:
message.guild.voice_client.play(source)
except Exception as e:
print(datetime.now().strftime(“%Y/%m/%d %H:%M:%S – “) + str(e))
return
client = MyClient(intents=discord.Intents.all())
@client.event
async def on_ready():
youtube_text_to_speech.start()
client.run(‘トークン’)
エラーはこちらです
Traceback (most recent call last):
File “C:\Users\hopef\PycharmProjects\discordbot\venv\lib\site-packages\discord\client.py”, line 441, in _run_event
もしかしてWindowsで実行しようとしました?
ご返信ありがとうございます。
pycharmっていうツールとvpsサーバーで実行したところ同じエラーでした。
詳細なエラーメッセージがないとわからないですが
discord.py[voice]とVoiceVoxはインストール済みで動かない感じですか?
pycharmはIDEなのでエラーとは関係無いかもです
すみません!まだVoiceVoxはインストールしてなかったです!
vpsでのインストール方法などはわかりますでしょうか。
windowsでのインストール方法は出てくるのですが。。。
VoiceVoxの公式サイトからLinux用のshファイルをダウンロードしてください
必要となるものをインストールする
sudo apt install curl p7zip fuse libfuse2
VoiceVoxをインストールする
bash VOICEVOX.Installer.0.14.7.Linux.sh
VoiceVoxを起動する
~/.voicevox/VOICEVOX.AppImage
試していないですがこの手順でできるはずです
以下のようにvpsサーバーで行いました。
ご確認お願い致します。
sudo apt install curl
curl -fsSL https://raw.githubusercontent.com/VOICEVOX/voicevox/0.14.7/build/installer_linux.sh >tmp_voicevox_installer.sh
VERSION=0.14.7 NAME=linux-nvidia-appimage bash tmp_voicevox_installer.sh
rm tmp_voicevox_installer.sh
ubuntu@os3-388-27077:~/DiscordBot$ python3 ~/DiscordBot/yomiage.py
2023-06-11 19:49:38 INFO discord.client logging in using static token
2023-06-11 19:49:39 INFO discord.gateway Shard ID None has connected to Gateway (Session ID: a7f762f31fdcdbbe03c017b64256cf1b).
2023-06-11 19:49:46 INFO discord.voice_client Connecting to voice…
2023-06-11 19:49:46 INFO discord.voice_client Starting voice handshake… (connection attempt 1)
2023-06-11 19:49:46 INFO discord.voice_client Voice handshake complete. Endpoint found japan3259.discord.media
2023-06-11 19:50:46 WARNING discord.gateway Shard ID None has stopped responding to the gateway. Closing and restarting.
[+] Downloading https://github.com/VOICEVOX/voicevox/releases/download/0.14.7/linux-nvidia-appimage.7z.txt…
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
100 205 100 205 0 0 298 0 –:–:– –:–:– –:–:– 298
[+] Listing of split archives…
0. VOICEVOX.AppImage.7z.001 1073741824 FFC59402BD3E845AE21F2FA012144FE8
1. VOICEVOX.AppImage.7z.002 1073741824 A47E0F37C6D4A0D389A672263D3917AA
2. VOICEVOX.AppImage.7z.003 63884142 AF530D024B961DD2E7BADFA001382FF4
[+] Downloading https://github.com/VOICEVOX/voicevox/releases/download/0.14.7/VOICEVOX.AppImage.7z.001…
** Resuming transfer from byte position 960208896
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
100 108M 100 108M 0 0 10.6M 0 0:00:10 0:00:10 –:–:– 11.3M
[+] Verifying size == 1073741824…
[-] Size OK
[+] Verifying hash == FFC59402BD3E845AE21F2FA012144FE8…
[-] Hash OK
[+] Downloading https://github.com/VOICEVOX/voicevox/releases/download/0.14.7/VOICEVOX.AppImage.7z.002…
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
100 1024M 100 1024M 0 0 11.2M 0 0:01:31 0:01:31 –:–:– 11.3M
[+] Verifying size == 1073741824…
[-] Size OK
[+] Verifying hash == A47E0F37C6D4A0D389A672263D3917AA…
[-] Hash OK
[+] Downloading https://github.com/VOICEVOX/voicevox/releases/download/0.14.7/VOICEVOX.AppImage.7z.003…
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0
100 60.9M 100 60.9M 0 0 9.9M 0 0:00:06 0:00:06 –:–:– 11.3M
[+] Verifying size == 63884142…
[-] Size OK
[+] Verifying hash == AF530D024B961DD2E7BADFA001382FF4…
[-] Hash OK
[+] Extracting archive…
7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=C.UTF-8,Utf16=on,HugeFiles=on,64 bits,2 CPUs Intel Core Processor (Broadwell) (306D2),ASM,AES-NI)
Scanning the drive for archives:
1 file, 1073741824 bytes (1024 MiB)
Extracting archive: VOICEVOX.AppImage.7z.001
—
Path = VOICEVOX.AppImage.7z.001
Type = Split
Physical Size = 1073741824
Volumes = 3
Total Physical Size = 2211367790
—-
Path = VOICEVOX.AppImage.7z
Size = 2211367790
—
Path = VOICEVOX.AppImage.7z
Type = 7z
Physical Size = 2211367790
Headers Size = 138
Method = LZMA2:24
Solid = –
Blocks = 1
Everything is Ok
Size: 2220201174
Compressed: 2211367790
[+] Dumping version…
[+] Creating uninstaller…
[+] Removing split archives…
[+] Removing VOICEVOX.AppImage.7z.001…
[+] Removing VOICEVOX.AppImage.7z.002…
[+] Removing VOICEVOX.AppImage.7z.003…
[+] Removing archive list (list.txt)…
[+] Extacting desktop entry…
squashfs-root/voicevox.desktop
squashfs-root/usr/share/icons/hicolor
squashfs-root/usr/share/icons/hicolor/0x0
squashfs-root/usr/share/icons/hicolor/0x0/apps
squashfs-root/usr/share/icons/hicolor/0x0/apps/voicevox.png
squashfs-root/voicevox.png
[+] Installing desktop entry…
[+] Installing icon…
[+] Registering file association…
[+] Updating file association database…
[+] Updating desktop file database…
[-] Skipped: Command ‘update-desktop-database’ not found
[+] Removing temporal directory…
[+] All done! VOICEVOX 0.14.7 has been installed under ‘/home/ubuntu/.voicevox’.ubuntu@os3-388-27077:~/DiscordBot$ rm tmp_voicevox_installer.sh
実行したら以下のようにでました。
ubuntu@os3-388-27077:~/DiscordBot$ python3 ~/DiscordBot/yomiage.py
2023-06-11 19:49:38 INFO discord.client logging in using static token
2023-06-11 19:49:39 INFO discord.gateway Shard ID None has connected to Gateway (Session ID: a7f762f31fdcdbbe03c017b64256cf1b).
2023-06-11 19:49:46 INFO discord.voice_client Connecting to voice…
2023-06-11 19:49:46 INFO discord.voice_client Starting voice handshake… (connection attempt 1)
2023-06-11 19:49:46 INFO discord.voice_client Voice handshake complete. Endpoint found japan3259.discord.media
2023-06-11 19:50:46 WARNING discord.gateway Shard ID None has stopped responding to the gateway. Closing and restarting.
これはVoiceVoxをインストールまではしたけど
VoiceVoxの起動をしていないですよね?
すみません。
そうですね。
起動方法がわからなくて今探しています。
起動コマンド気づかず、すみません。
起動コマンドを試したところ、以下のメッセージが出てきました。
ご確認お願い致します。
VoiceVoxを起動する
~/.voicevox/VOICEVOX.AppImage
configMigration014: >=0.14 /home/ubuntu/.config/voicevox/config.json exists, do nothing
[1489344:0613/063554.795211:ERROR:ozone_platform_x11.cc(247)] Missing X server or $DISPLAY
[1489344:0613/063554.795344:ERROR:env.cc(226)] The platform failed to initialize. Exiting.
Segmentation fault (core dumped)
1. X11サーバーをインストールする。
sudo apt-get install xorg
2. ローカルディスプレイ環境を設定する。
export DISPLAY=:0
ここまでやってVoiceVoxが起動しなかったらまた聞いてください
でも私の書いたコードへの質問ではなく「VoiceVoxが起動しない」のが問題であるならばVoiceVox公式のサポートに聞いたほうが解決が早いかもしれません。
やってみましたがダメでした。
ubuntu@os3-388-27077:~/DiscordBot$ 2023-06-14 20:28:59 INFO discord.client logging in using static token
2023-06-14 20:29:00 INFO discord.gateway Shard ID None has connected to Gateway (Session ID: 70fe25c0b5124888ea88dabc9e4ea85e).
2023-06-14 20:29:10 INFO discord.voice_client Connecting to voice…
2023-06-14 20:29:10 INFO discord.voice_client Starting voice handshake… (connection attempt 1)
2023-06-14 20:29:10 INFO discord.voice_client Voice handshake complete. Endpoint found japan2873.discord.media
2023-06-14 20:30:10 WARNING discord.gateway Shard ID None has stopped responding to the gateway. Closing and restarting.