2016-09-05 2 views
1

Ich habe ein Lied, bestehend aus Intro (I), ein Teil zu looped (L) und endet (E). Ich will nicht, dass das Ende überhaupt gespielt wird, dh Audiodatei Song = I + L + E, Audio gespielt = I + L + L + ...Decode Audio und spielen Intro dann looped Teil

Ich schaffte es, das zu tun, indem ich das Intro und trennte die Schleife in zwei Dateien, aber ich möchte das "on-the-fly" auf der Client-Seite tun.

Wie mache ich das?

Antwort

1

Web Audio API bietet AudioBufferSourceNode.loopStart und AudioBufferSourceNode.loopEnd (source) genau dafür. Sie müssen daran denken, auch einzustellen.

0

Wenn Sie die Datei mit Web Audio wiedergeben möchten (z. B. mit decodeAudioData() in einen AudioBuffer decodieren und dann den Sound mit BufferSourceNodes abspielen), können Sie einfach zwei BufferSource-Knoten im Puffer mit verschiedenen Offsets anzeigen, und Looping der zweite.

Web Audio verwendet Doubles (nicht Floats) - daher ist die Aussage "das ist viel genauer als Float-Sekunden" nicht immer richtig (Doppelpunkte haben etwa 15 Dezimalstellen Genauigkeit). (Hängt natürlich vom absoluten Wert ab.) Es ist mehr als genau genug, um mit Sample-Genauigkeit zu spielen (d. H. Um nicht zwischen den Werten zu glänzen); wenn Sie besorgt sind, nur überblenden zwischen ihnen.

Wenn Ihr Ziel wirklich nur eine Audiodatei mit diesem Teil in looped zu produzieren ist, ist das ein bisschen anders; aber es klingt wie du willst Wiedergabe.

Verwandte Themen