質問するログイン新規登録

Q&A

解決済

1回答

381閲覧

ファイルの読み取りエラーが特定出来ず、ブラウザには何も表示されません。

taka_oct092018

総合スコア148

JavaScript

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

0グッド

0クリップ

投稿2025/08/08 14:23

編集2025/08/08 21:29

0

0

実現したいこと

エラーの原因を特定して、改善したいです。

発生している問題・分からないこと

スタートボタンを押してもプログラムが動いてくれません。

エラーメッセージ

error

1(ブラウザ) 2main.jsのsound.load()にてエラーが発生しましたsound.jsのload({})にてエラーをキャッチ 3 msgErr: undefined 4 5(コンソール) 623:09:42.567 msgErr: undefined main.js:157:21 723:09:42.575 msgErr: sound.jsのload({})にてエラーをキャッチ 8 msgErr: undefined main.js:157:21

該当のソースコード

// sound.js /** * オーディオファイルをロードするメソッド * * @param {string } path - オーディオファイルのパス * @param {function} callback - ファイルのロード完了時に呼ばれるコールバック関数 */ load({path, callback}) { // fetchを利用してオーディオファイルをロードする fetch(path) .then( res => res.arrayBuffer() ) // 1 .then( buf => this.ctx.decodeAudioData(buf) ) // 2 .then( decodedAudio => { // 再利用できるようにするためにAudioBufferをプロパティに確保しておく this.src = decodedAudio; // 準備完了したのでコールバック関数を呼び出す callback({}); } ) .catch( () => callback( {msgErr: `sound.jsのload({})にてエラーをキャッチ \n msgErr: ${window.msgErr}`} )); // 3 // 1. ロード完了したレスポンスからAudioBuffer生成のためのデータを取り出す // 2. 取り出したデータからAudioBufferを生成する // 3. 何かしらのエラーが発生した場合 } // load({path, callback}) {} // main.js // スタートボタンが押されたときに初期化が実行されるようにする btn.addEventListener( 'click', /** * スタートボタンが押された際に実行される関数 * * @callback */ () => { // ボタンを複数回押すことができないようにdisabled属性を付与する btn.disabled = true; // ユーザーがクリック操作を行った際に初めてオーディオ関連の処理を開始する sound = new Sound(); // 音声データを読み込み、準備完了してから初期化処理を行う sound.load({ path: './sound/explosion.mp3', /** * エラーが発生した際に実行される関数 * * @callback * @param {string} [msgErr]- エラー発生時のメッセージ */ callback: ({msgErr}) => { window.msgErr = msgErr; console.log(`msgErr: ${window.msgErr}`); // もしエラーが発生した場合はアラートを表示して終了する if (msgErr != null) { alert(`main.jsのsound.load()にてエラーが発生しました${window.msgErr}`); return; } // 初期化処理を行う init(); // インスタンスの状態を確認する loadChk(); } // callback: ({msgErr}) => {} }); // sound.load() }, // () => {} false ); // btn.addEventListener()

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

特に何も得られませんでした。

補足

「グラフィックスプログラミング入門のオリジナル」という専門書で勉強しています。
今まで得た知識を活用するために、書籍に書かれているコードを自分なりに編集しています。
コードは下記のURLからダウンロード出来ます。
https://26.gigafile.nu/1117-f83c932aa3bffe3972c1c563d5679eb2

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

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

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

u2025

2025/08/08 20:13

エラーを特定できない以前にこんなリファクタリングのしがいしかない拷問みたいなコードを整理する方が先決では
taka_oct092018

2025/08/08 21:33

u2025様、返信ありがとうございます。 あまり勉強にならないコードでしょうか。
Lhankor_Mhy

2025/08/10 09:02

init() でこけてますよ
guest

回答1

0

ベストアンサー

load({path, callback}) {

エラーメッセージのとおり、この時点で文法的に成立していません。もともとクラスやオブジェクトの内部に書いてあったコードをトップレベルに出してしまったなど、何かしらの間違いがある状況です。

投稿2025/08/08 14:48

maisumakun

総合スコア146963

maisumakun

2025/08/08 14:53 編集

あとのコードに「sound = new Sound」のようにありますが、これを行うにはSoundというクラスを定義する必要があります。 (クラス定義の中になら、上掲のload以下の部分を書いて文法的に成立します)
taka_oct092018

2025/08/08 18:52

maisumakun様、返信ありがとうございます。 文字数制限により、コードを全て投稿出来ないので、 問題の箇所のみ掲載させて頂きました。 ファイルはサーバーにアップロードしてあるので、開発者ツールで閲覧可能です。 https://upload0605.web.fc2.com/sample_aug082025/idx.html 1. 上記のURLのサイトを開いてF12で開発者ツールが起動します。 2. デバッガーパネル -> 左側欄 -> upload0605.web.fc2.com -> js -> sound.jsとmain.jsが該当のファイルとなります。 別の閲覧方法として、問題の箇所のコード全体をブログに投稿しました。 http://blog.livedoor.jp/programmer__2006/preview/edit/4f3ad6d4495aadba35c3986e01289f99 よろしくお願い致します。
maisumakun

2025/08/08 23:05

> 問題の箇所のみ掲載させて頂きました 少なくとも、文法的な意味が破壊されるほど省略したコードを、その旨の注意書きもなく載せないでください。
taka_oct092018

2025/08/09 06:01

maisumakun様、了解しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問