うごかなーい!

※2023年1月28日追記:解決済み
※親切な方がコメントで教えてくれました!ありがとーありがとー

await genAudio(message.content, “text.wav”);
ここでwavファイルの作成には成功してるんだけど
await player.play(resource);
ここで音が鳴らないのはなんでだろうと悩んでいます。
discord.js詳しい人たすけてー!

const { default: axios } = require("axios");
const fs = require("fs");

const rpc = axios.create({ baseURL: "http://127.0.0.1:50021", proxy: false });

async function genAudio(text, filepath) {

    text = encodeURI(text)

    //http://127.0.0.1:50021/speakers
    const speaker = 8 //8は春日部つむぎのノーマル

    const audio_query = await rpc.post(`audio_query?text=${text}&speaker=${speaker}`);

    const synthesis = await rpc.post(`synthesis?speaker=${speaker}`, JSON.stringify(audio_query.data), {
        responseType: 'arraybuffer',
        headers: {
            "accept": "audio/wav",
            "Content-Type": "application/json"
        }
    });

    await fs.writeFileSync(filepath, new Buffer.from(synthesis.data), 'binary');
}


const { Client, Intents } = require('discord.js');
const client = new Client({intents: [Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_VOICE_STATES]});
const { joinVoiceChannel, createAudioResource, createAudioPlayer } = require('@discordjs/voice');

client.on('ready', () => {
  console.log(`${client.user.username}がログインしました。`);
});

client.on('messageCreate', async message => {
  if (message.author.bot) {
    return
  }
  if (message.content === 'つむぎちゃんおいで') {
    if (message.member.voice.channelId != null) {
      joinVoiceChannel({
          channelId: message.member.voice.channel.id,
          guildId: message.guild.id,
          adapterCreator: message.guild.voiceAdapterCreator
      })
      await message.channel.send('はーい');
    } else {
      await message.channel.send('ボイスチャンネルに入ってから呼んでね!');
    }
    return;
  }

  if (client.voice.adapters != null) {
    console.log(`通ってる1`);
    // discordのメッセージからwavを生成
    await genAudio(message.content, "text.wav");
    console.log(`通ってる2`);
    const resource = createAudioResource("text.wav");
    console.log(`通ってる3`);
    const player = createAudioPlayer();
    console.log(`通ってる4`);
    await player.play(resource);
    console.log(`通ってる5`);
  }
})

client.login('token');

2件のコメント

  1. const connection = joinVoiceChannel({
    channelId: message.member.voice.channel.id,
    guildId: message.guild.id,
    adapterCreator: message.guild.voiceAdapterCreator
    })
    にし
    player.subscribe(connection)
    にしてみてください。

    多分これだけでは解決しないと思うので、最初にplayerを宣言してからのほうがいいかもしれません。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です