Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 通过opusscript播放音频时出现范围错误_Node.js_Electron_Discord.js_Opus - Fatal编程技术网

Node.js 通过opusscript播放音频时出现范围错误

Node.js 通过opusscript播放音频时出现范围错误,node.js,electron,discord.js,opus,Node.js,Electron,Discord.js,Opus,我一直试图用电子通过一个不和谐机器人来播放声音。然而,我遇到了三个问题 第一个是我通常用来播放声音文件的代码,尽管discord返回一个错误,指出我缺少opus.node和opusscript。这不应该发生,因为我已经安装了@discordjs/opus,并且在electron实例之外运行相同的代码工作得非常好 message.member.voice.channel.join()。然后((连接)=>{ const dispatcher=connection.play(ytdl(“https:/

我一直试图用电子通过一个不和谐机器人来播放声音。然而,我遇到了三个问题

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

message.member.voice.channel.join()。然后((连接)=>{
const dispatcher=connection.play(ytdl(“https://www.youtube.com/watch?v=ZlAU_w7-Xp8“,{质量:“highestaudio”});
dispatcher.on(“finish”,()=>{
log(“歌曲完成了”);
});
});
为了避免这个错误,我安装了opusscript。然而,这就是第二个问题。我能够播放声音-头9次。第九次之后,bot会发出以下错误:

(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)
(节点:21064)未处理的PromisejectionWarning:RangeError:偏移量超出范围
在Uint16Array.set()处
在OpusScript.encode(C:\Users\spiralio\Desktop\sb\node\u modules\OpusScript\index.js:67:16)
在编码器处进行编码(C:\Users\spiralio\Desktop\sb\node\u modules\prism media\src\opus\opus.js:60:25)
at Encoder.\u transform(C:\Users\spiralio\Desktop\sb\node\u modules\prism media\src\opus\opus.js:157:30)
在Encoder.Transform.读取(_stream_Transform.js:191:10)
在Encoder.Transform._write(_stream_Transform.js:179:12)
在doWrite(_stream_writable.js:403:12)
在writeOrBuffer(_stream_writable.js:387:5)
在Encoder.Writable.write(_stream_Writable.js:318:11)
在VolumeTransformer.ondata(_stream_readable.js:716:22)
仅当我正在播放的声音文件与自身重叠9次时,才会发生此错误。如果我让它在这个错误出现之前结束,我可以继续播放声音。然而,一旦错误播放,无论我等待多久声音都不再播放


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

这里似乎存在一些问题

首先,这里的根本问题是我们正在编码一个太大的文件。我怀疑这些视频正在滚雪球般地发展到我们撞到砖墙的地步

我会尝试只下载音频,以避免发送过大的文件(请参阅)

message.member.voice.channel.join()。然后((连接)=>{
const dispatcher=connection.play(ytdl(“https://www.youtube.com/watch?v=ZlAU_w7-Xp8“,{质量:“highestaudio”,过滤器:“audioonly”});
dispatcher.on(“finish”,()=>{
log(“歌曲完成了”);
});
});
对于本机模块和构建器来说,电子不检测似乎是一个更深层次的问题。您在生产过程中是否遇到过这种情况,或者您是否在某处重新设置了电子设备?

我已通过切换到web应用程序“解决”了这个问题。不过,我会将此标记为回答任何观众的任何问题。“我会尝试只下载音频,以避免发送太大的文件”如果音频是文件,无论大小,问题也会持续存在。“您在生产中是否遇到过这种情况,或者您是否在某个地方重新创建了您的电子设置?”这段代码是在较小的测试环境中重新创建的问题,其中也存在问题(如果您的意思是这样的话)