質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1725閲覧

Node.js JavaScriptのエラー解決について

ponyo_

総合スコア11

npm

npmは、Node Packaged Modulesの略。Node.jsのライブラリ・パッケージを管理できるツールです。様々なモジュールを簡単にインストールでき、自分でモジュールを作成し公開する際にも使用できます。

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/07/25 21:47

こんにちは、最近触り始めたばかりの言語で、言っている意味があっていない等あると思います。
もし間接的に意味がとらえられるようであれば、そのまま読み替えていただけると幸いです。
また、Discord的な関係性はない可能性があります。

作っているもの

Discord Botの開発を行っています。
FFmpegを使って、音声を再生できるものを作っています。

事象

1.npm startで実行
正常に実行され、コンソールにログ出力、また出力待ち状態になります。

2.Discord上で、音声を流すコマンドを実行
正常に流れます。

3.Discord上で、音声を流すコマンドを連続で実行していると途中で応答しなくなります。
その時、ログを確認してみると、下記が出力されます。
また、npmは実行状態で、クラッシュ等はしません。(Nodeは終了します。というような記載があるのはわかります)
ですが、Discord上でコマンドを実行しても、応答はありません。

UnhandledPromiseRejectionWarning: RangeError: offset is out of bounds at Uint16Array.set (<anonymous>) at OpusScript.encode (/home/disco/discord_voice_bot/node_modules/opusscript/index.js:51:16) at Encoder._encode (/home/disco/discord_voice_bot/node_modules/prism-media/src/opus/Opus.js:60:25) at Encoder._transform (/home/disco/discord_voice_bot/node_modules/prism-media/src/opus/Opus.js:143:30) at Encoder.Transform._read (_stream_transform.js:205:10) at Encoder.Transform._write (_stream_transform.js:193:12) at writeOrBuffer (_stream_writable.js:352:12) at Encoder.Writable.write (_stream_writable.js:303:10) at VolumeTransformer.ondata (_stream_readable.js:713:22) at VolumeTransformer.emit (events.js:314:20) (Use `node --trace-warnings ...` to show where the warning was created) (node:1248) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1) (node:1248) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

実行環境

さくらのVPN
CentOs7
Node.js 推奨バージョンの12.x(最新の14.xも試しました)
Discord js v12.x

わからないこと

Java系を無知なのが問題なのかもしれませんが、エラーが読み解けません。
Nodeが終了してしまっていることはわかるのですが、これをどう解決するのがいいか教えていただけないでしょうか。
連続でリクエストしても、エラー落ちしなくなるにはどうすればよいか、ご教授いただけないでしょうか。

私の案としては
再帰的処理を、記載すればよいのではと思っていますが、
エラーコードには、私の開発しているファイル(/home/disco/discord_voice_bot/index.js)
で、エラーが出てるという記載は無いようにみえて、ではどこに再帰的処理を記載すればよいのかわからないといった状態です。

※この案の解釈が間違っている可能性もあります。

以上、有識者の方いらっしゃいましたら、ご教授いただければ幸いです。
また、なにか足りない情報等ありましたら、補足をください。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gentaro

2020/07/25 22:08

普通に考えれば発生している例外を適切に処理して正常系の処理フローに復帰すれば良いんじゃないの、という話で、それ以上具体的な話を聞きたいなら、どんなライブラリを使っているのかという具体的な情報と、そのライブラリのコードを読み出してクラッシュしている箇所のコードを提示して、どこに例外処理を記述するべきかを質問するべきだと思うけど。 自分のコードで何を呼び出したらクラッシュするのかを把握していないなら、まずはデバッグからですね。
guest

回答2

0

Uint16Arrayの配列で範囲を超えて値をセットしようとしたためエラーが起きています。

TypedArray.prototype.set()

どのように修正すれば良いのかはソースコードを見ない限りわかりません。なぜなら、

  1. Uint16Arrayを作成するときの指定する長さが間違っている。(そもそもUint16Arrayを直接作成していないのであれば、その方法が間違っている)
  2. Uint16Array.prototype.setで指定するインデックスの位置が間違っている。
  3. 範囲を超えてしまう場合はUnit16Arrayを作り直す必要があるが、その処理が入っていない。
  4. そもそもUint16Arrayを使うべきではない。
  5. 上記について、Unit16Array.prototype.setを呼び出す部分だけではなく、ソースコード全体から、見直しが必要かも知れない。時には根本的に仕組みを変える必要すらある。

等、多くの選択肢が用意されているからです。これらのどれになるのかはソースコード次第としか言いようがありません。再帰的処理は全く無関係かも知れませんし、再帰的処理を加えることで範囲超えを防ぐことができるかも知れませんし、そのどちらであるかすらわからない、としか答えようがありません。

投稿2020/07/25 22:13

raccy

総合スコア21739

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ponyo_

2020/07/25 23:14

回答ありがとうございます。細かく説明していただきとても分かりやすいです。 記載をしていなかったこと、申し訳ないのですが、下記の方のをベースに作成しています。 これは、インストールしているパッケージ一覧ですが https://github.com/ahiruman5/discord_voice_bot/blob/master/package-lock.json とても量が多いです。 エラーファイルの場所が示されている、3つ /home/disco/discord_voice_bot/node_modules/opusscript/index.js /home/disco/discord_voice_bot/node_modules/prism-media/src/opus/Opus.js /home/disco/discord_voice_bot/node_modules/prism-media/src/opus/Opus.js を開いてみたのですが、そこに「Uint16Array」という文字列は存在しませんでした。 これは、別のパッケージから呼ばれているからであり、どこで「Uint16Array」が使われているかを確認するには、すべて開いて検索をしてみるしかないのでしょうか。 よろしくお願いいたします。
raccy

2020/07/25 23:35

情報が断片的に示されても、正確なことは何も言えません。少なくとも、再現可能なレベルでの情報が必要です。 Unit16Arrayは別の所で作成しているのかも知れませんし、別の何かの実行結果として返しているのかも知れません。Unit16Arrayを作成しているのがNode.jsが提供しているAPIだった場合、Unit16Arrayという文字が一切現れない場合もあります。バックトレースを追いながら、一つ一つ想定されている値になっているかを確認していくしかないです。 それとも、質問は、エラーメッセージの読み解き方なのでしょうか?
ponyo_

2020/07/26 06:26

回答ありがとうございます。失礼しました。もう一度私も構築し直してみたので、再現方法を記載します。 0.FFmpegのインストール yum install yum-utils epel-release https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm その後、yum update 最後にyum install ffmpeg ffmpeg-devel 1.yum で、nodeをインストールし、nコマンドで推奨版にアップデート (npmも最新版にアップデート) yum install node n n stable npm update -g npm npm update -g 2.下記クローンを作成 https://github.com/ahiruman5/discord_voice_bot git clone https://github.com/ahiruman5/discord_voice_bot 3.パッケージインストール(githubに書かれているものすべて) npm install 以上です。 パッケージは、Gitに上げられないみたいなので、こちらに置いておきます。インストールしてから、何も変更していません。 https://drive.google.com/drive/folders/1AKj9HwT6wHxWy7yPsp9uZHirJvwSnukn?usp=sharing 私としては、解決策がわかるのが最善ではありますが、 お時間とってしまうようであれば、解決方法だけ知りたいと考えています。 よろしくお願いいたします。
raccy

2020/07/26 08:20

追加情報はなるべく質問に追加してください。(コメントには追加したというだけでもよろしいです。)ただし、以下に注意してください。 質問では「Discord Botの開発を行っています。」といってますが、あなたが何かコードを書いたわけではなく他人が書いたアプリを動かしているだけですね?そうであれば、該当のソフトのIssuesにあげるべきです。一般的なソフトウェアの動作について質問されても困ります。そうではなく、他人が書いたアプリを自分で修正しようとしているというのであれば、その主旨を質問に必ず明記してください。そうではないと「プログラミングに関係が無い質問」になります。
ponyo_

2020/07/26 09:10

わかりました。最後までありがとうございました。
guest

0

自己解決

該当のソフトのIssuesに挙げてみることにしました

投稿2020/07/26 09:10

ponyo_

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問