2016-05-06 1 views
1

Laissez-moi commencer par le fait que je suis relativement nouveau dans le jeu de développement web et que j'utilise à peine socket.io depuis plus d'une semaine. J'ai essayé de lire l'audio à partir du ArrayBuffer reçu de socket.io correspondant à un transfert de fichiers MP3 en utilisant Web Audio API. Le ArrayBuffer est décodé avec succès par WebAudio mais le seul problème que j'ai est qu'il prend environ 10 secondes après avoir reçu le morceau initial du ArrayBuffer pour commencer à jouer cette chanson.Retard de l'API Web Audio lors de la lecture de socket.io pour recevoir ArrayBuffer depuis le serveur

Ma compréhension est qu'il attend que le fichier entier soit diffusé, puis commence la lecture ?? Y a-t-il une meilleure façon de jouer sur la piste dès l'arrivée des premiers morceaux?

Voici comment je l'utilise actuellement:

socket.on('browser:buffer', function(data) { 
      console.log(data.buffer); 
      source = audioContext.createBufferSource(); 
      audioContext.decodeAudioData(data.buffer, function(decodedData) { 
       source.buffer = decodedData; 
       source.connect(audioContext.destination); 
       source.loop = true; 
       source.connect(audioContext.destination); 
       source.start(0); 
      }); 
     }, function(error) { 
      console.error("decodeAudioData error", error); 
     }); 

Répondre

1

Oui, vous pouvez vous le <audio> et le createMediaElementSource(audio). Cela a des avantages de l'auto-traiter le téléchargement :)

var audio = new Audio("shoot.mp3"); 
var context = new AudioContext(); 
var source = context.createMediaElementSource(audio); 
audio.loop = true; 
source.connect(context.destination); 
audio.play(); 

https://jsfiddle.net/u8j4h4L4/1/

Autre option est juste le plus simple si vous ne pas réellement besoin WebAudio:

var sound = new Audio("myaudio.mp3"); 
sound.play() 
+0

Oui, je fini par utiliser la deuxième option quand j'ai réalisé WebAudio est un peu plus puissant que mon cas d'utilisation. – nitimalh