tutorial the play new examples abstracting javascript html5 audio web-audio

javascript - the - Cómo desplazar/modular la frecuencia del búfer de audio con Web Audio API



web audio api play mp3 (2)

Estoy experimentando con Web Audio API y mi objetivo es crear una guitarra digital donde cada cuerda tenga una fuente de sonido inicial de una guitarra real tocando la cuerda abierta y luego me gustaría generar el resto de los sonidos de la posición del traste dinámicamente. Después de algunas investigaciones sobre el tema (todo esto es bastante nuevo para mí), parecía que esto podría lograrse alterando la frecuencia de la muestra de sonido fuente.

El problema es que he visto muchos algoritmos para alterar las ondas sintetizadas sin nada que altere la frecuencia de una muestra de audio. Aquí hay una muestra de mi código para dar una mejor idea de cómo estoy tratando de implementar esto:

// Guitar chord buffer var chordBuffer = null; // Create audio context var context = new webkitAudioContext(); // Load sound sample var request = new XMLHttpRequest(); request.open(''GET'', ''chord.mp3'', true); request.responseType = ''arraybuffer''; request.onload = loadChord; request.send(); // Handle guitar string "pluck" $(''.string'').mouseenter(function(e){ e.preventDefault(); var source = context.createBufferSource(); source.buffer = chordBuffer; // Create javaScriptNode so we can get at raw audio buffer var jsnode = context.createJavaScriptNode(1024, 1, 1); jsnode.onaudioprocess = changeFrequency; // Connect nodes and play source.connect(jsnode); jsnode.connect(context.destination); source.noteOn(0); }); function loadChord() { context.decodeAudioData( request.response, function(pBuffer) { chordBuffer = pBuffer; }, function(pError) { console.error(pError); } ); } function changeFrequency(e) { var ib = e.inputBuffer.getChannelData(0); var ob = e.outputBuffer.getChannelData(0); var n = ib.length; for (var i = 0; i < n; ++i) { // Code needed... } }

Así que ahí lo tiene - Puedo reproducir el sonido bien pero estoy un poco perdido cuando se trata de crear el código en la función changeFrequency que cambiaría la frecuencia de las muestras de acordes, por lo que sonaba como otra posición de traste en la cuerda. Cualquier ayuda con este código sería apreciada o las opiniones sobre si lo que estoy tratando de hacer es incluso posible.

¡Gracias!


playbackRate cambiará el tono del sonido, pero también su tiempo de reproducción.

Si quiere cambiar solo el tono, quizás pueda usar un pitch shifter. Comprueba aquí la implementación de mi cambio de tono de JavaScript y su uso con un JavascriptNode en este complemento