🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Web Audio

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

2797閲覧

【JavaScript】if文をつかって音楽を再生する方法を教えてください!

prog.henry

総合スコア19

Web Audio

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/12/10 14:23

編集2019/12/11 13:48

前提・実現したいこと

こんにちは。いま、JavaScriptでアラームを作っており、特定の時刻になったときに音楽を流すようにプログラムしたいのですが、ネットにある音楽を再生する方法を片っ端から試してみても、私が思うように音楽は再生されませんでした。

そのため、if文をつかって(条件分岐で)どうやって音楽を流すのか(再生するのか)を教えていただきたいです。

該当のソースコード

JS

1 var dd = new Date(); 2 var hour = dd.getHours(); 3 4 function playSound() { 5 audioElem = new Audio(); 6 audioElem.src = "alarm.mp3"; 7 audioElem.play(); 8 } 9 10 if(hour==07){ 11 playSound(); 12 }

試したこと

htmlのaudioタグを使って音楽を再生する方法を試してみましたが、ほとんどのサイトにはonclick時に音楽を流すようなプログラムであるがif文を用いてでの再生方法は書かれていませんでした。

ちなみに、もしやと思って一回サイト通りにonclick時に再生するようにプログラムしたら流れましたので、おそらくファイルの選択ミスではありません。

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

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

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

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

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

m.ts10806

2019/12/10 20:49

>わかりやすく説明しようとしなくても全然大丈夫です!! 拡大解釈すると「つまり理解する気はないが動くコードくれればそれでいい」と思えなくもありません。 理解されない回答をしようと思う人はあまりいませんし、要件とも関係ないのでこのような但し書きは一切不要と思います。
prog.henry

2019/12/11 00:05

そんなことまでは考えていませんでした。貴重なご指摘をありがとうございます!
m.ts10806

2019/12/11 00:26

適宜質問を編集してご対応ください
miyabi_takatsuk

2019/12/11 01:22

if(hour==07){ playSound(); } は、javascriptだと通りますが、 十進数で比較するなら、エラーの元になりますのでやめましょう。 0が余計です。 getHoursは、十進数の数値を返すメソッドなので。
guest

回答2

0

ベストアンサー

  1. ブラウザの実装によりますが、 <video><audio> といった要素は、ユーザーのアクション (再生ボタンクリック) を起因としていないと、再生できないようになっています。
  2. 自動再生ができるブラウザであったとしても、audioElem.src = "alarm.mp3"; でファイル名を指定した直後ではまだファイルが読み込み終わっておらず、再生できない可能性があります。次のように、読み込みを待つ必要があります。

Audio() - Web API | MDN

js

1function playSound() { 2 audioElem = new Audio(); 3 audioElem.addEventListener('canplaythrough', () => { 4 audioElem.play(); 5 }); 6 audioElem.src = "alarm.mp3"; 7}

同様に、あらかじめaudioElem自体は定義しておいて、クリックイベントを起点に再生する (クリックされた時点では読み込みが完了しているだろうと思われる) 場合においても、念の為、読み込みが終わっているかどうか確認したほうがよいです。

js

1const audioElem = new Audio(); 2audioElem.addEventListener('click', evt => { 3 if(audioElem.readyState !== HAVE_ENOUGH_DATA) { 4 evt.preventDefault(); 5 return; 6 } 7 8 audioElem.play(); 9 evt.preventDefault(); 10}) 11document.body.appendChild(audioElem);

投稿2019/12/10 14:36

thyda.eiqau

総合スコア2982

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

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

0

if文をつかって(条件分岐で)どうやって音楽を流すのか(再生するのか)

alert を作りたいということですので、必要な実装は次の通り。

  1. 時間が来たら自動で再生開始
  2. 繰り返し再生
  3. 停止

if文は使いません
読み込み中の時間など非同期で実行される処理があるため、
条件分岐よりも Audio(HTMLAudioElement)に関連するイベントの変化を理解する必要があります。

ページを開いて 5秒後に鳴り始める例:
簡易実装です(再生を止めると、シーク位置を戻すなどの処理が必要ですが、未実装です)。

javascript

1// ページを開いてから実行 2window.addEventListener("load", function(){ 3 4 let audioElem; 5 function playSound() { 6 audioElem = new Audio( "alert.mp3" ); 7 audioElem.loop = true; 8 audioElem.autoplay = true; 9 audioElem.addEventListener("canplaythrough", function(){ 10 audioElem.play(); 11 }); 12 } 13 14 // 時限実行で再生開始 15 setTimeout( function(){ 16 playSound(); 17 }, 5000); // 5000msec == 5sec 18 19 // 停止は割愛。 click イベントで audioElem.pause() 20}); 21

ちなみにですが、setTimeout() もユーザ(プログラマ)が書いたアクションと思ってください。

Chromium で動作確認。メジャーブラウザだと鳴らないそうです。

投稿2019/12/12 05:40

編集2019/12/12 05:57
AkitoshiManabe

総合スコア5434

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問