[Hilo oficial] MidiEditor CUSTOM

(en proceso de edición para corregir y añadir cosas)

Buenas,

En este foro "Para hablar de música, qué si no?" se echa en falta bastante el tema de la creación y de la composición de música, me parece a mí... Y no deberíamos caer en el error de "elotrolado es una página de videojuegos" pues no es así, abarca mucha mas cosas y al final, que esta comunidad sea mas o menos grande, es por nuestra participación, dentro de la cual, nuestra aportación puede poner su granito de arena.

Y obviamente, dentro de EOL puede haber gente que como yo, es programadora a ratos libres y épocas [carcajad] , le gusta la música y aunque sea "medio manco" pues hace sus pinitos... ayudado en este caso, de un programa que le permite tocar, grabar lo tocado, editarlo y retocarlo y posteriormente crear un MP3, FLAC o lo que mas rabia os de, superando en el proceso la "manquedad", etc.

¿Un editor Midi?¿Y que es MIDI?

MIDI es un estandar. Si quieres saber más, en la Wikipedia puedes encontrar mas información, por ejemplo. Pero baste con saber que permite que un dispositivo musical se pueda conectar con otro y controlarle o ser controlado, mediante eventos.
La especificación MIDI permite 16 canales y la manera de hacer esto es mediante una serie de eventos que en unos casos afecta a un canal y en otros, o todos o ninguno :p , según se implemente. Por ejemplo, las notas tienen un evento de encendido y otro de apagado para sonar o dejar de sonar en un determinado canal y con un atributo de "velocidad" que suele determinar el volumen al que suena. Un editor midi como el que tratamos, permite recibir esos eventos para poder grabarlos, editarlos y posteriormente darle salida hacia otros dispositivos o directamente como samples de audio, una vez tratados y procesados. Y tambien hacerlo "en vivo", a tiempo real. Hoy día hay teclados bastante asequibles que se conectan a nuestro ordenador mediante USB y facilitan el tema, con lo cual: mola.



Un poco de historia personal y sobre los orígenes del desarrollo

A quien no le gustaría "tocar como los ángeles". Quién no querría tocar la guitarra eléctrica o un organo electrónico o lo que fuera, como los maestros...
pero es algo que no solo requiere un talento y cualidades que uno puede no tener (yo toco de "oído" y soy medio sordo y peor, me cuesta entender las palabras por debajo de un determinado volumen y ya no digamos si hay ruido de fondo...así que imaginad), si no conocimientos y práctica que unido a bastante sacrificio pues... da como resultado que muchos ni nos esforzamos [+risas] .

La cosa está que teclado tenía en casa, pero no podía conectarlo al ordenador y era un poco mucho viejuno. Por edad, etc, no me planteaba darme a un instrumento (lo que mas me gustaría es tocar la guitarra eléctrica), ni recibir clases, pero sí veía la posibilidad de componer cosillas mas o menos sencillas y divertirme (alguna cosa había compuesto ya y residía solo en mi cabeza: nada de partituras aunque a un nivel muy principiante, podría escribir e interpretar) y miré un poco el tema de programas libres, con código fuente disponible por si me daba por ahí... y me pillé un CASIO LK-280, tirándome un poco a la piscina: este teclado tiene 61 teclas (que se iluminan) sensibles al tacto, la conexion midi que necesitaba (por puerto USB, mooola...), te permite grabar en el propio instrumento, tocarlo de forma autónoma y lo de la iluminación de las teclas podía servirme para aprender cosillas si me daba por ahí... pero bueno: no me ha dado, la verdad [jaja]

Esto fue hace unos años, claro. Y el programa con el que empecé a hacer mis pinitos, en concreto, se llamaba Midieditor (enlace a la página del autor original).

Este programa, open source, permite grabar desde dispositivo MIDI y reproducir en dispositivo MIDI, tanto en Windows como en Linux. Parece que el autor lleva años dejando de lado el programa (y de hecho, no creo que incorpore de forma oficial la versión del programa que os traigo aquí). Yo trabajo desde Windows (y por tanto, mi versión también y por varias razones, no voy a mirar ni la posibilidad de portarlo a Linux... si es que es posible, por cosas que veréis después). La cuestión es que Windows soporta como salida GM (General Midi), pero los sonidos del banco de instrumentos... como que no. Y encima no soporta ciertos efectos (eventos de control en realidad) MIDI.

Mirando por ahí, encontré una solución parcial: resulta que en VLC podía añadir un codec de audio de algo llamado "Fluidsynth" que permitía usar unos archivos con "bancos de instrumentos" de extensión .sf2 y ya la cosa mejoraba... pero imaginad un poco la locura: yo tocaba en mi instrumento, que suena de una manera. Grabo en MIDI y pruebo en el editor con el soporte GM de Windows y suena bastante distinto. Y luego a VLC, que ya la repanocha (podía ser incluso un instrumento distinto) que eso me permitía "grabar" ese audio en MP3, por poner el caso. Todo ello con problemas de estabilidad, de que el Midi del editor es diferente y había bugs y problemas de implementación, etc, por solucionar.

Un tiempo después, vi que unos italianos habían hecho una especie de driver, que usando esos mismos bancos de instrumentos, ya me permitía una reproducción y exportación a MP3 mejor. Si alguien tiene curiosidad sobre esto, VirtualMIDISynth es su nombre.

La cuestión es que el editor tenía sus problemas y bugs y al final, tocó bajarse el código fuente y el entorno de compilación QT 5.15.2 (es el que utilizo yo y cuidado porque versiones más recientes, no sirven para este propósito). Y si ya toca los bemoles tener que hacer todo eso, instalar y manejar unas herramientas que desconoces y averiguar como tocar el código fuente para que haga lo que pretendes, luego descubres que necesitarías unos compiladores "estáticos" que tienes que compilar tu mismo entre mensajes de error cada dos por tres... Hasta que por aburrimiento lo consigues.
Porque los "dinámicos" implican porrones de DLL que no molan y necesitas "estáticos" si o sí (aunque al final, alguna DLL tienes que incluir, lo quieras o no, por cosas como Fluidsynth). Y una vez hecho todo eso... ¿Y ahora qué?


Midieditor CUSTOM

Tengo que decir que estaba escribiendo un post mucho mas largo y descriptivo... y se fue a la mierda [toctoc] . Así que lo haré de otra manera y más adelante, quizá pase a añadir algo mas descriptivo como al principio, en este post.

La tarea de este CUSTOM se ha desarrollado esporádicamente durante años. Y la cosa se estructuró así:

Midi Input -> con dos motores de entrada de eventos Midi In Control / Finger Pattern Utilitiy basados en dos posibles divisiones de un teclado UP/DOWN:

Imagen

Editor-> mejorar y añadir nuevas herramientas de selección, que faciliten la integración de eventos midi de control, la selección de bancos/instrumentos, funciones correctoras de notas que se solapan o que exceden la longitud, poder desplazar gráficamente las notas de un canal para poder trabajar con ellas sin que estorben las de otro canal que las tape o estén tapadas, poder generar acordes a partir de notas simples o añadir algunos efectos a posteriori. Incorporación de un teclado virtual para poder tocar y grabar al midi sus notas y también una batería virtual para ciertas situaciones. Incorporación de una "caja de ritmos" que permita crear, con patrones sencillos, un ritmo de batería; pudiendo crear una pista, guardar los "samples" creados de forma individual o la pista entera y pasarlo todo, "grabando" a la posición adecuada respecto al fichero MIDI. Opción de karaoke para poder visualizar los mensajes mientras se ejecuta, exportar a WAV, MP3 o FLAC, etc...

Midi Output -> Aquí la estrella del mambo es FluidSynth: gracias a esta librería, podemos incorporar bancos de instrumentos que importamos en formato .sf2 o .sf3 y añadir "riqueza" a este programa. El soporte de FluidSynth se añadió con la incorporación de una mesa de mezclas desde FluidSynth Control y se complementó con la posibilidad de añadir plugin VST (a mi uno reciente que he visto que me mola es este: BYOD que permite conectar diferentes efectos para guitarra). Se pueden conectar dos de estos plugin por canal, pensando en la posibilidad de usar como VST1 un plugin de efectos y en VST2 otro más o un ecualizador, etc o utilizar en VST1 un módulo sintetizador y en VST2 otro de efectos.

El soporte es VST/VST2 no VST3. Se tiene la posibilidad de cargar plugins de 32 bits en la versión de 64 bits gracias a un proceso externo llamado "remoteVST" (una utilidad que cree) que los carga y trabaja de forma integrada con Midieditor. Se pueden guardar presets (mediante eventos sysEx, que son ocultados para evitar su desplazamiento o modificación), importarlos y exportarlos con ayuda de ficheros, etc. Y obviamente, con otros sysEx (estos si, visibles) "conmutar" entre presets e incluso desactivar el plugin.

¿Que por qué sólo se permite utilizar dos módulos VST por canal?. Pues por simplificación, porque no veo la necesidad y porque existen plugins como el BYOD que ya agrupan varios efectos. Entiendo que si todo el programa se dedicara a un solo instrumento, se podría dar posibilidad a utilizar más y conectarlos, pero creo que para Midieditor es suficiente y su propósito no es ir dedicado a un solo instrumento.

Desde Fluidsynth control, en "Config", podemos controlar el buffer de audio (cuanto menor, menor latencia: yo suelo usar 512 bytes y si me apuras, 1024 bytes), el dispositivo de salida , la frecuencia de los samples y si usamos 16 bits (con signo) o 32 bits (coma flotante). También cargar el Sound Font (sin uno, Fluidsynth no puede trabajar). La exportación de audio se hace primero a WAV y luego a MP3 o FLAC si es lo que hemos seleccionado. Las selecciones de abajo permite ajustar Bitrate y otros datos de ID3 (el "save" se guarda en el propio MIDI, como evento de texto tipo "Copyright".

Algo que tiene que quedar claro es que la latencia es importante: hará que se desincronicen tus dedos de tus oídos y por tanto, cuanto mayor sea el buffer de audio y mas elementos de proceso (como plugins VST) pongamos por medio, mas sencillo será que tengamos una latencia inadmisible en tiempo real. Y Midieditor CUSTOM tambien tiene en cuenta esa posibilidad de tocar "en vivo" con las ventaja que incorpora. El tener memoria abundante y capacidad de proceso no solo se agradece, si no que puede ser bastante necesario: por eso es mejor ser contenido que exagerar con "infinitas" posibilidades que luego, el equipo no da para ello...

Sobre Midi Input

Este es el diagrama de bloques de Midi Input:

Imagen

Ya he mencionado que Midi Input se divide en dos motores de entrada. Antes de nada, para que Midi Input funcione, no solo es necesario tener el driver de tu teclado instalado, conectarlo y en Midieditor ir al menu Midi->Settings y en "Midi Input" seleccionarlo, si no que si quieres que suene "en vivo" en el mismo menú, pinchar Midi->Connect Midi In/Out o pinchando en el icono de la barra que se encenderá (fondo azul), para que la entrada Midi se conecte a la salida Midi.

Pinchando en la Barra sobre el icono del teclado con la flecha roja, o en el menú Midi->MIDI In Control accederemos al primer motor que controla la entrada MIDI hacia la utilidad. Suele tener este aspecto:

Imagen

Y me había currado una explicación al detalle en español, pero se perdió. Así que lo explicaré de otra manera o bien lo retomo otro día para ampliarlo o miráis el PDF de instrucciones en Pitinglish googleano que me curré y ya [rtfm] .

Básicamente, la cosa consiste en dividir virtualmente el teclado en dos partes, una UP y otra DOWN, cada una con un canal de salida pero que ambas pueden compartir el mismo canal de entrada del dispositivo. Como esta división se hace, depende de Split keyboard y de la opción seleccionada en Note Cut.

Las opciones de Note Cut son estas:

Get It -> A partir de ahora cuando veas "Get It" entiende que si lo seleccionas, aguardará que pulses una nota en tu instrumento para capturarla y utilizarla como nota divisora o activadora según la opción donde estés. En este caso, desde esa nota hacia arriba (agudos) será zona UP (e irá al canal elegido para UP). Y por debajo de esa nota, irá para DOWN y su canal elegido.

C 4 -> Se trataría de una nota capturada mediante "Get It" que parte el teclado, desde C4 en adelante (mas agudas), es UP y desde B3 hacia atrás (más graves), DOWN

C -1 -> Todo el teclado sería asignado a UP.

DUO -> El teclado se asigna a UP como controlador, pero suenan tanto UP como DOWN a la vez, pudiendo tocar dos instrumentos de forma simultánea en ambos canales.


Recordatorio de como puede estar dividido el teclado en dos zonas:

Imagen

Se pueden apreciar en Key/Note Event controles rotatorios que ajustan la escala y la velocidad de corte de las zonas UP/DOWN del teclado. Como ya he comentado, los eventos de nota tienen un atributo que es de "velocidad". Muchos teclados, permiten añadir ese atributo según la "fuerza" con la que toques la nota y según la curva de respuesta, puede que te resulte incómoda la variación de volumen entre notas, por no haber tocado suficientemente "fuerte". Así que aparte de tener una opción de fijar la velocidad de la nota ignorando la de entrada (opción Fix Velocity dentro de Split keyboard, lo cual volvería el sonido un tanto plano), sin renunciar al atributo "velocity" puedes intentar ajustar la escala y el corte de dicho atributo para encontrar un punto más adecuado ya tu gusto.

Dentro de Key/Note Event tenemos tambien la posibilidad de ajustar como trabaja un pedal de expresión si dispones de uno o el after touch de canal o de nota (un efecto que consiste en apretar con mas o menos fuerza la nota tocada en este momento, que genera ese evento si tu teclado lo soporta, como en el Roland A-800 Pro que también poseo).

También disponemos de la posibilidad de Auto Chord en cada una de las zonas. Es decir, tu pulsas una nota simple y se genera un acorde compuesto de varias notas. Las notas generadas se añaden al mismo canal, luego se trata de una cuestión compleja que puede requerir partir notas por solapamiento en tiempo real... y eso puede fracturar el sonido obviamente. Sobre que tipo de "acordes", se decide pinchando el icono del símbolo musical del "compasillo" en el grupo de Split keyboard. Dentro podemos seleccionar desde "Powerd Chord" (la fundamental y y 5 semitonos) hasta "C Major Chord Progression". Un detalle aquí es la posibilidad de ajustar en una escala de 1 a 20 la velocidad de las notas que componen el acorde, para que la fundamental domine y mejorar la naturalidad por así decir.

Una imagen que resume como funciona el auto chord:

Imagen

La tecla maestra (roja) es la que tu tocas y de ella nacen 2 notas "esclavas" que se generan automáticamente. Lo de la división maestro/esclavo es importante pues en caso de colisión entre notas (dos notas coinciden) las maestras son las que tienen preferencia y llevan la voz cantante.

Los iconos de engranaje y teclado del Split keyboard sirven para fijar instrumentos y eventos de efectos "para tocar en vivo", fuera de lo que sería el fichero Midi (que para fijarlos puede requerir dar a "Play")

El grupo Key effects sirve para conectar una serie de efectos a la zona elegida, bien mediante la pulsación de una nota para activar/desactivar o manteniéndola pulsada. Así mismo, dependiendo del efecto, puedes fijar un valor desde la barra deslizante de ajuste o tomándolo desde el atributo de velocidad de dicha nota. Efectos como reverberación o la aplicación de un plugin VST con un determinado Preset se pueden activar de esta forma.

El utilizar este sistema "Get In" de asignación de notas para activar y desactivar cosas, no solo permite una programación sencilla de estas opciones, si no el poder utilizar notas que no empleemos en nuestro teclado, para activarlas, sin necesidad de utilizar un teclado que lleve botones auxiliares para estos menesteres.

El resto de eventos de control no conectados de forma directa en este proceso de zonas UP/DOWN o aquellos donde se debe decir una de las zonas, irán hacia el canal de UP excepto si se especifica Events to ch DOWN. Con Notes Only se pueden filtrar (ignorar) el resto de eventos.

Channel Up IN y Channel Down IN se usa para indicar que canal MIDI de entrada se escucha. Recuerda que para muchos dispositivos el canal 1 es el canal 0 respecto a Midieditor. En mi caso, no encuentro la utilidad de poner un canal diferente de escucha, cuando prefiero que el manejo y la partición la haga MIDI Input Control. No recomiendo escuchar todos (ALL) los canales, salvo que lo quieras es ver si se recibe algo o no...

Una opción interesante a la hora de grabar es Recording starts when one key is pressed. En el Midieditor original tu dabas al botón de grabar y grababa a partir de la posición que le indicaras, sí, pero desde ese momento... haciendo que pasaran varios segundos antes de que tu o bien volcaras lo que tuvieras grabado en el instrumento o te preparases para tocar. Con esta opción activa, se espera a que toques la primera nota antes de ponerse a grabar. Se pierden unos pocos milisegundos de esa nota inicial, pero merece la pena y es mas congruente la sincronización, que el libre albedrío de antes [+risas]

Creo que hasta aquí he explicado lo mas relevante de MIDI Input Control.

El segundo motor es Finger Pattern Utility:

Imagen

¿Y que c*ñ* es Finger Pattern Utility?

Pues básicamente es una utilidad que permite que al pulsar una nota pueda ir sonando un patrón de notas que forme un ritmo compuesto por notas que cumplen ciertas reglas para que al desplazarse sobre el teclado y pulsar otra nota, ese ritmo no desentone. Para ello, puesto que la base tonal son acordes, se utilizan lo que se llaman arpegios. En la imagen se puede ver que hay dos zonas de edición de patrones, para UP y para DOWN con una selección de pasos (Steps) que serán tenidos en cuenta, un Tempo que reflejaría la duración de una nota simple en milisegundos y luego unas casillas numeradas que se expresan así:

“1”: Sería la nota fundamental del acorde
“3”, “5”, “7” : las diferentes notas que siguen a la fundamental, la "tercera", "la quinta", "la septima"
“-1”, “-3”, “-5” : El signo menos representa una octava abajo.
“+1”, “+3”, “+5” : El signo más representa una octava arriba.
“* 1”, “* 3”, “* 5” : El asterisco representa una nota con doble tempo.
“###”, “*##”: Silencios. Con asterisco, con doble tempo como duración


Es un sistema sencillo que permite ejecutar una serie de ritmos de acompañamiento que podemos armar nosotros mismos.

En la release incluyo un MP3 que desmuestra algo de esto. Que yo sea algo "manco" y "arrítmico" no debería deslucir el potencial, solo porque yo no lo tenga [sati]

https://github.com/Estwald/midieditor/r ... finger.mp3

De la ventana de edición destacar:

DEL -> Borra el Chord actualmente seleccionado si es de tipo CUSTOM. En otro caso, vuelve a las opciones por defecto

Chord -> El tipo de acorde o patrón custom de origen mostrado en el editor

Repeat -> Aquí se fija el número de veces que se repetira el patrón: de 1 a 7 o Infinito.

CUSTOM #1 a CUSTOM #10 -> Elige donde se guardará el patrón cuando pulses el botón STORE

STORE -> guarda (en el registro de Windows) el patrón creado como señale la opción anterior.


Los patrones se pueden probar pulsando las opciones de Test Pattern correspondiente. Se puede seleccionar la nota base Base Note, así como Guardar y Cargar los patrones a/desde un fichero utilizando las correspondientes opciones.

En la imagen se puede observar también que se soporta la activación de dos patrones (no simultáneamente, claro) por cada zona de teclado, así como la (posible) programación de una tecla Pick Note. El Pick Note, no es un patrón, si no que es una forma de hacer sonar la misma nota que pulsamos, de forma repetida y con un intervalo de silencio entre notas mucho menor que si pulsamos y soltamos esa misma nota de forma similar. El "truco" aquí para eso, es simple: la nota en cuestión se pulsa y se mantiene, mientras que la Pick Note se encarga de crear el evento note off y nuevo note on cada vez que es pulsada, reduciendo al mínimo esa pausa. Logicamente, requiere una ejecución a dos manos, que recuerda al rasgueo de cuerdas de la guitarra (nota Pick Up) mientras que la pulsación de trastes sería con la nota en cuestión.

Los patrones en si, utilizan una nota de activación/desactivación, como se puede ver. Si se hace check sobre Key Pressed el patrón se inicia con la pulsación de la nota vinculada a ese efecto y el patrón se sucede mientras esa nota siga presionada. Al pulsar otra nota ocurre lo mismo, de forma que podemos ir repitiendo ese patrón con distintas notas, pero también podemos cortar el patrón en un punto y crear un efecto melódico distinto al que marca el patrón base con ello. Si Key Pressed no está marcado volvemos al símil de la guitarra: pulsar notas sería como situar dedos en el mástil, mientras que la nota de activación actuaría a forma de "rasgueo" y aquí el tempo de la nota lo controlaría la velocidad de pulsación sobre ésta. Vamos, que la ejecución sería a dos manos, con el control de Tempo sobre la tecla de activación y por tanto, esta lleva el ritmo.


Sobre Fluid Synth Control

Este es panel principal de Fluid Synth Control:

Imagen

En esta imagen, que no incluye la nueva opción de Trémolo, en Main Volume, podemos ver el mezclador de voces y los eventos MIDI de control change que se pueden enviar para controlarlos.

Los controles deslizantes verticales representan el volumen del canal MIDI correspondiente (entre 0 y 127), el horizontal la mezcla (Pan) entre canales izquierdo y derecho de audio, "Gain" es la ganancia por canal en el mezclador de audio y "Main" la ganancia global (el valor medio sería 1, mientras que arriba del todo sería 2).

Abajo se puede ver el selector de canal para las opciones de "Distortion", "Low Cut", "High Cut" y la nueva, "Tremolo" que no aparece en esta imagen.

Si hay plugin VST asociado al canal, se visualizará justo abajo un icono con la leyeda "VST" que permitirá visualizar el plugin al pulsarlo.

Config:

El aspecto del panel es similar a este:

Imagen

Actualmente estamos en la versión 2.3.3 de Fluidsynth y se ha añadido "Default Output Device" que tiene mayor habilidad para mí a la hora de cambiar entre dispositivo (yo que suelo usar un manos libres que conecta con mis audífonos, lo agradezco [+risas] )

Con la opción "Load Sound Font" podemos cargar los ficheros .sf2 o .sf3 que contienen los samples de los instrumentos a utilizar con Fluidsynth. El programa los recuerda y conserva una lista de acceso rápido para poder cambiar entre ellos de forma cómoda. Existen editores como Polyphone Soundfont Editor que te permiten trastear y crear tu propia colección de instrumentos, añadiendo y quitando. Yo por ejemplo, ese "new_GeneralUser.sf2" que me gasto, tiene 10 bancos de instrumentos y mide la burrada de 1,11GB... pero allá cada uno [+risas].

Las opciones de frecuencia de muestreo y tamaño de sample, ya había hablado de ello y que quede claro que esto trabaja a 16 bits con signo o a 32 bits en coma flotante, en estéreo o a freir espárragos [poraki] . Igualmente para la conversión previa a WAV. Ya he comentado también lo de los TAGs/ID3 que se almacenan en el propio archivo MIDI y lo del Bitrate para los MP3.


Sobre VST

Ya he mencionado de estos plugin. VST viene de Virtual Studio Technology, una interfaz estandar desarrollada por Steinberg para conectar sintetizadores e interfaces de efectos de sonido, entre otros, como software.

Los plugin tienen un aspecto así:

Imagen

En la imagen se puede observar que en el canal 0 he cargado como VST1, un pedal de efectos bastante metalero. Y como VST2 un ecualizador para conseguir un audio concreto. Si observáis las ventanas, se puede apreciar que Midieditor crea una ventana para envolver la interfaz gráfica del plugin, añadiendo barras de scroll en caso necesario y aparte de que el título de esa ventana nos proporciona datos como el canal MIDI y si se trata de VST1 o VST2, añade unos botones de control:

Preset -> Aquí se nos muestra y se nos permite cambiar el preset actual, entre 0 y 7. Si se muestra en color verde, indica que esas opciones han sido guardadas con Save en el archivo MIDI (mediante eventos SysEx especiales). Se puede teclear el número de preset directamente, para evitar cambios en los ajustes si queremos basarnos en unos en concreto para crear otro preset.

Save -> Guarda los datos actuales del plugin en el archivo MIDI en el preset seleccionado. No todos los plugins permiten guardar esas opciones desde aquí (hay versiones de demostración que no lo soportan, por ejemplo)

Reset -> Carga las opciones por defecto del plugin. Al cargar el plugin, se salvan las opciones iniciales de los controles en memoria, para poder recuperarlas en este caso.

Delete -> Borra los datos guardados del preset actual dentro del archivo MIDI.


Set Preset -> Almacena en la posición actual del editor, un evento SysEx que indica que se debe usar el Preset seleccionado a partir de ese momento.

Dis Preset -> Almacena en la posición actual del editor, un evento SysEx que indica que el plugin está desconectado a partir de ese momento.

Unset Preset -> Elimina el evento SysEx de cambio de preset/desconexión de plugin que haya en la posición del cursor (o muy cercano a él)


A destacar que los datos de los presets de cada canal, no solo tienen una identificación concreta que los vincula al canal, si no que contiene datos precisos del plugin para evitar en lo posible, la carga por error de datos que no son y el correspondiente cuelgue o salida abrupta de la aplicación...

Además, en las versiones de 64 bits se cuenta con una herramienta, "remoteVST" que carga y hace de intermediario en la comunicación con Midieditor, con plugins desarrollados para 32 bits que no admiten una carga directa. He aquí un ejemplo a 32 bits:

Imagen

Se aprecia un pedal de guitarra y otro de bajo cargados. La zona marcada en rojo es para hacer click con el botón izquierdo y ver las ventanas en caso de perder el foco. Hay que tener en cuenta que los VST a 32 bits son manejados desde la aplicación independiente de "remoteVST" y no se comparte ventana padre con Midieditor

Sobre como se añaden los módulos VST, en esta imagen:

Imagen

Se aprecia a la derecha la lista de canales, con los botones VST1 y VST2, que al pulsarlos, despliegan la ventana central VST Plugin List que permite en primer término, previsualizar el plugin (que se muestra a la izquierda) y si es el que queremos, asignarlo al canal con Set VST Plugin.


Proceso de carga y manejo de un plugin VST paso a paso

El primer paso es seleccionar en el canal si se carga como VST1 o VST2. Lo lógico es cargar primero VST1:

Imagen

Aparecerá la ventana que lista los plugins disponibles. Inicialmente, no tendrás ninguno... por lo que tendrás que instalarlos y mover o copiar la DLL o VST a un directorio apropiado (recuerda que no debes mezclar versiones de 32 y de 64 bits). Midieditor permite definir una ruta para los VST de 32 bits y otra para los de 64 bits. En la imagen que hay a continuación, podéis ver las opciones Set VST plugin Directory y Set VST plugin Directory for 32 bits que aparecen en la versión 64 bits. Si tienes de ambos en esta versión, los de 32 bits se listarán al final, con un separador habilitado para ello:

Imagen

Al pinchar aparecerá el plugin precargado y el nombre sombreado en la lista. La ventana de precarga es común y sin efecto, por lo que puedes ir pinchando sin problema sobre cualquier plugin para precargarlo y visualizarlo hasta llegar al que quieres. Una vez lo tienes, pincha en Set VST plugin :

Imagen

Al pinchar se cerrará la ventana de la lista y aparecerá la del plugin cargado:

Imagen

Desde este momento el plugin es operativo y puedes hacer los ajustes que quieras. Si esta ventana es visible durante la reproducción podrás ajustar, pero no guardar los presets. Para ver la ventana del plugin puedes pulsar sobre "View" en la lista de canales o "View VST" en la ventana que lista los plugins.


Si volvemos a acceder a la lista de plugins presionando VST1 o VST2 en la lista de canales y hay un plugin cargado y operativo se mostrará con esta barra:

Imagen

La opción Delete VST datas ahora sería funcional, provocando el borrado y cierre del plugin y de todos los presets almacenados en el fichero MIDI. Tambien podríamos utilizar la opción Export VST Presets to... aunque lo lógico es que primero guardáramos uno [burla2] .

Una vez que tenemos cargado un plugin, podemos seguir previsualizando otros sin temor de alterar nada, excepto si pulsamos sobre Set VST plugin, que en este caso el plugin actual sería reemplazado, junto con todos sus datos (incluido presets):

Imagen


Sobre la exportación/importación de Presets VST

La exportación se realiza con Export VST Presets to... dentro de la ventana que nos lista los plugins ( presionando VST1 o VST2 en la lista de canales, recordad).

La ventana tiene este aspecto:

Imagen

En Presets veremos marcados los presets a exportar (si los desactivamos, no se exportan). La exportación se puede hacer de dos formas: a un canal del fichero MIDI actual o a un fichero.

Exportación a otro canal -> Consiste en seleccionar el canal de destino (Channel destination) en el grupo y luego pulsar Press to Export as Plugin 1 o Press to Export as Plugin 2. Obviamente, los datos antiguos se borrarán y serán reemplazados por los plugin/presets exportados.

Exportación a un fichero -> Como su nombre indica Press to Export file nos permitirá guardar todos los presets seleccionados junto con los datos del plugin en un fichero con extensión .vst_exp que luego nos permitirá realizar la importación a otro MIDI distinto.

Importación desde fichero -> Dentro de la ventana que nos lista los plugins ( presionando VST1 o VST2 en la lista de canales, recordad otra vez), tenemos la opción Import VST and Presets que nos permite seleccionar un fichero con extensión .vst_exp. Esto provocará el borrado del plugin anterior, si lo había, y la carga del plugin importado junto con sus presets.


Notas sobre VST

Los plugin VST no dejan de ser aplicaciones externas con sus bugs y sus problemas que pueden comprometer la estabilidad de Midieditor en procesos de carga, etc. Y, al mismo tiempo, es posible que Midieditor tenga sus fallos y pueda salirse con una excepción en algún momento. Nada es perfecto, obviamente.

Por otro lado, la información que se suele guardar de los plugins, consta del nombre del archivo y una serie de datos para identificar al plugin (en concreto, una ID, la versión y el número de parámetros) que son utilizados a la hora de cargar los presets para rechazarlos o cargarlos. En los procesos de exportación e importación (.vst_exp) ocurre lo mismo. De esa forma se intenta que solo los datos correctos y adecuados se carguen y no se comprometa por ahí la estabilidad

Algo pasó que no consigo cargar un MIDI después de añadir o guardar datos de un VST. Existe una opción en el menú File, "File->Skip VST SysEx events loading file" que permite marcar uno a uno o todos los canales donde se ignorará la carga inicial de los eventos SysEx que contienen toda la información sobre los plugins, en la carga del fichero siguiente. Es decir, primero se marca lo que creamos conveniente y luego se carga el MIDI problemático. De esa forma, si lo hacemos bien, podemos eliminar solo la información del plugin que nos está dando problemas y conservar el resto.

Configurando la aplicacion por primera vez

Como ya he comentado, MidiEditor hace uso de un dispositivo de salida MIDI. Voy a describir los pasos para seleccionar Fluidsynth y configurar la salida de audio con una Sound font:

Primero hacemos click en Menu Midi->Settings:

Imagen

Click para seleccionar Fluid Synth:

Imagen

Salimos y o bien pulsamos sobre el icono del engranaje azul para acceder a Fluid Synth Control:

Imagen

o en Menu Midi->Fluid Synth Control:

Imagen

Pulsamos sobre Load Sound Font:

Imagen

Buscamos un archivo .sf2 /.sf3 como por ejemplo, el de GeneralUser GS del que proporciono enlace en la release CUSTOM10:

Imagen

Abrimos y al hacerlo, se nos mostrará con fondo verde si Fluidsynth se inició normalmente y lo mismo para el dispositivo de audio (si algo de eso se marca con fondo rojo, es que algo falló):

Imagen

Podemos ver que está seleccionado el dispositivo por defecto de mi portátil a la frecuencia de 44100 Hz, 16 bits por sample (si no está marcada la casilla Use Float) y que el tamaño de "Audio Buffer" es de 512 samples. Recordad aquí que cuanto mayor es el buffer, mayor latencia... pero si ponemos uno pequeño y tenemos mucha carga de proceso, el sonido se entrecortará.

Volviendo a la carga de Sound Font, los archivos que carguemos se almacenarán en la pestaña donde se muestra su ruta, para acceso rápido.

Algunos de los cambios en el engine de audio, no tienen resultado inmediato: es necesario recargar la Soundfont, o el dispositivo de audio para que se apliquen, tal como muestro a continuación:

Vamos a cambiar de 16 bits por sample a 32 bits, usando "floats":

Imagen

Pinchamos en "Audio Device", seleccionamos uno de la lista (si solo hay uno, pues ese :p ) :

Imagen

Y si todo ha ido correctamente (si tenemos ese soporte) veremos en verde tanto FluidSynth como el dispositivo de audio (si falla una, fallarán las dos)

Cuando cargamos la Sound Font por primera vez, pudimos ver que apareció otra pestaña al lado de la de "Config", de nombre "Main Volumen". Haciendo click sobre ella:

Imagen

Podremos vez nuestra "mesa" de mezclas particular. Será la opción por defecto que aparecerá cuando accedamos posteriormente y ya hablé de ella al principio. Los parámetros que se ajusten se pueden guardar en el propio Midi haciendo uso de eventos SysEx al efecto.

Una opción que os puede resultar interesante, es conectar el dispositivo de entrada MIDI (si conectais alguno) al de salida, para poder escuchar lo que entre:

Imagen


Cargando un archivo MIDI

Una vez que ya tenemos configurado Fluidsynth para reproducir, podemos cargar un MIDI de esta forma:

Imagen

Imagen

Imagen

Una vez cargado podemos dar a "Play" para reproducirlo:

Imagen

Y "Stop" para pararlo:

Imagen


Función Karaoke

El formato MIDI dispone de unos eventos de texto que se pueden sincronizar con la música. Los ficheros de "karaoke" pueden ser .mid o tener la extensión .kar:

Imagen

Por defecto suele estar activada la opción de mostrar el texto, pero desde el menú "View" podemos habilitarla o deshabilitarla:

Imagen

El texto se visualiza así, siendo las palabras blancas las que hay que pronunciar a futuro:

Imagen

El reproductor suele adelantar hasta medio segundo la aparición de estas palabras, utilizando una pequeña cola con la que unir los distintos eventos en una frase.



La creación de notas en el editor

En construcción.


Releases y código fuente

Ultima release (CUSTOM10)

Se incluye instalador de 32 y 64 bits. Se recomienda encarecidamente usar la de 64 bits si se puede. Tambien (en .zip) existen versiones "sin instalación". Las instrucciones en pitinglish googleano en PDF y si tenéis la suerte de contar con un Roland A-800 Pro, incluyo los mapas que uso yo para funcionar.

Saludos.
Buenas,

veo que no parece despertar mucho interés el asunto [qmparto]

Mejor, porque he tenido problemas hasta con el Window 10 (un fallo en la unidad) y además estoy mejorando/arreglando/añadiendo cosas que llevan tiempo arrastrandose. Y ahora que estoy currando, no tengo el mismo tiempo para ello (y tardaré mas, obviamente).

El propósito de este hilo es el siguiente: el mismo que me motivaba a publicar cosas en la "scenes" de las consolas, realmente. Y es que, aunque pueda no parecerlo, este Midieditor Custom lleva ya un curro "indecente" detrás (y lo que le queda), simplemente, con el afán de mejorar la aplicación para que cumpla con los objetivos que yo me marco (con lo cual, solo con eso, cojonudo). Y aunque yo no perciba remuneración alguna (ni lo pretenda), sería un despedicio que todas estas modificaciones me las quedara para mi, sin compartir la aplicación con gente a la que le pueda resultar útil.

Con ese propósito, en el cual el trabajo me lo marco yo (y tambien me lo como yo [jaja]), pero que otros puedan disponer de él, tambien me marco ir completando el primer post con detalles sobre el editor, sin la barrera del pitinglish. Y si ello os anima a componer cosillas, pues de pm. Y si no os da por ahí y el hilo acaba perdido en el fondo del foro, por falta de interés en la aplicación, pues mala suerte :p

En todo caso, mientras me apetezca, seguiré mejorando lo que considere conveniente mejorar y como no, compartiendolo con vosotros ;) . Lo único que puedo pedir a cambio, es que si hay interés en la aplicación, no se me atosigue pidiendo cosas que por falta de interés o tiempo, no pueda o no considere conveniente hacer (eso si, como el código fuente está disponible, si otros programadores tienen interés en añadir cosas, pueden hacerlo tambien: es raro, porque currar por amor al arte no se estila, pero puede pasar [+risas] ). Paciencia.

Saludos
Hola!

A mí me interesa mucho el mundo de los vsti y la programación musical!! Pero si te soy sincero, no tengo muy claro lo que estás publicando en este hilo

Un saludo
Traficante escribió:Hola!

A mí me interesa mucho el mundo de los vsti y la programación musical!! Pero si te soy sincero, no tengo muy claro lo que estás publicando en este hilo

Un saludo


Hola,

perdona que haya tardado en responder, pero es que ando liadísimo y lo que iba a ser una revisión de CUSTOM9 para corregir sobre todo,un problema con la exportación de audio con el nuevo FluidSynth, se ha convertido en mucho mas debido a cambios mas profundos y añadidos.

Voy a intentar responderte a ti y a otras personas que puedan necesitar alguna información extra.

Partamos por el principio: MIDI es un protocolo de comunicación donde los dispositivos se conectan unos a otros y se envían una serie de eventos desde por ejemplo, un dispositivo fuente (por ejemplo, un teclado MIDI) hacia uno o más dispositivos receptores para que los procesen.

Si en un teclado MIDI pulsamos una tecla, se generará un evento "Note On", que codificará información sobre la nota, el canal que debe recibirla y la "velocidad" (fuerza con la que se pulsó, volumen, en la práctica) que se enviará al dispositivo receptor para que éste haga lo que considere oportuno. Cuando dejemos de pulsar esa tecla, se enviará un evento "Note Off" con la información necesaria para que cese la nota correspondiente.

Dicho de otra forma: si necesito que la nota DO suene durante 1 segundo, habrá que enviar un Note On que codifique dicha nota, esperar un segundo y luego, enviar un Note Off para silenciarla.

Así pues, tenemos un sistema de comunicación que trabaja en tiempo real, donde un instrumento como un teclado, genera eventos de notas (o de otro tipo) hacia otro dispositivo que los trate. Pero de igual forma, esos eventos pueden ser capturados y guardados en un formato de fichero (los ficheros MIDI .mid) de forma que luego puede ser reproducido como si se estuviera generando en tiempo real. Esto, básicamente, sería como una grabadora de sonido, pero aquí en lugar de grabar el audio, lo que se graban son los eventos que generan ese audio al ser procesados: si tu grabas el audio de un instrumento es lo que obtienes, pero si has grabado las notas a tocar, puedes obtener la misma melodía pero con el audio de instrumentos diferentes.

Por otra parte, al tener grabados esos eventos nos permite poder editarlos y modificarlos a nuestro antojo: a lo mejor los eventos del canal 0 (MIDI soporta hasta 16 canales) nos interesa reproducirlos en el canal 7. O a lo mejor me interesa cambiar el instrumento que sonará, o la duración de las notas... Así pues, necesitaríamos un editor.

Esta imagen muestra en el editor una representación de una nota, con el visor de eventos a la derecha:

Imagen

Se puede apreciar una nota seleccionada, la E4 (Mi, Octava 4) que se visualiza justo arriba (algo nuevo de la CUSTOM10, cuando se pone el cursor encima) y a la derecha se ven los datos en detalle del evento (se pueden editar esos datos desde ahí, ojo). Visualmente, la longitud de la nota representa la duración, pero a efectos reales, todo se limita a un Note On en el tick 1821 y un Note Off en el tick 2142 (los ticks es la forma temporal como se guardan las notas. El como se corresponde con el tiempo real, depende del "Tempo" y de que como se acumule si se va cambiando en otra sección. Sí, lo sé, suena complejo XD)

Por cierto, con esta representación, si otros canales superponen notas, como por ejemplo un E4 que sea tapado o tape al anterior, se hace algo dificil trabajar. En "Channels" tenemos la posibilidad de ocultar canales o de desplazar visualmente las notas, como se muestra aquí:

Imagen

Podéis ver que es "1" con fondo verde en Channel 1, es un desplazamiento de todas las notas del canal, que sin variar el valor, desplaza la posición, en este caso, una octava arriba (se ve que E4 está en la posición de E5). Esto es marcado de forma especial, con diferente textura al dibujar la nota y con el marcador que se muestra de fondo amarillento). Como digo, esta transposición solo afecta de forma visual y no sonora.

El MidiEditor de base, permitía conectarse a un dispositivo de entrada (como un teclado), grabar sus eventos, editarlos, añadir a mano otras cosas y luego conectarse a un dispositivo de salida (podría ser el mismo teclado u otro instrumento, el dispositivo interno de Windows (Microsoft GS Wavetable Synth 0, me aparece a mi en Windows 10) u otro externo, virtual, etc). También disponía de la posibilidad de conectar la entrada con la salida, de forma que, en tiempo real, pudieramos escuchar lo que se toca en el dispositivo de entrada.

MidiEditor CUSTOM se destaca, para empezar, porque añade de forma interna un dispositivo de salida "virtual" llamado FluidSynth. Y esto le permite reproducir directamente el sonido, sin depender de otro dispositivo de salida. Y lo hace de forma que se pueden utilizar bancos de instrumentos que el usuario puede importar desde un fichero Sound Font y expandir nuestro universo. Pero antes de hablar mas a fondo de esto, pongamos imágenes.

Pulsando en el menú Midi->Settings, podemos ver en Midi I/O algo similar a esto, cuando hay un dispositivo de entrada conectado:

Imagen

Podemos ver que como dispositivo de salida, está fijado "** Fluid Synth **" , pero también el dispositivo de Microsoft y los de mi teclado Roland (este teclado no "suena". Enviar eventos sería mas bien para programarlo internamente o para usarlo como paso a otros instrumentos que se conecten a el). Y como dispositivo de entrada, vemos A-PRO 1 1 también de mi teclado Roland. La flecha roja señala al botón que conecta MIDI in y MIDI out, de forma que así como se ve en la imagen, si toco notas en mi teclado, se reproduce el sonido en tiempo real a través de Fluid Synth. Eso permite que un "cacho de plástico" que solo hace ruido si cruje, se convierta potencialmente en un sintetizador de la leche con el que "jugar" [plas]

Como editor, MidiEditor puede cargar un fichero MIDI que generamos de otra parte o crear nosotros mismos los eventos con la herramienta de lápiz u otras. Eso nos puede permitir trabajar sin tener un dispositivo de entrada, pero es obvia la necesidad de tener un dispositivo de salida.

Gracias a Fluid Synth tenemos la necesaria conversión de eventos de notas a audio. MidiEditor permite tanto el filtrado y procesado de los eventos de entrada de un dispositivo externo (Mediante Midi In Control, que es ese icono que se ve de teclado a la derecha de la flecha roja en la imagen anterior, o accediendo desde Menu->MIDI), como los de salida mediante Fluid Synth.

Accediendo a Fluid Synth Control (el engranaje azul a la derecha de la flecha roja de la imagen anterior, o accediendo desde Menu->MIDI) podemos ajustar o conectar elementos de una mesa de mezcla (pestaña Main Volume):

Imagen

Se pueden apreciar 12 de los 16 canales estéreo con los que trabajamos. MIDI está limitado a 16 canales (y son los mismos, estén en la pista que estén, pues el concepto "Track" es a nivel de archivo, no de evento) y una vez que tenemos audio se abre la vía a procesarlo con módulos como los VST, claro. Por eso se acabó metiendo el soporte XD

La otra cara de Fluid Synth Control (y no menos importante) es la pestaña "config":

Imagen

Se puede apreciar la Sound Font que utilizo, así como los datos de audio de salida de mi portátil (siempre stereo o bien a 16 bits con signo o a 32 bits en coma flotante. En este caso, coma flotante para mejor calidad), los datos de la conversión previa a WAV (se puede exportar el audio a WAV, MP3 y FLAC) así como datos de configuración necesarios para MP3 y datos ID3. Guardar los ID3 tags se hace en el propio MIDI en un evento de texto tipo "copyright.

Sound Fonts (.sf2 y .sf3) podéis encontrar por ahí, a patadas. Importante es que tengáis alguno que recoja los instrumentos GM (General Midi). Es posible editar estos archivos y añadir cosas. De hecho, el .sf2 que utilizo es muy grande, pues dispone de varios bancos con montones de instrumentos,

Una imagen donde se aprecian algunos de los presets del banco 0, en el editor:

Imagen

Bueno y ahora ya explicado esto, vayamos al soporte VST. VST de Virtual Studio Technology, nos permite añadir o bien módulos de procesamiento de señal (efectos de audio) o bien generadores de señal (sintetizadores de audio). Los primeros procesan los samples de audio procedentes del sintetizador interno de FluidSynth, que los genera a través del banco de instrumentos de la Sound Font. Los segundos requieren recibir al menos, los eventos de las notas de audio. MidiEditor CUSTOM soporta los dos tipos, pudiendo, en la versión de 64 bits, utilizar módulos de 32 bits (viejos). Obviamente, como los VSTi requiren eventos, se fijan como VST1 del canal, dejando VST2 en este caso, como un módulo de efectos a aplicar sobre el resultado de VST1.

Voy a poner unos ejemplos de audio con o sin empleo de VST/VSTi.

Audio limpio, sin VST:

MP3 La Fiesta - sin VST

Audio con VST de efectos BYOD "Jimmy Hendrix":

Imagen

MP3 La Fiesta - con VST Efectos

Audio con VST sintetizador Elsa Panther:

Imagen

MP3 La Fiesta - con VST Sintetizador

En este último, que el instrumento seleccionado sea una Guitarra eléctrica es irrelevante, pues es el VST el que genera el sonido.

Y bueno, ha sido largo, pero es todo por el momento [qmparto]. A ver si termino la CUSTOM10. Saludos

Imagen

--------------

Edit:

Buenas,

ayer tuve un problema con Fluidsynth y su manera caprichosa de tratar los bancos de instrumentos y los eventos de programa (cambio de instrumentos), que ya pensaba que tenía solucionado... aunque ahora parece que si. Es un problema que se da desde que cambiaron a la versión 2.x y, sinceramente, mira que es raro que yo sea el único que parece darse cuenta que algo no va bien con el asunto... tal vez porque uso un .sf2 grande o yo que se. El caso es que tirando de una de las flautas que tengo en uno de los bancos... sonaba piano. Y esta vez era al reproducir, no al importar (que utiliza un método distinto, que es el que mas problema dió). Y a pesar de que me empeñé en que forzosamente, se enviaran primero los eventos de control antes que los de prg, ocurría. Incluso si ponía una espera entre ambos de 10 segundos (por poner algo bestia), pasaba lo mismo (yo creo que es un problema multihilo, que hace que aunque envies uno antes que el otro, se recepcionen al revés....). Si embargo, si el evento de programa se produce en la línea de tiempo de la reproducción, sí que funciona de forma correcta. ¿Solución?. Implementar un sistema que al enviar un cambio de banco en un canal, activa un "flag" que hace que justo antes de la primera nota musical afectada, se envíe el cambio de programa (cambio de instrumento) y así, funciona bien...

Estoy un poco cansado ya, jolines: si de por sí, es bastante trabajo y simplemente, publicar la release y hacer una somera descripción de los cambios, ya supone lo suyo y da pereza... también me gustaría detallaros cosas sobre el manejo del editor y no doy para todo... y que encima, surjan complicaciones, no ayuda. En fin, voy a trabajar unos días mas a ver si podemos librar al programa de alguno de sus defectos...

Los cambios efectuados en CUSTOM 10:

- Mejor manejo de las lineas de división de la "trama" del editor (menú View->Raster), donde se incluye una nueva opción que al hacer click sobre ella, ajusta sobre los BPM de la caja de ritmos (Drum Rhythm Box). Eso unido a la herramienta "Magnet" (el botón del imán o en Tools->Magnet), que permite alinear notas en base a esa trama, usando o bien el inicio de la nota o el final. Antes, Magnet era un desastre... ahora parece funcionar bien.

- La "Standard Tool" (la de la flecha), que permite trabajar a una nota (aunque permite hacer selección múltiple pulsando la tecla SHIFT o MAYUSCULAS) para que suene, seleccionarla, moverla o redimensionarla, ha cambiado de forma que ahora el cursor del ratón se visualiza de forma estable, la redimensión de la nota es mas sencilla y solo si mantienes el botón del ratón más de un segundo, permite mover la (o las) notas. Esto último con la idea de intentar evitar que las notas se desplacen un poquito tratando de seleccionarlas.

Además, al posicionar el cursor sobre una nota, muestra datos sobre ella. Y si se pulsa CONTROL en el teclado y luego click sobre la nota, esta suena sin peligro a modificar nada. Y tambien se ha cambiado la duración de tiempo de ese sonido, de forma que se ajuste a la longitud de la nota (salvo que éste sea muy largo, que entonces se topa a 2 segundos). Todo ello pensando en una reproducción nota a nota mas fiel, por así decir.

- Otra mejora tiene que ver con el Undo/redo (hacer/rehacer) que incluye una limitación seleccionable a 64 pasos (en Edit->Limit list Undo to 64 steps) para evitar un disparo excesivo en el consumo de memoria. Pero también se ha añadido un sistema que almacena en fichero una lista de hasta 16 entradas conteniendo las últimas modificaciones que afecten al archivo midi... La idea es que si se produce un fallo inesperado del programa (puede pasar... ya que no solo el programa tiene sus bugs, si no que puede fallar al asignar memoria o comerse un bug que tenga un plugin VST y a tomar viento...), se puede recuperar ese archivo que estaba sin guardar o ir a un punto anterior.

Si el programa falla aparecerá una caja de mensajes con varias opciones. Ojo por que esta caja puede aparecer si hemos modificado un archivo y abrimos otra estancia de Midieditor -(haciendo click sobre un .mid por ejemplo)... esa instancia detectará un archivo que se crea al efecto y solo se borra cuando salimos normalmente del programa.

En el menú File->Recover file from Backup list, podemos ver la lista a recuperar siendo la mas reciente la de más arriba.

- Tambien se ha mejorado el tema de la liberación de memoria, tanto al abrir/cerrar ficheros como en la lista Undo/Redo, que de forma original, se pasaban por el forro el uso del destructor de las clases C++ en las que se programa esta aplicación. Y claro, es contribuye a gastar cantidades de memoria poco decentes que acaban contribuyendo a un final inexperado del programa. No sabéis cuantos quebraderos de cabeza me ha dado esto y sobre todo el Undo/redo de los cojones...

- La implementación de Fluidsynth 2.x se ha mejorado y remozado, sobre todo al nivel de exportación. Digamos que Fluidsynth tiene dos formas de tratar los eventos: de forma directa o en tiempo real, donde una nota de un segundo implica que pase ese segundo realmente. O de forma "secuenciador" donde el tiempo es indicado de otra forma y mas allá de lo que consuma el procesado de samples, la reproducción se acelera bastante y eso acorta el tiempo que se tarda en exportar ficheros. Aunque es curioso: la forma de resolver los problemas encontrados, implican el envío de forma directa de los eventos de control, etc, y a través de secuenciador de las notas. De tal forma, que al final, el resultado sea el mismo, pero la espera no, claro.

- Por último, se ha cambiado la interfaz visual del programa. En un principo, la CUSTOM pretendía añadir mejoras a Midieditor y no desplazar de forma alguna al autor original, etc. Pero los años han pasado... y viendo que el autor original no incorpora mis cambios, cuando todo está modulado de forma que es muy sencillo compilar sin Fluidsynth, etc, pero aprovecharse de otras mejoras y en realidad, parece que agotó su tiempo y está a otras cosas, pues... ¿por que no hacer otros cambios con mayor libertad?

Esto es código libre, el fuente está disponible y en realidad, todo está añadido de forma que hace muy sencillo revertir ciertos cambios y volver a lo original. Por ejemplo, si no se define CUSTOM_MIDIEDITOR_GUI al compilar, la nueva GUI desaparece sin molestar. Así que considero que esos cambios, que a mi me gustan, no rompen de ninguna manera con lo original, pero si marcan una diferencia entre lo que era MidiEditor y lo que es MidiEditor CUSTOM.

Hay otras cosas que me dejo en el tintero, pero así "resumido" es lo que está hecho.

Me gustaría compartir el temita que me dió problemas con una de las flautas. Es un tema que armé en el 2020 y que ahora tiene algunas modificaciones, de corte clásico con el uso de flautas y un instrumento de cuerda. Una curiosidad, aquí se hace uso del plugin VST BYOD para el efecto "panner" entre los canales izquierda/derecha y modo de control de ganancia:

https://raw.githubusercontent.com/Estwa ... r%20v2.mp3
Bueno, pues ayer subí la CUSTOM10 por fin, ya he actualizado el post de cabecera y ahora tocar seguir con ese mismo post para añadirle cosas que faltan por explicar, etc.

La verdad es que ha sido una currada de aupa, pero creo que ha merecido la pena XD . Por cierto, en github he añadido un par de enlaces de interés: BYOD que me parece muy interesante por que dispone de muchos modulos que se pueden interconectar a vuestro antojo (de los de Modulation, el Panner mola para jugar con el estéreo, como se puede apreciar en el temita que puse, Cold Winter, si os fijais usando auriculares) y la SoundFont GeneralUser_GS_1.471 que contiene instrumentos de forma general.

Yo lo que hice es dejar estos instrumentos de base en el banco 0. Y luego otras soundfonts que encontré por ahí, las fui añadiendo en otros bancos a una única Soundfont. Fluidsynth, en principio, permite manejar varias... y obviamente, se podría añadir soporte y posiblemente, apaños para que se trabajen como si fueran bancos virtuales de una misma fuente... pero a veces en los programas pecamos de querer abarcar tanto, que al final apretamos poco y acabamos creando problemas mayores. Así que hay que pensarlo bastante.

Es como lo de los 16 canales MIDI. Simplemente, haciendo algunas adaptaciones y guardando en otro formato, podríamos tener por ejemplo, 32 canales. Es más, se podrían exportar esos 32 canales, como dos MIDIs independientes. Sin embargo, 32 canales supone procesar y mezclar 64 canales mas los de efectos... en resumen, mayor uso de memoria y de proceso, con lo cual, cosas como tener un buffer de 512 samples para intentar mantener una latencia mínima, se pueden caer por su propio peso.

Eso puede pasar también con los VST: añadir tropecientos plugins interconectados por canal, puede dar la impresión de ser un programa acojonante... pero recordad que por ejemplo a 44100 Hz, disponemos de 512/44100 = 11,61 ms como límite para entregar los samples procesados al dispositivo de audio. Es más, como trabaja a doble buffer, esa latencia es la que tenemos como mínima. Obviamente, si lo que estamos haciendo es reproducir el MIDI (o exportarlo a WAV, MP3 o FLAC), la latencia importa tres cojones en la práctica, pero si estamos tocando en tiempo real, a esa latencia hay que añadir la de entrada... y creedme, se nota. En cuanto tengas que pasar a buffer de 1024 samples, se nota mucho más y hace dificil tocar si equivocarse. Es algo así como el idiotizador del programa de Tv El Hormiguero, que introducen un retardo en el audio que te hace equivocarte al hablar.

Por eso hay que andarse con cuidado y opciones que pueden parecer pocas, como la de soportar solo dos VST por canal, no solo es más practico y sencillo de realizar y utilizar, si no que es mas eficiente. Y luego ves cosas como BYOD, un plugin gratuito y open source, que tiene un montón de opciones y cachibaches interconectables que dan un juego enorme, sin necesidad de tener que ampliar nada. En la gran mayoría de los casos, con lo que hay, basta y sobra, realmente

Al final, se trata de ser práctico. Buscando eso y que el programa sea suficientemente eficiente para lo que pretendo, es como hemos llegado a este punto.

Saludos
Donde dije digo... digo Diego :p

Buenas,

Una de las cosas que tiene ser programador, ir por libre y compartir tu trabajo gratis, es... que haces lo que te sale de los cojones XD . O dicho de forma mas fina: añades a tu aplicación aquello que necesitas o que crees que puede resultar útil o necesario, a tu propio criterio.

Por eso a pesar de que mencioné que no me atraía aumentar el soporte de números de canales de Midieditor, al final, reflexionando un poco y viendo algunas de las posibilidades y limitaciones, he cambiado de parecer XD. Veamos por qué:

El estardar MIDI (1.x) ya hemos mencionado que es un estandar de comunicación entre instrumentos (léase aquí dispositivo físico). Desde el punto de vista de la comunicación, no se contemplan pistas (tracks) y los eventos de notas se limitan a 16 canales (cada uno puede programar un "instrumento" procedente de un "banco" (de instrumentos) en la medida de las posibilidades del dispositivo). Dicho así, pareciera que no se pueden usar mas canales.

Fluidsynth tiene soporte para usar 256 canales de instrumentos (+2 dos de efectos para reverberación y coro). ¿Y como es posible usar todos esos canales?.

Una posible solución es crear tu propio estandar y usar los canales que te vengan en gana. La otra es poner la atención en el concepto de "Track".

Los archivos MIDI almacenan de 1 a 16 pistas (Tracks) que contienen todos los eventos. En alguna ocasión he leído que esas pistas pueden almacenar eventos para los 16 canales, pero que esos eventos son todos para los mismos canales. Es decir, que si tengo un evento de nota para el canal 0, es indistinto si lo envío desde la pista 1 que si lo hago desde la 2... pues no, eso depende del software y del tratamiento que haga de ello.

Una pista podría ser un tema distinto, igual que en un CD las canciones se almacenan en pistas con los 16 canales reproduciendose en el mismo dispositivo, pero con los saltos temporales necesarios para separar los temas. También podría ser una forma de organizar eventos, de forma que por ejemplo, los de control están en la pista 0 y los de notas en la 1. Pero también podría ser un almacen para un dispositivo distinto o el dato que necesitamos para indicarle a Fluidsynth, que esos eventos no van a los canales del 0 al 15, si no del 16 al 31. Y de igual manera, nuestro teclado electrónico podría crear dos dispostivos al conectarlo, para hacer un uso similar o podríamos tener dos dispositivos físicos a los que mandar eventos dependiendo de la pista en la que se reproduzca.

Los archivos MIDI son de tres tipos. Los tipos 0 y 1 son los soportados por MidiEditor, pero al mismo tiempo pretende trabajar como tipo 1 (cuando creamos el archivo desde el editor). Veamos en que consisten esos tipos:

Tipo 0: todos los eventos se combinan en una sola pista. Por lógica, está pensado para utilizar un único dispositivo. Sí, los eventos se combinan en una sola pista al reproducir y en teoría, siendo estricto, solo debería constar de una pista..., pero podría ser que no (no deja de ser una marca, a fin de cuentas). Mas bien, entiendo, se quiere hacer constar que esos eventos se deben de tratar en un único dispositivo, pero si te encuentras un archivo marcado de esa manera, con varias pistas, será por algo. Y por otro lado, si la característica del Tipo 0 fuera constar de una sola pista, ¿y que más da si es de tipo 0, 1 o 2, si se van a tratar igual en ese caso? :p

Tipo 1: dos o más pistas, con la pista 0 conteniendo los eventos de tempo y compás. Bien, según lo entiendo yo, los eventos que afecten a canales (notas, etc) irían en las otras pistas, pero la pista 0 debería contener los otros eventos (texto, SysEx...) de forma organizativa.

Tipo 2: cada pista contiene eventos de tempo y compás, además de los otros.

El Tipo 2 ya hemos comentado que no está soportado. En realidad no tiene sentido para nosotros especificar los eventos de tempo y compás diferentes para cada pista y se corre el riesgo de trasladarlos a otra pista y liar un pifostio. Este tipo es el que muestra mas claramente, la utilización de cada pista en un dispositivo diferente... aunque los eventos de tempo y compás, entre otros (los que emplean internamente el canal 16, a excepción de los SysEx) no se emiten desde MidiEditor (son para uso interno)

Bien, de los Tipos 0 y 1, hasta ahora MidiEditor trabaja en una zona intermedia aunque realmente, a la hora de reproducir, es como si fuera Tipo 0 (todo se mezcla en un dispositivo). Ahora lo que estoy pretendiendo, es que trabaje como Tipo 1, permitiendo usar mas de un dispositivo físico y permitiendo usar mas canales en FluidSynth

¿Y cual es la diferencia entre almacenar eventos en varias pistas, a hacerla en una sola?.

Pues realmente, es importante: aunque los eventos de notas estén limitados a 16 canales solo, si tu pones eventos de nota que se solapen en la misma pista y canal, tendrás resultados inesperados. De hecho, Midieditor cuenta con una herramienta para el solapamiento de notas (Overlapped notes correction) y hace autodetección de este problema al cargar el midi. Ese mismo problema se da si todas las pistas se "mezclan" en un mismo dispositivo al reproducir. Sin embargo si esos eventos en pistas separadas se emiten en dispositivos diferentes, ahi no se produce solapamiento de ninguna clase, igual que sucede con eventos que se emiten en canales distintos.

Si solo dispones de un dispositivo de salida y quieres usar pistas para ordenar eventos de nota de forma separada (por ejemplo, la pista 5 "solo de guitarra", tienes que tener cuidado que no se solapen con otros eventos del mismo canal, por que solo dispones de 16 canales lo organices como lo organices. Pero si cada pista dirige los eventos a un dispositivo distinto o internamente se dirigen a los canales extras que podemos usar en Fluidsynth, ahí no tenemos ese problema y hemos expandido el número de canales que podemos manejar ;)

¿Y cual es ese número?. 48 canales (aunque útiles ahora mismo tengo 46, por el téma de la batería, pero van a acabar siendo 48, por lo civil o por lo militar).

¿Y por qué 48 y no 256?. Pues porque a esos 48 canales hay que unirles los 2 de efectos, son canales estéreo y de forma combinada podrían usarse nada menos que 96 plugin VST y es una burrada muy burra. Creo que 48 es un buen número y particularmente, con 16 no me he quedado corto para mis cosillas

Eso da para un fichero MIDI de tipo 1, con 4 pistas, donde la pista 0 se reserva para tempo, compás, sysEx, etc... y el resto de pistas, o a un dispositivo de salida diferente, o a un canal de los 48 de fluidsynth. Si se añaden mas pistas, ahora mismo lo que hace es ir alternardo entre algo que podríamos llamar, "índice de pista" (o de dispositivos. Numerados como: 0 para canales 0 a 15, 1 para 16 a 31 y 2 para 32 a 47 en el caso de fluidsynth). Lógicamente, los eventos que se reproduzcan sobre el mismo dispositivo, hay que evitar que se solapen o interfieran.

Y por otra parte, la posibilidad de poder usar diferentes dispositivos de salida, era muy atractiva y pienso, necesaria. Por todo ello, cambié de opinión y desde la release de CUSTOM 10 estoy con ello, en una tarea que es bastante mas compleja y liosa de lo que parece.

Una cosa que no he mencionado, es que si hasta ahora todos los canales eran mostrados con indiferencia de la pista a la que perteneciera, ahora no es así: ahora solo la pista elegida (como para añadir nuevos eventos) se muestra con sus colores, mientras que los otros eventos se muestran como una "sombra" y no se pueden editar (pero si los señalas, te indican en que pista están). Es un pequeño precio a pagar, en mi opinión.

Me queda hacer la parte que permita seleccionar los dispositivos hacia las pistas, como un mapa, trabajar algo el tema de importación/exportación de los VST por lo de los track_index y posiblemente, alguna cosa más, aparte de hacer los test que estime oporturnos, que los cambios internos son bastante grandes y hay que probarlo todo bien.

Saludos
Muy Buenas,

Antes de nada, me gustaría disculparme por un bug curioso que se coló en la CUSTOM10: si cargas un MIDI desde el editor, se ven solamente unos 20 segundos del mismo, como si no hubiera mas notas. Si le das a reproducir, rompe ese límite.

Esto es como consecuencia de una cosa rarilla que hacía el autor original, por el cual al cargar un fichero (y crear MidiFile internamente), los eventos estaban conectados al fichero antiguo y en este caso, el evento que expande el área de edición, está bloqueado. No quiero extenderme mucho, pero tiene que ver con que el autor original no liberaba los objetos de memoria de forma mas o menos adecuada (los ficheros antiguos permaneciían en memoria hasta que se saliera de la aplicación, al menos) y liberarlos implica que no se pueden "solapar" esos eventos. Creo que vi alguna cosilla más que no estaba bien... pero saldrá corregida en la CUSTOM11 [tadoramo]

Sobre el tema de CUSTOM11, si recordáis la cosa va de "romper" el límite de 16 canales MIDI que tenemos por dispositivo y "algo más". Bueno, realmente, los 15 canales en los que podemos programar un instrumento y el canal 9 (en Midieditor que van de 0 a 15. En otros el 10) que está reservado a percusión (Drum).

Eso que puede parecer "tan poco", deberíamos recordar que hablamos de 16 canales sonando de forma simultánea. Canales que si al final acaban exportados en un MP3, serán dos canales de audio en realidad. Y recordad, que 15 de ellos admiten cambiar el instrumento (mas concretamente, se puede seleccionar banco de instrumentos e instrumento dentro de este) al vuelo, por lo que no es tan poca cosa.

El tema es que Fluidsynth admite la posibilidad de utiizar mas canales y tambien podriamos querer enviar eventos a mas de un dispositivo. Os comenté en el post anterior, que los archivos MIDI se pueden dividir en "Tracks" y que estos Tracks podían ser una forma de organizar eventos dentro del mismo dispositivo o se podían vincular cada uno a un dispositivo diferente. Que la cosa depende del software. Y que los ficheros MIDI pueden ser de tres tipos, siendo el tipo 2 el que no está soportado y el 1 la forma de trabajar de Midieditor. También os comenté que la idea era utilizar 48 canales en Fluidsynth y que el uso de varias pistas (Tracks) y manejar los canales como si fueran dispositivos diferentes, era una forma de solucionar ese límite absoluto (e irrevocable) de 16 canales.

Consecuencias

Algo que se ha mantenido invariable hasta ahora, es que por muchas pistas que pudiéramos crear en Midieditor, todos esos eventos iban dirigidos a un único dispositivo MIDI para generar el audio. Ya fuera uno externo o Fluidsynth, todo acababa en uno. Eso hacía que el editor estuviera enfocado a mostrar los canales simplemente, puesto que para empezar, todas las pistas se refieren a esos mismos canales siempre y por ejemplo, si hay solapamiento de notas, sabemos que afectará a la reproducción. Sin embargo, en un entorno donde las pistas contienen eventos que van a distintos dispositivos, ese solapamiento del canal no es tal, pues el canal 0 de la pista 1 que va al dispositivo CASIO, no tiene nada que ver con el canal 0 de la pista 2 que va al dispositivo YAMAHA.

O dicho de otra forma: los canales ahora, deberían ser mostrados en función de la pista que esté en edición. De hecho, se hace necesario incluso alguna forma de ordenación de canales, pues la ocultación de ellos que podíamos hacer hasta ahora, no tiene nada que ver con un entorno multipista con canales diferentes.

De base Midieditor tiene una forma de señalar a que pista y canal deben de ir los eventos nuevos:

Imagen

Partiendo de esa base, lo siguiente ha sido crear una "barra de trabajo":

Imagen

Dicen que una imagen vale mas que mil palabras, pero yo creo que van a hacer falta las (en realidad muchas mas) mil palabras para explicar lo que se muestra ahí [+risas] :

- Lo primero que llama la atención es esa barra numerada con botones de 0 a 15 , "Tracks" y "Tracks+". Es necesario explicar que los botones "Tracks", relacionan los botones numerados con pistas. Y si aparece "Channels", con los canales. En esta imagen, vemos que todas las pistas de la 0 a la 15 están activas y además el boton "Tracks+", pues ese MIDI consta de 17 pistas. Adelanto ya que 32, es el límite de pistas que vamos a tener en Midieditor: si haces click en "Tracks" se muestran los botones de las pistas de 0 a 15. Y si haces click en "Tracks+" (si aparece, que solo aparece cuando hay mas de 16 pistas), se mostrarán los botones de las pistas 16 a 31.

- En la barra numerada llama la atención que el botón "1" (pista 1) está seleccionado (fondo verdoso). Al hacer click en esos botones numerados, se mostrarán en color los eventos que pertenezcan a dicha pista. Pero como podemos observar si miramos el evento señalado con el cursor del ratón (en forma de mano), los que estén en pista diferente se mostrarán "transparentes". Y aquí tengo que hacer mención que esa es la forma adecuada de saber a que pista pertenecen: pones el puntero del ratón sobre el evento, averiguas de que pista se trata y si lo quieres editar, seleccionas su número y al tajo.

- Podeis ver que en la zona de "velocity" se muestra un letrero con la información del canal y la pista actuales. Si ponéis el cursor encima de ese letrero, se oculta, por lo que no molesta a la hora de modificar algo en dicha zona ;)

- Un apunte: si solo aparece "Tracks" y haceis click sobre ese botón, se mostrará "Channels". Pero si están tanto "Tracks", como "Tracks+" el resultado dependerá de lo que muestren los botones numerados: puede ser cambiar entre pistas 0 - 15 y 16 - 31 o "Channels" según el botón y las pistas mostradas.

Los canales en la barra de trabajo

Como podéis ver en estas imágenes:

Imagen

Imagen

Haciendo click en "Tracks" o doble click en los numerados de pistas, se puede acceder a modo "Channels":

Imagen

Si os fijáis, aquí en los botones se muestran los colores de las notas correspondientes a canales. Las notas rojas (canal 0), se muestran con un borde negro que nos sirve de referencia para saber que es el canal seleccionado.

Aquí toca explicar un cambio muy importante en el editor: antes las notas se mostraban según el orden consecutivo del canal. Es decir, una nota en el canal 15, podía tapar parcial o totalmente un nota en el canal 0. Y como consecuencia, teníamos que recurrir a ocultar las notas de los canales. Ahora el sistema ha cambiado y las notas se muestran por capas: primero las notas "transparentes" de otras pistas, luego los otros canales de la pista actual y por último, el canal seleccionado.

Como veis en la imagen anterior, se muestran las notas del canal 0 en primer plano. Pero, ¿Y si hago click sobre el canal 1 en ese tema?. Pues ocurre esto:

Imagen

Ahora podemos trabajar una a una sobre las notas del canal 1, pues no solo se muestran en primer plano, si no que tienen preferencia.

Oye, ¿Y que pasa si quiero usar una herramienta de selección múltiple, pero que solo afecte al canal seleccionado?

Pues, como se puede ver aquí:

Imagen

Si en modo "Channels" haces doble click sobre los botones numerados, puedes entrar/salir de un modo exclusivo donde esas herramientas trabajan solo con los eventos de ese canal (ese modo exclusivo se mantiene hasta que se vuelva a deshabilitar con doble click).

Doble click:

Imagen

Selección:

Imagen

Notas seleccionadas:

Imagen
Se puede apreciar que solo se han marcado los eventos pertenecientes a ese canal.

Presionando en "Channels" podemos volver a cambiar los botones de la barra hacia "Tracks":

Imagen

Así pues, podemos ver que esta barra de trabajo es bastante útil y práctico en la línea de la nueva "filosofía de trabajo" y ayuda mucho más en la selección de eventos, que el sistema que había antes.

Selección de dispositivos de salida

Desde menú Midi->Settings podemos acceder en "Midi I/O" a la ventana de selección de dispositivo de salida que queda tal que así:

Imagen

Se puede apreciar en la imagen una lista de dispositivos donde destacan los 3 dispositivos Fluidsynth para el rango de canales ampliado. Justo arriba vemos un selector (Midi output (Track Idx) que nos permite seleccionar entre las pistas 1 y 31 (la 0 comparte con 1) el dispositivo de salida para las 32 pistas soportadas como máximo en el programa.

Como esto puede ser tedioso (incluso aunque Midieditor recuerde estas selecciones), tenemos una serie de opciones abajo para marcar:

- Force Tracks to Track 1 (16 chans only): esta opción exclusiva asigna a todas las pistas el dispositivo de salida de la pista 1. Es decir, como ha funcionado Midieditor hasta ahora, con un solo dispositivo de salida.

- Use Fluidsynth for all (48 channels/interleaved). Esta opción, tambien exclusiva (pero con excluida por la de Force Tracks to Track1) conecta todas las pistas de forma que la pista 1 trabajará con los canales 0 a 15 de Fluidsynth, la 2 con los canales del 16 al 31, la 3 con los canales del 32 al 47 y así con el resto de las pistas, alternando.

Si estas casillas no están en check, podemos elegir el dispositivo a mano para cada pista, cambiando el número. Como no es posible, en realidad, conectar un mismo dispositivo a varias pistas, se recurre a un truco que hace que de forma "virtual" se establezca ese vínculo y los eventos lleguen al dispositivo adecuado (un dispositivo virtual se verá con el fondo azul cielo, mientras que los dispositivos Fluidsynth internos tienen fondo verde).

- Force Fluidsynth use of Channel 9 as Drum: Esta casilla estará marcada siempre por defecto. Lo que quiere decir, es que el canal 9 es siempre usado como canal de percusión en todos los dispositivos... pero nosotros en Fluidsynth trabajamos con 48 canales. Si esa casilla está activada, los eventos hacia los canales 25 y 41 se redirigiran al 9, puesto que para Fluidsynth esos canales no son de percusión. Pero si deshabilitamos esta casilla, las pistas que hagan uso de esos canales, permiten seleccionar banco e instrumento, teniendo así, la posibilidad de hacer un uso real de 48 canales simultáneos. Digamos, pues, que con la opción en check podemos utilizar solo 46 canales de forma práctica y sin check, 48 canales.

- Save/use MidiOut Device to/from MIDI: Esta última opción es bastante importante. Digamos que permite almacenar la lista de dispositivos elegidos/conectados, dentro de cada archivo MIDI y también recuperarla. Si no está activa al guardar, no se creará o actualizará la lista dentro del archivo MIDI y si es al cargar, no se tendrá en cuenta la lista guardada.

Es decir: con esta casilla tenemos la posibilidad de memorizar que dispositivo/dispositivos se requieren para reproducir un MIDI o utilizar la última lista guardada en el programa para todos. Si el dispositivo no puede ser conectado, la pista se mantendrá en silencio.

Esa lista se almacena en forma de evento de Texto, justo al principio del MIDI, en la pista 0. Y almacena la información tal que así:

Imagen

Se puede apreciar que en esa lista se guardan una serie de estados (y ahí si podemos definir como se usará el canal 9 en las pistas que trabajan con Fluidsynth con canales por encima del 15 internamente) y la lista de dispositivos que se asociarán a cada pista. Lo mejor es dejar que sea Midieditor el que modifique ese evento y no tocarlo de forma manual (lo pongo aquí solo de manera ilustrativa).

El Mezclador de audio

Fluidsynth es una parte fundamental del programa, en la forma de que nos permite reproducir los Midis de forma interna, sin necesidad de ningún otro dispositivo y además, exportar ese audio como WAV, MP3 o FLAC. Además, con la ventaja de utilizar sound fonts con diferentes instrumentos organizados en bancos, que podemos editar para añadir más y con los plugins VST por añadidura. Por tanto, la forma de conectar los nuevos canales de audio, se tiene que tratar con cierto mimo. El nuevo Fluid Synth Control permite mezclar 48 canales, organizandolos en grupos de 16 y presenta este aspecto:

Imagen

Comparativamente se puede apreciar que ahora sí, se muestran los 16 canales a la vez y que se ha añadido un nuevo selector "index" para poder mostrar en grupos de 16 los 48 canales, rapidamente.

En fin, este es el "breve" resumen de lo que se espera en la CUSTOM11. Todavía sigo trabajando en ello y tratando de que no se cuelen desagradables bugs que estropeen todo el trabajo que me estoy dando :p , Pero ya se puede apreciar que la base, está operativa.

Saludos
Buenos días.

Aunque el silencio retumbe en este hilo ( :p ), para aquellos que se pregunten que pasa con la CUSTOM 11, la noticia mala es que se va a retrasar bastante... y la noticia buena es que el motivo es que arreglando problemas que surgieron con la entrada de dispositivo a raíz de las cosas nuevas, llegó un punto donde me pregunté: ¿Y por qué limitarnos a un único dispositivo de entrada?. Y eso provocó una serie de acontecimientos en cascada.

De forma original solo se soportaba un dispositivo. Puesto que mi teclado CASIO (el primero que tuve), carece de botones y controles programables, la cosa se limitaba a la posibilidad de un pedal de sostenido (del que carecía) y hacer que ciertas teclas activaran esas funciones.

Con mi dispositivo Roland la cosa cambiaba. De hecho tuve la previsión de añadir el botón "DON'T TOUCH" (que si lo tocas una vez, sonará raro el teclado y si lo tocas otra vez se desactiva XD ), pensando en una expansión en la programación de botones.

Con otros dispositivos tienes botones pensados para lanzar sonidos en un secuenciador. De hecho hay dispositivos que son únicamente controles.

Dar soporte a todo esto requiere repensar y hacer reformas profundas. Ahora mismo la idea es poder conectar multiples dispositivos de entrada de forma que los pares (0, 2) se asumen como teclados que pueden dividirse en dos zonas (UP /DOWN como hasta ahora), pero si conectas su impar (el 1 para 0 o el 3 para 2) lo que haría es que el par toca la zona UP y el impar la zona DOWN.

La gestión de efectos pasa ahora a ser una lista de acciones de forma que si por ejemplo, en el dispositivo 0 tiene programada una tecla que afecta a DOWN, pero tienes el dispositivo impar que controla DOWN conectado, esta se ignore en previsión de que ese otro dispositivo tenga la suya.

La lista de "Actions" recoge parámetros como el dispositivo de entrada, el canal de lectura del evento, el tipo de evento (nota , control, pedal sostenido o de expresión...), el número de nota o control, la función que ejerce (tomar el valor, tomar el valor entre un rango, pulsador o interruptor en el caso de activar, desactivar) ajuste de controles , en situación de tener un valor fijo (por ejemplo, que al pulsar el pedal, meta un valor de reverberación), un control de "categoría" (Midi Events, Autochord, Fluidsynth, VST control...) y por último la "Acción" en si: activar "Power Chord UP", etc.

Digamos que es una forma quizá no tan directa, pero mucho mas potente y organizada.

Y luego, otra cosa que tengo funcionando, pero que requiere más código de soporte, es la función de secuenciador. Básicamente, consistirá en archivos Midi mas recortados, con 2 pistas y el canal 0 para las notas, como base, que podrá ejecutarse en bucle y controlar la altura de las notas en base a la que pulsemos en el teclado. Midieditor ya tenía soporte para algo que podríamos llamar un arpegiador un tanto particular. Esto es diferente y a otro nivel ;).

Sin embargo, en principio se limitará a un solo canal, como siempre: esto puede dar lugar a solapamientos de notas, sobre todo, si se ejecutan acordes y notas que se pisen unas a otras. Es posible que pensando mas en una ejecución "en vivo" e incluso en el uso de los canales por parte de un único instrumento, pueda añadir un soporte más polifónico, aunque sea mas adelante. La verdad es que lo del secuenciador me ha molado, aunque pone patas arriba muchas cosas.

El caso es que si lo hablado hasta este día de la CUSTOM 11, ya tenía tela marinera en forma de trabajo, lo de ahora me sobrepasa en tiempo y en espacio... Pero llegará. Y cuando llegue, creo que marcará un antes y un después bastante evidente y merecerá la pena el trabajo realizado y el tiempo de espera hasta la release :)

Una cosilla que se me olvidaba: Midi editor disponía de un teclado virtual para tocar cosillas usando ratón o el teclado del PC. Basándome en el, ahora hay un teclado mas libre que permite hacer otras cosas (un Dialog no modal) que se puede conectar como dispositivo virtual y que (tengo que hacerlo) añadiendo algunas cosillas podría dar mucho juego, ya que envia eventos a la entrada y no a la salida como el otro. También hay una posibilidad de que podamos usar, mas adelante, una especie de controlador virtual midi que responda al ratón o a una tecla del PC para conectar o desconectar cosas, para los que tengáis un instrumento más básico. Son cosas que se contemplan

PD: como andaré de liado que tengo que aprovechar un hueco en el curro y escribir desde el movil para daros nuevas sobre la aplicación [toctoc]

Saludos
Buenas,

aunque esto esté tan en silencio, que se oyen los grillos... (cri, cri), yo sigo trabajando en la CUSTOM 11 (todavía me queda bastante curro).

Pero me gustaría enseñaros algunos cambios y explicaros de que va la vaina.

Este es el nuevo aspecto de Midi In Control:

Imagen

En la imagen se pueden apreciar las siguientes cosas:

- Han desaparecido las opciones de programar efectos sobre teclas, etc.

- Vemos que la ventana tiene ahora tres pestañas.

- Podemos ver en las opciones de Midi Device Select los dispositivos 0/1, 2/3 y 4/5

- Y luego una serie de opciones que se mantienen, aunque se han modificado algunas cosas, se intuye que son las opciones de entrada de esos dispositivos.

Lo primero explicar lo de los dispositivos 0/1, 2/3 y 4/5. Esto es que ahora podemos seleccionar ni más, ni menos que 6 dispositivos de entrada desde MIDI Input. Recordad que este programa, lleva desde el inicio pudiendo seleccionar un único dispositivo de entrada (y un único de salida). Pues ahora tenemos la posibilidad de conectar 6 :p . En su momento, con la CUSTOM, ofrecí la posiblidad de dividir el teclado en 2 mitades... pues esa es la explicación de que se seleccionen como 0/1, 2/3 y 4/5.

Es decir, los dispositivos pares (0, 2, 4 para los amigos), disponen de la posibilidad de partir su teclado en dos mitades (UP/DOWN) y ademas de poder programar acciones (lo vemos mas adelante) dirigidas hacia ambas zonas. Pero los dispositivos impares (1, 3, 5) son dispositivos DOWN. Si conectas un dispositivo impar, el dispositivo par sera UP (y se saltará la división de teclado de forma automática) y el impar DOWN.

La razón de hacerlo así, es por lógica, por compatibilidad y por herencia: tiene sentido que en un único dispositivo de entrada se haga esa división (zona DOWN de acompañamiento y zona UP de interpretación), como también tiene sentido usar dos instrumentos de forma similar. ¿Se podrían hacer dos zonas en cada dispositivo?. Por supuesto y por eso tienes 3 dispositivos pares que lo permiten (coño, que es un puto editor MIDI y aún así permite conectar hasta 6 dispositivos, que ya es mucho [qmparto]. Por poder, se pueden añadir más, pero ¿para qué?).

La siguiente pestaña de Midi In Control es Input Actions:

Imagen

Como se puede observar, contiene una lista de Acciones. Anteriormente, podíamos programar teclas para llevar a cabo una serie de acciones que activaban efectos se sonido, auto chord, etc. Ahora todo eso se ha sustituido por una lista compleja que conecta teclas, eventos de control change, etc, desde un determinado dispositivo y canal de entrada (por ejemplo, la primera acción usa un pad de batería de uno de mis teclados), con una determinada función (puede trabajar como pulsador, interruptor, aceptar su valor de velocidad o ajustarlo entre un intervalo mínimo y máximo, como podeis observar en la imagen). Estas acciones, pertenecen a una Categoría, como puede ser "Midi Events", "Auto Chord" o como vemos en la imagen "Finger Pattern", "Sequencer". Y luego ya, la Accion concreta: "enciende o apaga el Finger Pattern número 1 de la zona UP, ajusta la escala de tiempo del Finger Pattern de la zona UP, o hazlo con el secuenciador".

Una cosa importante, es que si os fijáis, utilizo el CC 73 en la lista dos veces. Eso no es un error, si no que está hecho aposta porque si por ejemplo, el Finger Pattern #1 UP no está activo, ese control dará paso a las siguientes acciones y si el SEQUENCER #1 UP está activo, trabajará sobre él. Así resulta más fácil dedicar en nuestro dispositivo un control que ajuste la temporización de forma genérica ;) .

Y otro detalle importante, sobre todo cuando se pueden conectar varios dispositivos: existen dispositivos que básicamente, son potenciómetros o botones a modo de controlador sin teclado y tambien podemos tener un teclado con controladores y otro sin ninguno y nos gustaría poder activar cosas en éste último. Por ese motivo, existe un caja de selección Bypass (que en la imagen lo veis como "without bypass"), para poder dar la opción de utilizar controles desde un dispositivo, que tengan su efecto en otro.

Otro detalle que no he mencionado, es que si conectamos un dispositivo impar (DOWN), en su dispositivo par correspondiente (UP), se ignorarán las órdenes DOWN y esos controles/notas quedarán libres.

Si quitáis el check de la Acción no se deshabilita, si no que se bloquean los datos para que no puedan modificarse de forma accidental. Si se quiere deshabilitar, se puede borrar o configurar el Device Input, como "EMPTY".

Las opciones de abajo permiten añadir mas acciones (por encima o por debajo de la que esté seleccionada con fondo destacado), así como borrarla o desplazarla en la lista (la primera tiene prioridad). Ahora mismo se pueden programar hasta 32 acciones, pero seguramente lo suba [qmparto]

La siguiente pestaña es la de Sequecer:

Imagen

Si Finger Pattern es básicamente, un arpegiador donde programamos un patrón de notas correspondiente a un acorde, un secuenciador sería algo así como una secuencia de notas que puede ser incluso una melodía entera, donde podemos ajustar la "altura" presionando una tecla. Aquí básicamente, es un midi simplificado conteniendo notas en el canal 0 y tomando como referencia C3, para ajustar las notas a la que pulses. Se puede hacer que al pulsar una tecla, esa secuencia se reproduzca una sola vez, que se reproduzca de continuo hasta que sueltes (LOOP) o que se reproduzca sin parar aunque sueltes (AUTO). Para este caso, hay un truco que consiste en que si pulsas una tecla durante cierto tiempo, al soltar se cortaría el sonido hasta que vuelvas a pulsar.

Se dispone de 4 secuencias por dispositivo (en la imagen se muestra UP, si haces scroll, se mostrarán las DOWN).

El resultado de un secuenciador no es el mismo que el de un arpegiador, como Finger Pattern: este último ajusta los intervalos de teclas en función de las reglas que marca el acorde y aunque una secuencia se programe con la misma distancia entre notas, para una nota concreta, el resultado es distinto para otra nota. Por eso en su momento, añadí Finger Pattern y lo hice de esa forma.

NOTA: El tema de ritmo de batería, no se si añadirlo en forma de secuencia, o si dejarlo para más adelante. No es algo que me preocupe especialemente, pues Midieditor permite reproducir temas enteros y hasta la caja de ritmos incorporada puede hacer ese trabajo. En principio, es un editor de Midi, no un programa pensado para tocar en directo... y necesito descansar y parar un poco, al menos :p

Hablando de Finger Pattern:

Imagen

Ahora ofrece este aspecto. Se ha añadido NOTE UP/NOTE DOWN 3 y las teclas de activación se han trasladado a la pestaña Input Actions de Midi In Control . Se aprecian unas opciones de load/save nuevas, con la idea de poder importar/exportar los patrones custom que hagamos y compartirlos ;) . Pero todavía no están operativas... [facepalm]

Y por último:

Imagen

Aquí se muestran dos cosas: un teclado virtual, que puede configurarse para el dispositivo que más nos guste, con unos controles de rueda que emulan CC (Control Changes) y que si se presionan con el botón derecho, nos permite reprogramarlos con otros CC y si os fijáis, los dos círculos verdes con menos y más os permite hacer click (con autorrepetición) para un ajuste mas preciso de la rueda, mientras que los botones F1 a F10 (que obedecen a F1 a F10 del teclado) hacen las veces de teclas (en el canal 9 de bateria), utilizando una ventana no modal que permite superponerse y por otro lado, los mensajes "OSD" que se muestran al actuar sobre las acciones de los dispositivos reales/virtuales a modo de información.

Y bueno, hasta aquí hemos llegado que ya es muy tarde.

Saludos
Buenas,

ya se que éste hilo no despierta demasiado interés y ahora mismo, estoy tan cansado y hastiado por así decir (entre mi curro, vida personal y todo el trabajo que me ha dado la nueva versión, la verdad es que tengo ganas de relajarme un poco con este tema: hasta el gorro estoy XD ), que no tengo ganas de explicar todo lo nuevo que presenta y mucho menos, currarme tutoriales que a mi juicio, son necesarios para entender bien como trabajan las nuevas opciones. Mas si hay que hacerlo en pitinglish (tirando de google...) y en español.

Simplemente, deciros que ya está disponible la nueva versión:

https://github.com/Estwald/midieditor/r ... g/CUSTOM11

Quizá en otro momento lo haga: ahora no y es una pena, pues tiene cosas que son bastante interesantes que incluso se pueden probar sin tener un dispositivo Midi usando el nuevo teclado Virtual [+risas]

Me ha llevado lo suyo, lo he estirado y pasado de vueltas y claro, ahora toca relax, cuando tocaría explicar mas a fondo como funciona todo lo añadido [hallow]

Saludos
9 respuestas