2017-03-25 5 views
0

J'essaye d'écrire un programme qui va prendre une phrase et jouer le clip sonore de chaque mot. Je suis tout à fait nouveau à stackoverflow et javascript/html donc je suis désolé que ce formatage est poubelle. J'ai rencontré le problème que les mots juste joué ensemble, et pour résoudre ce problème, j'ai ajouté un .onended() mais cela ne l'a corrigé que pour les deux premiers mots et l'utilisation d'une boucle n'a pas fonctionné. Merci pour toute aide. Voilà ce que j'ai actuellement:Lecture audio l'une après l'autre

<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 } 
 
    } 
 
});

Et c'est ce que j'avais avant, quand je les ai mis en boucle tout et ils ont tous joué ensemble:

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

+0

Juste vérifier. Y a-t-il Java impliqué? Ou est-ce tout JavaScript. S'il n'y a pas de Java, vous pouvez supprimer la balise javasound en tant que Java. –

Répondre

0

Lorsque vous avez créé l'audio pour le mot suivant, var sp = new Audio (splitted[i] + '.m4a'), un nouveau prisonnier L'instance audio est créée. Par conséquent, le deuxième mot n'a pas l'ensemble de gestionnaire .onended. C'est pourquoi il ne joue que les deux premiers mots. Pour corriger, vous devez ajouter un écouteur ended pour chaque fichier audio que vous créez.

+0

Je ne comprends pas très bien ce que vous voulez dire, pourriez-vous élaborer ou donner un exemple? Devrait-il être fait manuellement? – Suoria

+0

Votre réponse est ce que je veux dire. Chaque fois que vous créez un nouvel audio ('var sp = new Audio (...)'), vous devez définir un écouteur 'onended' correctement. :) – Thai

0

Si j'ai raison, cherchez-vous la synthèse vocale? Alors laissez-moi vous suggérer responsiveVoiceJS. Cette bibliothèque javascript peut prendre les données de votre champ de saisie et peut les convertir en paroles sans créer de voix séparée pour chaque syllabe. C'est la manière facile.

ressources: responsivevoice.org

+0

Cependant, je veux utiliser ma voix. Désolé si ce n'était pas clair. – Suoria

0

J'ai trouvé une solution en utilisant une fonction récursive:

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 } 
 
    } 
 
});

Nous vous remercions de l'aide de toute façon!