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

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

詳細はこちら
Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

2回答

901閲覧

音楽をランダム・再生

jpop

総合スコア6

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2019/11/26 07:19

編集2019/11/26 07:39

前提・実現したいこと

JavaScriptで音楽を再生する動作を作成しています。
具体的に言うと、
6つある音楽(a,b,c,d,e,f)を
順番に(a-b-c-d-e-fの順で)
ループ再生で、
最初は6つの音楽のいずれかをランダムで選択したもの
を流したいです。

※例
aが最初で続いてb-c-d-e-f-a-b-c-d-e-f....
cが最初で続いてd-e-f-a-b-c-d-e-f-a-b....
などのようにしたいです。

発生している問題・エラーメッセージ

ページを開いても再生されないというのが現状です。
何が問題であるのか、どのように直したらいいのかを教えていただけないでしょうか。

ソースコード

いくつかのサイトを参考に作成したのが下記のコードになります。

JS

1 var src = [ 2 'a.mp3', 3 'b.mp3', 4 'c.mp3', 5 'd.mp3', 6 'e.mp3', 7 'f.mp3', 8 ]; 9 // DOM要素の読み込みが終了してから実行 10 document.addEventListener("DOMContentLoaded", function(){ 11 var rand = Math.floor( Math.random() * src.length ); // 0以上ファイル数未満の整数値の乱数を生成 12 // id="audiowrap"の要素にaudio要素を書き出す 13 document.getElementById("audiowrap").innerHTML = '<audio autoplay>' + 14 '<source src="' + src[rand] + '" type="audio/mp3">' + 15 '</audio>'; 16 }); 17 var a = new Audio("a.mp3"); 18 var b = new Audio("b.mp3"); 19 var c = new Audio("c.mp3"); 20 var d = new Audio("d.mp3"); 21 var e = new Audio("e.mp3"); 22 var f = new Audio("f.mp3"); 23 // aのendedを検知するための処理 24 a.addEventListener("ended", function(e) { 25 // bの再生開始 26 b.play(); 27 }); 28 29 // bのendedを検知するための処理 30 b.addEventListener("ended", function(e) { 31 // cの再生開始 32 c.play(); 33 }); 34 35 // cのendedを検知するための処理 36 c.addEventListener("ended", function(e) { 37 // bの再生開始 38 d.play(); 39 }); 40 41 // dのendedを検知するための処理 42 d.addEventListener("ended", function(e) { 43 // cの再生開始 44 d.play(); 45 }); 46 47 // eのendedを検知するための処理 48 e.addEventListener("ended", function(e) { 49 // bの再生開始 50 f.play(); 51 }); 52 53 // fのendedを検知するための処理 54 f.addEventListener("ended", function(e) { 55 // cの再生開始 56 a.play(); 57 });

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

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

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

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

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

Takumiboo

2019/11/26 13:01

ブラウザ側で音楽の自動再生が無効化されていたりする可能性もありますね
guest

回答2

0

・配列の番号で音楽再生するようなコードを組む
・乱数を出してその番号の音楽再生
・+1して配列のサイズ超えたら0にする
・くりかえし

というふうにすればよろしい

投稿2019/11/26 07:33

y_waiwai

総合スコア88038

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

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

jpop

2019/11/26 07:38

上記のコードでいうとどこを直したらいいのでしょうか。
y_waiwai

2019/11/26 07:48

一部分の修正でいけるってなもんでもないので(全部の作り直しが必要) まあ、上から順番に一つづつ実現できるようにコードを書いていこう
jpop

2019/11/26 07:51

なるほど。ありがとうございます。回答を参考に書き直してみます。
guest

0

自己解決

回答、コメント、いろいろしてくださった方、ありがとうございます。

再生できない理由が判明しました。

私は現在、GoogleChromeを使用しております。
そして、上記のソースはGCでは使えないようです。
そのために再生できなかったのですね。
コメントの音楽の再生が無効化されているというのを見て
もしかしたらブラウザ自体がタグに対応していないのでは?と思い、
Can I use?で調べたところ、やはり無理・・・
根本的なところでした。すみません。

投稿2019/11/28 06:55

jpop

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問