【问题标题】:RangeError when playing audio through opusscript通过 opusscript 播放音频时出现 RangeError
【发布时间】:2021-06-01 08:15:46
【问题描述】:

我一直在尝试使用电子通过不和谐机器人播放声音。但是,我遇到了三个问题。

第一个是我通常用来播放声音文件的代码,尽管 discord 返回一个错误,指出我缺少 opus.node 和 opusscript。这不应该发生,因为我已经安装了@discordjs/opus,并且在电子实例之外运行相同的代码工作得很好。

message.member.voice.channel.join().then((connection) => {
    const dispatcher = connection.play(ytdl("https://www.youtube.com/watch?v=ZlAU_w7-Xp8", { quality: "highestaudio" }));
    dispatcher.on("finish", () => {
        console.log("Song is finished.");
    });
});

为了解决这个错误,我安装了 opusscript。然而,这是第二个问题出现的地方。我能够运行声音 - 前 9 次。第九次后,机器人发出以下错误:

(node:21064) UnhandledPromiseRejectionWarning: RangeError: offset is out of bounds
at Uint16Array.set (<anonymous>)
at OpusScript.encode (C:\Users\spiralio\Desktop\sb\node_modules\opusscript\index.js:67:16)
at Encoder._encode (C:\Users\spiralio\Desktop\sb\node_modules\prism-media\src\opus\Opus.js:60:25)
at Encoder._transform (C:\Users\spiralio\Desktop\sb\node_modules\prism-media\src\opus\Opus.js:157:30)
at Encoder.Transform._read (_stream_transform.js:191:10)
at Encoder.Transform._write (_stream_transform.js:179:12)
at doWrite (_stream_writable.js:403:12)
at writeOrBuffer (_stream_writable.js:387:5)
at Encoder.Writable.write (_stream_writable.js:318:11)
at VolumeTransformer.ondata (_stream_readable.js:716:22)

仅当我正在播放的声音文件与自身重叠 9 次时才会出现此错误。如果我让它在此错误播放之前完成,我可以继续播放声音就好了。但是,一旦出现错误,无论等待多久,声音都不再播放。

我尝试的一个解决方案是让机器人在渲染器进程而不是主进程中运行。但是,这会提示我机器人无法从浏览器连接到语音通道的问题。

【问题讨论】:

    标签: node.js electron discord.js opus


    【解决方案1】:

    这里似乎存在一些问题。

    首先,这里的根本问题是我们正在对一个太大的文件进行编码。我怀疑这些视频正在滚雪球,以至于我们碰壁了。

    我会尝试只下载音频以避免发送太大的文件(请参阅ytdl options)。

    message.member.voice.channel.join().then((connection) => {
        const dispatcher = connection.play(ytdl("https://www.youtube.com/watch?v=ZlAU_w7-Xp8", { quality: "highestaudio", filter: "audioonly" }));
        dispatcher.on("finish", () => {
            console.log("Song is finished.");
        });
    });
    

    Electron 未检测到 @discordjs/opus 似乎是原生模块和您的构建器的一个更深层次的问题。您是否在生产中遇到过这种情况,或者您是否在某处重新创建了您的 Electron 设置?

    【讨论】:

    • 我已经通过切换到网络应用程序“解决”了这个问题。但是,我会将其标记为答案,以回答任何观看的人的任何问题。 “我会尝试只下载音频以避免发送太大的文件”如果音频是文件,无论大小如何,问题也会持续存在。 “您是否在生产中遇到过这种情况,或者您是否在某处重新创建了您的 Electron 设置?”这段代码的 sn-p 是在较小的测试环境中重现该问题,该问题也存在(如果这就是您的意思)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2021-12-14
    相关资源
    最近更新 更多