8 votes

API audio Web : programmation des sons et exportation du mixage

J'ai consulté la documentation de l'API audio Web et les didacticiels, mais je n'ai pas encore trouvé comment aborder ce problème.

Imaginons que je charge quelques fichiers wav via XMLHttpRequest et que je crée ensuite des sources tampons. Je sais que je peux planifier précisément le moment où la lecture commence. Mais que faire si je ne veux pas les lire, mais plutôt les stocker et les planifier dans un tampon.

Un exemple concret : Je veux créer un séquenceur simple où l'on peut programmer des batteries et ensuite exporter le mixage complet en wav (sans l'enregistrer en utilisant RecorderJS ou autre). Des idées, des bibliothèques ?

5voto

Kevin Ennis Points 6061

Je viens de faire quelque chose un peu comme ça.

Pour l'essentiel, vous devrez créer un contexte hors ligne :

var offline = new webkitOfflineAudioContext(numChannels, lengthInSamples, sampleRate)

Vous devrez recréer toutes vos BufferSources en utilisant ce nouveau contexte :

var newBufferSource = offline.createBufferSource();
newBufferSource.buffer = someAudioBuffer;
newBufferSource.connect(offline.destination);

Ensuite, programmez votre lecture :

newBufferSource.start(offline.currentTime + 10);

Ensuite, il faut se lier à la complete pour votre rendu hors ligne :

offline.onComplete = function( ev ){
  doSomething(ev.renderedBuffer);
}

Ensuite, commencez le "rendu" :

offline.startRendering();

Une fois que vous avez ev.renderedBuffer vous pouvez en faire ce que vous voulez. Dans mon application, j'ai un encodeur WAV que j'ai fini par écrire moi-même - mais vous pourriez modifier Recorder.js pour faire la même chose assez facilement.

Juste une mise au point : webkitOfflineAudioContext est réservé à Chrome pour le moment. Voici un lien si vous êtes intéressé : OfflineAudioContext

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X