2010-07-30 13 views
3

J'ai besoin de synchroniser le texte et l'audio sur de nombreuses pages Web.Surbrillance du texte avec synchronisation audio dans Jquery

Pendant la lecture de l'audio, le texte doit être mis en surbrillance phrase par phrase (pas par mot ou par caractère, donc la synchronisation est nécessaire uniquement pour le début de la phrase). Je voudrais ne pas utiliser une solution flash seulement et je préfère utiliser quelque chose de plus convivial pour le HTML.

Je pensais que d'utiliser une combinaison de deux plug-ins:

Je pourrais alors écrire un script jquery pour faire défiler sur les différents phrases. Le premier problème est que JPlayer n'a que des événements joués en pourcentages et pas des événements précis, donc je devrais diviser l'audio complet du texte parlé en plus petits fichiers audio pour chaque phrase (long travail d'édition et gestion de précharge nécessaire).

Existe-t-il une meilleure solution pour cela? Devrais-je revenir à la solution SWF complète plus facile?

+1

Il est basé sur un pourcentage non seulement - regardez ici: http://github.com/happyworm/jPlayer/blob/master/jquery.jplayer/jquery.jplayer .js # L600 .. il y a une variable 'playedTime' et une variable' totalTime' (comme les 4ème et 5ème arguments de votre callback) – James

Répondre

3

Ce que vous pouvez faire est de scripter le scénario en javascript. Lorsque l'audio commence à être lu, vous définissez des délais d'attente pour chaque action sur la ligne temporelle. Cela nécessitera votre audio à jouer sans aucun retard, bien sûr.

Il ressemblerait à quelque chose comme ceci:

<div>one</div> 
    <div>two</div> 
    <div>three</div> 

<script> 
// this is the timeline 
var actions = [ { time : 1, action : function() { $('div:eq(0)').css('color','red') } }, 
       { time : 1.5, action : function() { $('div:eq(1)').css('color','green') } }, 
       { time : 2, action : function() { $('div:eq(2)').css('color','blue') } } ]; 

$(document).ready(function() { 
     // execute the timeline 
     for(var i in actions) { 
      setTimeout(actions[i].action, actions[i].time * 1000); 
     } 
}); 

</script> 
+0

Commentaire de ALTAF HUSSAIN: "@Marnix van Valen - Vraiment cool snippet marnix, juste ce dont j'ai besoin , Je me demande si la vidéo est chargée à partir d'un serveur (tag vidéo html5), alors le texte commencera à apparaître avant que la vidéo ne puisse se charger De toute façon, il faut contourner cela, comme avoir un préchargeur ou quoi que ce soit. –

+0

Pour la vidéo HTML5, vous disposez d'une [richesse des événements et propriétés] (http://www.w3.org/2010/05/video/mediaevents.html) que vous pouvez utiliser pour synchroniser les actions. Par exemple, vous pouvez vérifier la propriété 'currentTime' à intervalles réguliers et l'utiliser pour déclencher des actions dans le scénario. Cela vous permettrait également de compenser tout retard dans le chargement de la vidéo. –