2017-03-25 7 views
0

私は、文章を取り上げて各単語のサウンドクリップを再生するプログラムを作成しようとしています。私は非常にstackoverflowとjavascript/htmlに新しいですので、このフォーマットはごみですごめんなさい申し訳ありません。私は単語がちょうど一緒に演奏されるという問題に遭遇し、これを修正するために.onended()を追加しましたが、これは最初の2つの単語に対してのみ固定され、ループを使用することは機能しません。何か助けてくれてありがとう。これは私が現在持っているものです。オーディオを次々と再生する

<body> 
 
What would you like me to say? 
 
<input type="text" id="words"/> 
 
<script> 
 
document.getElementById('words').addEventListener('keypress', function (e) { 
 
    if (e.which === 13) { 
 
\t \t var sentence = document.getElementById("words").value; 
 
\t \t var splitted = sentence.split(" "); 
 
\t \t var length = splitted.length; 
 
\t \t var i = 1; 
 
\t \t var sp = new Audio (splitted[0] + '.m4a'); 
 
\t \t sp.play(); 
 
\t \t sp.onended=function(){ 
 
\t \t \t if(i<length){ 
 
\t \t \t var sp = new Audio (splitted[i] + '.m4a'); 
 
\t \t \t sp.play(); 
 
\t \t \t i++; 
 
\t \t \t } 
 
\t \t } 
 
    } 
 
});

そして、私はそれらすべてをループし、それらのすべてが一緒にプレイしたときに、これは、私が前に持っていたものです:

for(i=0;i<length;i++){ 
 
var sp = new Audio(splitted[i] + 'm4a'); 
 
sp.play(); 
 
}

+0

ただチェックしてください。 Javaが関わっていますか?またはこれはすべてJavaScriptです。 Javaがない場合は、javasoundタグを言語Javaの場合と同様に削除することができます。 –

答えて

0

次の単語のオーディオを作成したときは、var sp = new Audio (splitted[i] + '.m4a')、新しいpris tine Audioインスタンスが作成されます。したがって、2番目の単語には.onendedハンドラセットがありません。それが最初の2つの単語だけを演奏する理由です。

修正するには、作成するオーディオごとにリスナーをended追加する必要があります。

+0

私はあなたが何を意味しているのかかなり分かりません。手動で行う必要がありますか? – Suoria

+0

あなたの答えは私が意味するものです。新しいオーディオ( 'var sp = new Audio(...)')を作成するたびに、 'onended'リスナを適切に設定する必要があります。 :) – Thai

0

もし私が正しいのであれば、スピーチテキストをお探しですか?それから私はあなたにresponsiveVoiceJSを提案させてください。このjavascriptライブラリは、入力フィールドからデータを取得し、各音節ごとに別々の声部を作成することなく、それを音声に変換することができます。それは簡単な方法です。

リソース:responsivevoice.org

+0

しかし、私は私の声を使いたい。申し訳ありませんが、それが不明な場合。 – Suoria

0

私は、再帰関数を使用して修正を発見した:

document.getElementById('words').addEventListener('keypress', function (e) { 
 
    if (e.which === 13) { 
 
\t \t var sentence = document.getElementById("words").value; 
 
\t \t var splitted = sentence.split(" "); 
 
\t \t var length = splitted.length; 
 
\t \t var i = 0; 
 
\t \t testFunction(); 
 
\t \t function testFunction(){ 
 
\t \t \t if(i<length){ 
 
\t \t \t \t var sp = new Audio (splitted[i] + '.m4a'); 
 
\t \t \t \t sp.play(); 
 
\t \t \t \t i++; 
 
\t \t \t \t sp.onended=function(){ 
 
\t \t \t \t \t testFunction(); 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t } 
 
    } 
 
});

はとにかく助けをありがとう!

関連する問題