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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

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

Q&A

解決済

2回答

2428閲覧

サイトで曲再生の時、音ズレをなくしたいです

taishi1999

総合スコア99

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

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

0グッド

2クリップ

投稿2015/11/12 06:36

編集2015/11/12 07:29

曲のテンポと同時に英単語を切り替えていきたいのですが、音ズレがあったらダメなので、音ズレを防ぐ方法を教えてください
曲と単語、ボタンを押して再生です。

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

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

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

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

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

guest

回答2

0

ベストアンサー

AudioオブジェクトのcurrentTimeプロパティを利用してはどうですか?
単語の区切りがテンポに合っているのであれば、
setIntervalなどでcurrentTimeを取得して、
そのタイミングに合う単語に切り替えるといった方法です。

JavaScript

1 2var audio = new Audio('sound.mp3'); 3var tempo = 60000 / 120; 4var words = ['this', 'is', 'a', 'pen']; 5 6setInterval( 7 function(){ 8 var frame = Math.floor(audio.currentTime / tempo); //再生位置を小節に変換する 9 var current_word = words[frame]; //現在の単語を取得 10 11 console.log(frame, current_word); //ここで単語を使った処理をする 12 13 }, 14 tempo 15); 16 17audio.play(); 18

音声の再生開始時にsetIntervalを開始しても、
バッファされるまでは再生が開始されないので、
ブラウザや環境によっては再生開始のタイミングが遅れる場合があります。
なので、音声と処理を同期させるには、
音声の再生位置を取得してそれに合わせる方法がベターかと思います。

ただし、音声がバッファされないうちはにcurrentTimeが正常に取得できない場合もあるので、
Audioオブジェクトのbufferedプロパティやseekableプロパティをチェックして、
再生が開始されたタイミングでsetIntervalを起動するのがより確実です。

投稿2015/11/17 22:05

miwakazuo

総合スコア52

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

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

0

質問の意味がよくわかりませんが、曲の再生と同時にsetIntervel()とか使ってみたらどうですか?
曲のテンポ(BPM)を調べて、BPM120だったら1分間に120拍=1秒に2拍=1拍が500ミリ秒ですから、

javascript

1BPM = 120; 2w = 60000 / BPM; 3haku = 0; 4shousetu = 0; 5voice1 = new Audio("voice1.mp3"); 6voice2 = new Audio("voice2.mp3"); 7 8setInterval(function(){ 9 if(shousetu == 4 && haku == 0) voice1.play(); 10 else if(shousetu == 8 && haku == 4) voice2.play(); 11 12 haku ++; 13 if(haku == 5){ 14 haku = 0; 15 shousetu ++; 16 } 17}, w);

とか。

投稿2015/11/13 05:04

otftrough

総合スコア476

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

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

taishi1999

2015/11/14 07:45

それでやってもsafariで再生したときに音ズレがありません?
waritocomatta

2015/11/17 06:13

http://qiita.com/isseium/items/12b215b6eab26acd2afe こちらの記事はどうでしょうか? 私は、ゲームを作るときによく使う短いSEはこれで再生しています。 mp3などの音源をbase64の文字データに変換して使います。 また、音ズレはこの方法ではほとんどないと思いますが... 重い端末では、べつにJavaScriptではなくても音ズレはつきものです。 それと、古いSafariでは一度に扱えるmp3ファイルは一つまでで、この方法なら 複数の音を再生できるかもしれません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問