¿Cómo enviar mensajes MIDI en Perl?
Estoy intentando enviar mensajes MIDI usando Perl. Básicamente quiero cambiar el instrumento de parche. Como no estoy generando un archivo, sino que solo lo estoy reproduciendo, estoy utilizando Win32::MIDI
ya que es el único módulo que funciona para lo que necesito, pero no tiene un método de instrumento de parche, por lo tanto me quedo con writeMIDI
que requiere el envío de un mensaje MIDI.
Por ejemplo:
…
evento note_on, canal 1 (0x90), velocidad (127), nota (127), nulo (0x00);
my $data_on = "\x00\127\127\x90";
evento note_off, canal 1 (0x80), velocidad (127), nota (127), nulo (0x00);
my $data_off = "\x00\127\127\x80";
$midi_obj->writeMIDI(unpack("N",$data_on));
sleep(2);
$midi_obj->writeMIDI(unpack("N",$data_off));
$midi_obj->writeMIDI(unpack("N","\x00\C18")); <– NO FUNCIONA cambia el instrumento en el canal #1 al parche #8
Estoy intentando hacer un ‘Cambio de programa’ en el Canal 1, número de parche (por ejemplo, 8) ya que esto cambia el instrumento de parche.
Como dice en mi referencia:
A.1. Mensajes de voz del canal:
Instruir al instrumento receptor a asignar sonidos particulares a su voz.
Encender y apagar notas.
Modificar el sonido de la nota o notas actualmente activas.
Mensaje de Voz Byte de Estado Byte de Datos1 Byte de Datos2
Note off 8x Número de tecla Velocidad del apagado de la nota
Note on 9x Número de tecla Velocidad del encendido de la nota
Presión de tecla politónica Ax Número de tecla Cantidad de presión
Cambio de control Bx Número del controlador Valor del controlador
Cambio de programa Cx Número del programa Ninguno
Presión del canal Dx Valor de presión Ninguno
Bendición de tono Ex MSB LSB
Notas: `x' en el valor hexadecimal del byte de estado representa un número de canal.
La referencia que estoy utilizando es:
https://users.cs.cf.ac.uk/Dave.Marshall/Multimedia/node158.html
davy.ai
Enviando mensajes MIDI usando Perl
Problema
El problema está relacionado con el envío de mensajes MIDI utilizando Perl para cambiar el instrumento de parche. El objetivo es cambiar el instrumento en el Canal 1 al parche #8 utilizando el módulo
Win32::MIDI
.Solución
Dado que no existe un método de instrumento de parche en el módulo, necesitamos utilizar la función
writeMIDI
para enviar un mensaje MIDI. En este caso, necesitamos enviar un mensaje de ‘Cambio de Programa’ en el Canal 1, con el número de parche (por ejemplo, 8), ya que esto cambia el instrumento de parche.Aquí tienes un ejemplo de cómo enviar un mensaje MIDI para cambiar el instrumento:
Ten en cuenta que en el ejemplo anterior,
"\x00"
es un marcador de posición para el valor de tiempo, ya que el eventoCambio de Programa
no requiere un valor de tiempo.Conclusión
Esta solución demuestra cómo enviar mensajes MIDI utilizando Perl para cambiar el instrumento de parche. Al utilizar la función
writeMIDI
, podemos enviar diferentes mensajes MIDI para lograr varios objetivos.