2017-06-04 2 views
1

Ich versuche, MP3-Songs mit Knoten js und Socket io in Echtzeit zu puffern. Ich unterteile die MP3 im Grunde in Byte-Segmente und sende sie an die Client-Seite, wo die Web-Audio-API sie empfängt, dekodiere und beginne, sie abzuspielen. Das Problem hierbei ist, dass der Sound nicht kontinuierlich abgespielt wird. Es gibt eine Lücke von etwa 0,5 Sekunden zwischen jedem gepufferten Segment. Wie kann ich dieses ProblemWeb-Audio-API Ton nicht kontinuierlich

// buffer is a 2 seconds decoded audio ready to be played 
// the function is called when a new buffer is recieved 
function stream(buffer) 
{ 
    // creates a new buffer source and connects it to the Audio context 
    var source = context.createBufferSource(); 
    source.buffer = buffer; 
    source.connect(context.destination); 
    source.loop = false; 
    // sets it and updates the time 
    source.start(time + context.currentTime); 

    time += buffer.duration; // time is global variable initially set to zero 
} 

Der Teil lösen, wo Strom genannt wird

// where stream bufferQ is an array of decoded MP3 data 
    // so the stream function is called after every 3 segments that are recieved 
    // the Web audio Api plays it with gaps between the sound 
    if(bufferQ.length == 3) 
    { 
     for(var i = 0, n = bufferQ.length ; i < n; i++) 
     { 
       stream(bufferQ.splice(0,1)[0]); 
     } 
    } 

sollte ich eine andere API andere als die Web-Audio-API verwenden, oder gibt es eine Möglichkeit, meine Puffer zu planen, so dass es würde kontinuierlich gespielt werden?

+0

Wann wird 'stream()' aufgerufen? – guest271314

+0

@ guest271314 Entschuldigung, ich habe diesen Punkt nicht geklärt. Ich habe meine Antwort bereits bearbeitet. Kannst du es dir bitte anschauen? –

+0

Sie könnten die nächste 'bufferSource' am Ende der vorherigen' bufferSource' starten. Sie können auch 'MediaSource' und' updateend' verwenden, um eine 'ArrayBuffer'-Darstellung eines Medienquellensegments an die Medienwiedergabe anzuhängen, siehe [HTML5-Audio-Streaming: Latenz präzise messen?] (Https://stackoverflow.com/q/ 38768375 /) – guest271314

Antwort

0

Es ist ein Problem mit MP3-Dateien, jede MP3-Datei hat ein paar Frames von Stille am Anfang und Ende. Wenn Sie WAV-Dateien oder Zeit verwenden, starten und stoppen Sie jede Datei ordnungsgemäß.

Verwandte Themen