2016-05-06 3 views
1

Позвольте мне начать с того факта, что я довольно новичок в разработке веб-разработки и вряд ли использую socket.io более недели или двух. Я попытался воспроизвести аудио из ArrayBuffer, полученного из socket.io, соответствующего передаче файла MP3 с использованием Web Audio API. ArrayBuffer успешно декодируется WebAudio, но единственной проблемой, с которой я столкнулся, является то, что она занимает около 10 секунд после получения начального фрагмента ArrayBuffer, чтобы начать воспроизведение этой песни.Задержка веб-аудио API при воспроизведении при использовании socket.io для получения ArrayBuffer с сервера

Я понимаю, что он ждет, пока весь файл будет передан, а затем начнется воспроизведение? Есть ли лучший способ играть на треке, как только придет первый набор кусков?

Это, как я использую его в данный момент:

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

ответ

1

Да, вы можете вам <audio> и createMediaElementSource(audio). Это имеет преимущества самостоятельного решения с загрузкой :)

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/

Другой вариант, это просто самый простой, если вы на самом деле не нужно WebAudio:

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

Да я закончил с использованием второй вариант, когда я понял, что WebAudio немного более мощный, чем мой вариант использования. – nitimalh