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

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

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

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

Q&A

解決済

1回答

262閲覧

複数のボタンに振り分けている同じプログラムを、1秒後に止めたい

mochisio

総合スコア20

JavaScript

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

0グッド

1クリップ

投稿2023/05/27 04:26

編集2023/05/27 06:49

実現したいこと

複数のボタンに振り分けている同じプログラムをつかい、最後にボタンを押してから1秒後に音が止まるようにしたいです。

前提

Audio.srcの中身は各ボタンごとに違うフリー素材のピアノの音を入れています。

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

複数のボタンにaudioを再生するようにプログラミングしているのだが、同じ関数を複数のボタンで使っているためか、最初のボタンを押してから1秒後に処理が終了するのか、複数のボタンを押すと音が途切れる。なので、最後にボタンを押してから1秒後に音が止まるようにしたいです。

該当のソースコード

JAVASCRIPT

1// 2function audioStop(){ 3Audio.pause 4Audio.currenttime=0; 5} 6 7//音を鳴らす関数 8function playPiano(){ 9//音が重ならないようにする 10Audio.stop; 11const timer1 =setTimeout(audioStop,1000); 12Audio.play; 13clearTimeout(timer1); 14//ここで同じsetTimeIDでもう一回setTimeout(audioStop,1000);をやりたい 15} 16//各ボタンにピアノの音を鳴らす 17for(i=0;i<6=;i++;){ 18 ("i".tostring).Eventlistener("click",playPiano); 19}

試したこと

function playPiano(){
//音が重ならないようにする
Audio.stop;
const timer1 =setTimeout(audioStop,1000);
Audio.play;
clearTimeout(timer1);
setTimeout(audioStop,1000);
//ここで同じsetTimeIDでもう一回setTimeout(audioStop,1000);をやりたい
}
の場合、1秒以内に連続でボタンを押すと後に押したボタンの音が途切れます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

  • 変数 timer1 をグローバル変数にする
  • 変数 timer1 が無効な値かどうかを区別できるようにする。null とか。 初期値はその値。
  • playPiano() では、変数 timer1 が有効な値だった場合は clearTimeout() する
  • audioStop() では、変数 timer1 を無効な値にする

投稿2023/05/28 22:03

int32_t

総合スコア21929

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

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

mochisio

2023/05/29 02:42

ありがとうございます。 この回答を踏襲しつつ、playPiano()の中身を //音を鳴らす関数 function playPiano(){ if(timer1!=null){ clearTimeout(timer1); } timer1 =setTimeout(audioStop,1000); //音が重ならないようにする audio.pause(); audio.currentTime = 0; audio = new Audio(sound.file); } としたら解決いたしました。 ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問