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

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

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

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

Q&A

解決済

1回答

1859閲覧

条件によって音楽を変更したい。

HYoshitaka

総合スコア14

JavaScript

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

0グッド

2クリップ

投稿2020/09/17 14:57

現在ゲームを作っており、マップ画面音楽、戦闘音楽、ボス音楽の切り替えを試しているのですが上手くいきません。
function内にif文を挿入して試してみましたが、うまくいませんでした。
どなたかご教示いただけますでしょうか。
※以下のコードを試すとマップ画面音楽がずっと流れている状況です。

let bgm = new Audio();//マップ画面音楽 let bgm2 = new Audio();//戦闘音楽 let bgm3 = new Audio();//ボス音楽 bgm.src = "src/music1.mp3"; bgm2.src = "src/music2.mp3"; bgm3.src = "src/music3.mp3"; bgm.loop = true; bgm.autoplay = false; bgm.volume = 0.3; bgm.preload = "auto"; $(function() {   if(enemyType==1){ bgm=bgm2 } bgm.load(); bgm.addEventListener('canplaythrough', function(e) { bgm.play(); }); });

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

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

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

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

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

miyabi_takatsuk

2020/09/17 18:08

マップと戦闘の切り替えは、 同HTML内で行われ、ページ遷移はしない、ということでしょうか?
HYoshitaka

2020/09/18 03:24

ご回答ありがとうございます。 はい。同HTML内で行われます。
guest

回答1

0

ベストアンサー

まず前提条件ですがブラウザのセキュリティの関係で
自動で音響データを再生することができなくなっています。

しかし一度ボタンを押してもらった後なら切り替えができます。
サンプルですがブラウザで立ち上げた際は再生されません。

再生ボタンを押下するとはじめの音響データが再生されます
テストで入れてるのですが10秒後に次の音響データに切り替わります。(1度だけ)
これで一度再生できたらコントロールできることが判ります。

また再生中に再生ボタンを押しても次の音響データに切り替わります。

方法論ですがブラウザで表示された際「ミュート」ボタンがONの状態として作っておいて
「ミュート」ボタンを押したら(ミュート解除)音響データが再生されるようにするのが良いでしょう。

HTML

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="utf-8" /> 5 <title>切り替え</title> 6 <script type="text/javascript"> 7 var playlist = [ 8 'src/music1.mp3', 9 'src/music2.mp3', 10 'src/music3.mp3' 11 ] 12 var nPlayIndex = playlist.length; 13 var bIsPlay = false; // 処理テスト用 14 15 // 再生開始 16 function start_music(){ 17 // ***** テスト用 ここから ***** 18 // 初めて再生開始が実行された場合 19 if(bIsPlay == false){ 20 bIsPlay = true; 21 window.setTimeout("start_music()", 10000); // 10秒後切り替え 22 } 23 // ***** テスト用 ここまで ***** 24 25 var audioObj = document.getElementById("myMusic"); 26 // つぎの音響ファイルを指定 27 if(nPlayIndex >= playlist.length - 1){ 28 nPlayIndex = 0; 29 }else{ 30 nPlayIndex ++; 31 } 32 audioObj.src = playlist[nPlayIndex]; 33 34 audioObj.play(); 35 } 36 // 再生停止(一時停止) 37 function start_pause(){ 38 var audioObj = document.getElementById("myMusic"); 39 audioObj.pause(); 40 } 41 // 音量アップ 42 function volume_up(){ 43 var audioObj = document.getElementById("myMusic"); 44 audioObj.volume = audioObj.volume + 0.1; 45 } 46 // 音量ダウン 47 function volume_down(){ 48 var audioObj = document.getElementById("myMusic"); 49 audioObj.volume = audioObj.volume - 0.1; 50 } 51 52 </script> 53 54</head> 55<body onload="initAudio();"> 56 <h1>スクリプトで音楽を制御する</h1> 57 <div> 58 <audio id="myMusic" controls loop style="display: none;"></audio> 59 </div> 60 <input type="button" id="play" value="再生" onclick="start_music()"> 61 <input type="button" id="pause" value="停止" onclick="start_pause()"><br> 62 <input type="button" id="volumeup" value="音量アップ" onclick="volume_up()"> 63 <input type="button" id="volumedown" value="音量ダウン" onclick="volume_down()"> 64</body> 65</html>

投稿2020/09/17 19:10

kuma_kuma_

総合スコア2506

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

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

HYoshitaka

2020/09/18 03:38

ご回答ありがとうございます。 1点情報を付け加えるのを忘れていました。 今回のゲームはcanvas内の中に画像を2d描画しております。 HTML内のbody内は以下のようになっております。 ------------------------------------------------------- <body style="margin:0px; overflow:hidden"> <canvas id="main"></canvas> </body> --------------------------------------------------------- このような場合ご教示いただいたコードをどのように埋め込めばよいのでしょうか?
kuma_kuma_

2020/09/18 03:50

ん?そこは質問者様の感性でいいかと思うのですが キャンバス上にメニューとか表示しないのですか? canvasのclick時でもいけますよ?
HYoshitaka

2020/09/18 06:23

ご回答ありがとうございます。 canvas内にコードを埋め込めば実装できました。 ただ、これだと再生ボタンを押すたびに音が切り替わるので、本来実現したい 敵のタイプによって音を切り替えるにはどのようにすればよろしいでしょうか?
kuma_kuma_

2020/09/18 06:40

んん??いや回答に書いてある通り var audioObj = document.getElementById("myMusic"); audioObj.src = '目的の音響ファイルパスを指定'; audioObj.play(); 3行だけだよ? だだ条件としてブラウザでclick等してからじゃないと再生できないよ 条件を満たせばこのJSはこの3行でいけるよという事なんだけれども???
HYoshitaka

2020/09/18 07:17

if分の内容に条件を入力すると実装できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問