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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Web Audio

Web Audioは、音声を処理・合成するためのWebアプリケーション向けJavaScript APIです。HTML5から導入されました。オーディオソースの選択、エフェクト・ビジュアライゼーションの追加、パンニングなど特殊効果の適用など多くの機能を持ちます。

JavaScript

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

Q&A

解決済

1回答

1262閲覧

javascript、webaudioAPIに実装した音声データのロードチェックが正常に作動しない

tadpolecom

総合スコア2

Web Audio

Web Audioは、音声を処理・合成するためのWebアプリケーション向けJavaScript APIです。HTML5から導入されました。オーディオソースの選択、エフェクト・ビジュアライゼーションの追加、パンニングなど特殊効果の適用など多くの機能を持ちます。

JavaScript

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

0グッド

0クリップ

投稿2021/02/16 18:15

前提・実現したいこと

javascriptで音声を鳴らすためにWEBAudioAPIを利用しました。
Soundクラスで非同期に読み込み、失敗した場合、コールバックにerror!を渡すことで
エラーを検知し、指定のメッセージを表示します。

###エラー
その場合、コールバックの中のif文でerror!が渡されたかどうか判断しメッセージを表示しますが
1つ外の consolelog("????"); の位置に、このようなエラーを出すような文を書いた場合でも
指定のエラーメッセージが表示されます。

音声データをロードできたかを検知するためのメッセージに、その他の部分のエラーが引っかかるのは何故なのでしょうか。

//htmlのボタンのクリックを検知 window.addEventListener('load', () => { let button = document.body.querySelector('#start_button'); button.addEventListener('click', () => { sound = new Sound(); sound.load('./xxx.mp3', (error) => { if (error != null) { alert('ファイルの読み込みエラーです'); return; } //意図的に設置したエラー consolelog("????"); } ) }) }) class Sound { constructor() { this.ctx = new AudioContext(); } load(audioPath, callback) { fetch(audioPath) .then((response) => { return response.arrayBuffer(); }) .then((buffer) => { return this.ctx.decodeAudioData(buffer); }) .then((decodeAudio) => { this.source = decodeAudio; callback(); })        //ロードに失敗した場合 .catch(() => { callback('error!'); }); } }

試したこと

エラーを取り除けばもちろん正常に動作しましたし、音声データをロードできなかった場合も検知できました。

###補足
vscodeでgo liveを利用してテストしました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

javascript

1 .then((decodeAudio) => { 2 this.source = decodeAudio; 3 callback(); 4 }) 5       //ロードに失敗した場合 6 .catch(() => { 7 callback('error!'); 8 });

この then() 部で呼んでいる callback()consolelog でエラーを出しているので、この catch() 部に入ってcallback('error!') が呼ばれています。

投稿2021/02/16 23:49

int32_t

総合スコア20882

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問