【问题标题】:How to get rid of this ffmpeg?如何摆脱这个ffmpeg?
【发布时间】:2021-07-07 14:15:53
【问题描述】:

我目前正在开发一个机器人。它的功能是加入语音频道并与tts通话。

这是我迄今为止的尝试:

try {
    const broadcast = client.voice.createBroadcast();
    var channelId = message.member.voice.channelID;
    var channel = client.channels.cache.get(channelId);
    channel.join().then(connection => {
        broadcast.play(discordTTS.getVoiceStream("Staline est né le : 18 Décembre 1878."));
        const dispatcher = connection.play(broadcast);
    });
    message.delete();
}
catch (e) {
    console.log(e);
}

这是我得到的错误:

events.js: 292
throw er; // Unhandled 'error' event
          ^

    Error: spawn ffmpeg ENOENT
at Process.ChildProcess._handle.onexit(internal / child_process.js: 269: 19)
at onErrorNT(internal / child_process.js: 465: 16)
at processTicksAndRejections(internal / process / task_queues.js: 80: 21)
Emitted 'error' event on ChildProcess instance at:
at Process.ChildProcess._handle.onexit(internal / child_process.js: 275: 12)
at onErrorNT(internal / child_process.js: 465: 16)
at processTicksAndRejections(internal / process / task_queues.js: 80: 21) {
    errno: -4058,
        code: 'ENOENT',
            syscall: 'spawn ffmpeg',
                path: 'ffmpeg',
                    spawnargs: [
                        '-i', '-',
                        '-analyzeduration', '0',
                        '-loglevel', '0',
                        '-f', 's16le',
                        '-ar', '48000',
                        '-ac', '2',
                        'pipe:1'
                    ]
}

我真的不明白,我从来没有要求ffmpeg在这里

【问题讨论】:

    标签: javascript ffmpeg discord.js


    【解决方案1】:

    据我所知 /tts 是 Discord 的内部功能(不是 discord.js)。 Bot 无法加入并通过 tts 发言。 你可以做这样的事情:

    client.on('message', message => {
        message.channel.send(args, {
            tts: true
        });
    });
    
    

    不加入语音频道!

    更新!

    我没有提到您正在使用“discord-tts”。 首先,您必须安装所有需要的依赖项: @discordjs/opusffmpeg-static

    然后试试你的代码或者这个:

    if (msg.content==="say test 123") {
        const broadcast = bot.voice.createBroadcast();
    
        if (msg.member.voice.channel) {
            const connection = await msg.member.voice.channel.join();
    
            broadcast.play(discordTTS.getVoiceStream("test 123"));
    
            const dispatcher = connection.play(broadcast);
    
        } else {
            await msg.reply('You need to join a voice channel first!');
        }
    }
    

    【讨论】:

    • 您好,我每次都在安装 ffmpeg 而不是 ffmpeg-static,谢谢 :D