Gibt es einen Weg, um die Web-Audio-API zum Beispiel audio schneller als in Echtzeit?

Ich bin Herumspielen mit der Web Audio API & versucht, einen Weg finden, importieren Sie eine mp3 (also das ist nur bei Chrome), und generieren Sie eine Wellenform auf einer Leinwand. Kann ich dies in Echtzeit, aber mein Ziel ist, diese schneller als in Echtzeit.

Allen Beispielen, die ich habe finden können, beinhalten Lesen Sie den Frequenz-Daten aus einer Analysator-Objekt in eine Funktion angebracht die onaudioprocess Veranstaltung:

processor = context.createJavascriptNode(2048,1,1);
processor.onaudioprocess = processAudio;
...
function processAudio{
    var freqByteData = new Uint8Array(analyser.frequencyBinCount);
    analyser.getByteFrequencyData(freqByteData);
    //calculate magnitude & render to canvas
}

Scheint es aber, dass analyser.frequencyBinCount wird nur aufgefüllt, wenn der sound abgespielt wird (etwas über der Puffer gefüllt wird).

Was ich will, ist in der Lage sein manuell/programmatisch Schritt für Schritt durch die Datei so schnell wie möglich zu generieren Leinwand Bild.

Was ich habe, so weit ist diese:

$("#files").on('change',function(e){
    var FileList = e.target.files,
        Reader = new FileReader();

    var File = FileList[0];

    Reader.onload = (function(theFile){
        return function(e){
            context.decodeAudioData(e.target.result,function(buffer){
                source.buffer = buffer;
                source.connect(analyser);
                analyser.connect(jsNode);

                var freqData = new Uint8Array(buffer.getChannelData(0));

                console.dir(analyser);
                console.dir(jsNode);

                jsNode.connect(context.destination);
                //source.noteOn(0);
            });
        };
    })(File);

    Reader.readAsArrayBuffer(File);
});

Aber getChannelData() gibt immer eine leere typisiertes array.

Jede Einsicht wird geschätzt - auch wenn es stellt sich heraus, es kann nicht getan werden. Ich glaube, ich bin der einzige, der das Internet nicht wollen, um Dinge zu tun, in Echtzeit.

Dank.

  • schneller als Echtzeit?
  • ya - schneller als in Echtzeit. Wie in, wenn die Dauer der Strecke beträgt 5 Minuten, ich will nicht 5 Minuten zu warten, bis das Signal erzeugt. Ich möchte, um es zu verarbeiten, so schnell wie möglich (hoffentlich wenigen Sekunden)
  • füllen Sie die Uint8Array falsch. Finden Sie eine funktionierende Lösung hier.
InformationsquelleAutor Quasipickle | 2011-11-10
Schreibe einen Kommentar