es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

JavaScript MIDI API permite a los desarrolladores web acceder y controlar dispositivos MIDI desde un navegador. Al utilizar esta interfaz, los programadores pueden crear aplicaciones y sitios web interactivos que utilizan la funcionalidad de los dispositivos MIDI, como controladores de música, teclados, sintetizadores y otros instrumentos electrónicos. Además, Chrome es un navegador web desarrollado por Google que es compatible con la API MIDI de JavaScript y ofrece una amplia gama de características y herramientas para la programación y desarrollo de sitios web.

Tengo que enviar un mensaje MIDI con Chrome a un plugin en Reaper:

[0xB1, 11, 10] ctrl 11 en el canal 1 valor=10

El puerto corresponde en mi casa a mi puerto MidiThrough 0.

Es probable que el plugin en lenguaje Faust reciba y procese este mensaje MIDI.

¿Mi código es correcto? ¿Por qué no funciona?

newPort = '6FF5590044F4859ED50C5167BCFE9700A1798E39AA55A628E86D39011FAECD5D';
navigator.requestMIDIAccess()
  .then(function(access) {
    midiSend(access, 20, 64, 64);
  });

function midiSend(mAccess, x, y, z) {
  //var midiMessage = [0xB1, 11, 10];    // nota en Do medio, velocidad máxima
  var midiMessage = [0xB1, 11, 10];
  var output = mAccess.outputs.get(newPort);
  console.log("Puerto de salida " + output.id + " Mensaje " + midiMessage);
  output.send(midiMessage);
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El código proporcionado es parcialmente correcto, ya que envía un mensaje MIDI con los valores [0xB1, 11, 10] al puerto de salida newPort. Sin embargo, no especifica el puerto “MidiThrough port 0” como se solicitó en la pregunta.

    Para enviar el mensaje al puerto deseado, debes cambiar la variable newPort por el ID del puerto deseado, que en este caso es “MidiThrough port 0”. Puedes obtener el ID de cada puerto disponible iterando a través de las salidas utilizando el objeto MIDIAccess:

    newPort = "MidiThrough port 0";
    
    navigator.requestMIDIAccess()
      .then(function(acceso) {
        var salidas = acceso.outputs.values();
        var salida = null;
        for (var salida = salidas.next(); salida && !salida.done; salida = salidas.next()) {
          if (salida.value.name == newPort) {
            midiSend(acceso, salida.value, 11, 10);
            break;
          }
        }
      });
    
    function midiSend(accesoMIDI, salida, x, y) {
      var mensajeMIDI = [0xB0, 11, 10];
      salida.send(mensajeMIDI);
    }
    

    En este código, iteramos a través de las salidas disponibles hasta encontrar aquella con el nombre deseado, y luego llamamos a la función midiSend con el objeto de acceso, el objeto de salida y los valores 11 y 10 para el segundo y tercer bytes del mensaje MIDI. El primer byte en este caso es 0xB0, que corresponde a mensajes de Control Change en el canal 1, a diferencia de 0xB1 (como en el código original) que sería para el canal 2.

    Ten en cuenta que la función midiSend se simplifica para recibir solo los objetos de acceso y salida, y los valores x e y. También ten en cuenta que el mensaje enviado es un mensaje de Control Change (0xB0) en lugar de un mensaje Note On (0x90). Esto debería funcionar siempre y cuando el plugin esté programado para recibir mensajes de Control Change en el canal y número de controlador correctos.

Comments are closed.