Jack Keyboard Manager 0.00001: Lo Prometido es Deuda

anecochea
#1 por anecochea el 18/08/2012
Hola Amigos.
Les cuento que por fin tengo una versión funcional, aunque muy incipiente, de Jack Keyboard Manager, un pequeño programa en Python para hacer más fácil la tarea de conectar teclados

Quiero aclarar que el programa no está todavía terminado y está en un estado de desarrollo muy incipiente. También tengo que aclarar que no tengo estudios de programación por lo tanto hay muchas cosas que están hechas, como decimos en Chile "Al Ope".

Para que este programa funcione necesitan: Jack2 con dbus activado, Python3, dbus para Python 3, Gtk+3, el repositorio gi para Python3 y el mainloop para dbus en glib.
Creo que en ubuntu bastaría con instalar estos paquetes:
sudo apt-get python3-gi python3-dbus

Aquí está el archivo:
http://ubuntuone.com/6cILY6HcIlWRCa9H7BnKhx
y lo dejo por pastebin:
http://pastebin.com/THbyJpz9

Aquí está una vista general del programa
- Son cuatro pestañas: Puertos, Salidas, Rutas y Presets. Lamentablemente esto es todavía un proyecto así que solo Puertos y Rutas hacen algo, las demás son todavía de adorno
- Las pestañas tienen tres secciones: Teclados, Sintetizadores y Efectos. Pero solo funcionan los Teclados y los Sintetizadores, los efectos de momento no funcionan.
[ Imagen no disponible ]

Se preguntarán como funciona
-- Primero: debemos seleccionar un teclado:
En este caso tengo dos teclados, un MAudio Prokeys 88 y un teclado virtual. Para seleccionar los teclados hay que seleccionarlo en la lista de la izquierda y luego hacer click en "Agregar ->".
*** Nótese que la mayoría de los teclados solo son captados por el driver MIDI Alsa, por lo tanto hay que usar algún puente. En este caso estoy usando a2jmidi_bridge, también se puede usar a2jmidid, sin embargo ambos me producen errores con teclados físicos, yo prefiero usar "seq" en la configuración de secuenciador qjackctl. ***
[ Imagen no disponible ]

-- Segundo: Debemos seleccionar los sintetizadores
Se seleccionan del mismo modo que los teclados:
[ Imagen no disponible ]

---
En caso que seleccionemos un cliente con más de un puerto aparecerá una ventana de error, tendremos que seleccionar los puertos individualmente. Para ello es necesario desplegar el árbol del cliente con el triangulito de la izquierda
[ Imagen no disponible ]

---
Aquí vemos la selección de Calf Monosynth:
[ Imagen no disponible ]

-- Tercero: Ahora podemos hacer conexiones
Ya teniendo seleccionados todos los teclados y sintetizadores es posible seleccionar la pestaña "Rutas" en la cual podemos realizar conexiones.
- Los números: 1, 2, 3, 4, 5, 6, 7, 8, 9 y 0 sirven para seleccionar un teclado
- Las letras: Q, W, E, R, T, Y, U, I, O, P, A, S, D, F, G, H, J, K, L sirven para seleccionar un sintetizador para el teclado activo. La casilla "Multiples Sintetizadores" sirve para hacer Layers.
- Las letras: Z, X, C, V, B, N y M sirven para seleccionar efectos pero actualmente no funcionan.

Adjunto algunas capturas que mostrarán la panorámica general del programa.

== Algunos Problemas ==
-- Los sintetizadores se traban, permanecen sonando al ser desconectados o dejan de emitir sonido
Me ha ocurrido este problema un par de veces. Al desconectar un controlador midi que está enviando alguna señal note on suele producir algunos errores. Estos errores son más frecuentes con programas como a2j.
* Recomiendo soltar todas las teclas del teclado antes de cambiar una conexión.
* Recomiendo usar el secuenciador seq en vez de a2j*

-- Los sintetizadores se conectan solos cuando se cierran y se vuelven a abrir
Intenté hacer que los sintetizadores, clientes o puertos seleccionados permanezcan en la memoria del programa para que no sea tan difícil de configurar, lamentablemente si cierras un sintetizador seleccionado y luego lo vuelves a abrir se producen conexiones no deseadas.

-- El programa es muy difícil de usar, prefiero un patchbay tradicional.
Traté de hacer una interfaz lo más intuitiva posible pero evidentemente es más difícil de usar que un patchbay tradicional. Personalmente creo que es más rápido presionar un par de teclas que hacer muchos movimientos de teclados.
Actualmente estoy trabajando para salvar la configuración en un archivo que haga más fácil el proceso de configurar.

== ¿Qué hay de las partes incompletas? ==
-- Los efectos
Conectar un teclado con un sintetizador es fácil, pero conectar una secuencia de efectos es un tanto más problemático.
Imagina que quieres hacer dos rutas de conexión:
- ZynAddSubFX - LV2vocoder - MDAreverb - Rackarrack
- Linuxsampler - MDAreverb.
Entonces el sonido de Linuxsampler pasaría por Rakarrack, esa clase de problemas me han impedido terminar la sección de efectos.

-- Las Salidas
Actualmente jack-keyboard-manager solo conecta teclados con sintetizadores pero si quieres conectar un sintetizador con system o con jack-mixer. Esto se solucionaría con la sección de Salidas.

-- Los Presets.
Una de mis ideas es que se pueda almacenar un Patch en un preset y se cambie con una combinación de teclas. Esto queda pendiente.

== Otras ideas ==
Tengo otras ideas para hacer más completo este programa. Se me ocurre, por ejemplo, hacer conexiones con un arpegiador (Arpage o Qmidiarp) o un keyboard-spliter (Zonage o midi-spliter) para hacer más completo el funcionamiento de este programa.

Espero que les guste este adelanto, espero opiniones e ideas.
Archivos adjuntos ( para descargar)
Jack-Keyboard-Manager - 06 - Todo Seleccionado.png
Jack-Keyboard-Manager - 07 - Conexión 1.png
Jack-Keyboard-Manager - 08 - Conexión 2.png
Jack-Keyboard-Manager - 09 - Conexión 3.png
Subir
2
OFERTASVer todas
  • -40%
    Roland SPD-20 Pro BK Octapad
    398 €
    Ver oferta
  • -48%
    Behringer Powerplay P16-M Personal Mixer
    129 €
    Ver oferta
  • -11%
    Focusrite Scarlett 8i6 3rd Gen
    177 €
    Ver oferta
Irwin J. Cespedes
#2 por Irwin J. Cespedes el 18/08/2012
¡¡¡Uip, uip!!! Sabe que Veguita, como dicen en tiquicia.

[ Imagen no disponible ]

esto es excelente. Para los novatos es una gran ayuda ya que no tienen que hacerse bolas para conectar los teclados USB a los sintes software. Me imagino que también soportara sintes hardware. Una opción ideal para hacer lives o cosas por el estilo.

Esto se merece Karma del bueno.

¡Felicidades y a por esa versión 0.00002!

¡Saludos! [ Imagen no disponible ]
Subir
1
baltardesign
#3 por baltardesign el 19/08/2012
Muy bueno! No dudaré en tratarlo en el blog cuando empieze con los sintes. Ánimo Veguita, muy interesante.
Subir
anecochea
#4 por anecochea el 19/08/2012
Gracias por los comentarios :)

Quiero aclarar dos cosas:

==Primero: ¿Para qué sirve o para qué estoy diseñando este programa?==

Este programa está pensado para cambiar rápidamente de sintetizador cuando tocas teclados o controladores midi en vivo.
Por ejemplo si usas ZynAddSubFX y en medio de un tema quieres cambiar a Alsa Modular Synth bastaría apretar solo una tecla en el teclado del computador, lo que, a mi juicio, es más rápido que configurar las rutas en qjackctl, el cual, por cierto, es un excelente software.

==Segundo: ¿Se puede usar con cualquier teclado o controlador midi?==

En principio sí, pero hay que tener en cuenta que este programa trabaja sólo con Jack vía DBus. La mayoría de los controladores MIDI de hoy en día trabajan con Alsa. Por lo tanto hay que hacer un puente de Alsa MIDI a Jack MIDI.

Existen varias maneras de hacer esto, yo he utilizado dos. La primera es seleccionando seq como secuenciador en Jack, esto clonará todos los puertos de salidas (o controladores MIDI) y creará un puerto de nombre midi_capture1, midi_capture2, midi_capture3, etc. Este método es muy efectivo nunca me ha producido errores ni cuelgues y no agrega casi nada de latencia.
La segunda es usando a2j* que tiene varias utilidades, algunas más eficaces otras menos. Lo más sencillo es correr a2jmidid que agregará dinámicamente todos los puertos alsa MIDI en un cliente jack. En general este método es más intuitivo y más simple, pero en mi caso me ha dado muchos errores, por lo tanto recomiendo el primero.

Aquí hay una explicación más detallada:
http://murks.lima-city.de/serendipity/index.php?/archives/7-ALSA-and-JACK-MIDI-explained-by-a-dummy-for-dummies.html
Subir
anecochea
#5 por anecochea el 19/08/2012
Irwin J. Cespedes escribió:
Me imagino que también soportara sintes hardware


Perdón leí a la rápida. Pensé que hablabas de teclados hardware, hablabas de sintes hardware...
No cacho mucho del tema, pero imagino que los sintes hardware se manejan de un modo similar a los teclados/controladores midi hardware, por lo tanto, en teoría, debiera estar soportado por este programa.

Tengo un amigo que tiene una buena colección de 8 sintes hardware que van desde los vintage como el ARP 2600 hasta y otros más actuales como el Korg Radias y el Korg MS200 [Publicidad, les dejo su myspace]. Gracias a él he logrado conectar mi Notebook a un sinte hardware. Bueno la mayoría de estos sintes tienen teclado propio, solo los más nuevos tienen puerto MIDI IN para conectarle un teclado externo, y sólo los de última generación tienen puerto USB..

Si el sinte tiene MIDI IN se puede comunicar a un PC mediante una interfaz MIDI-USB o MIDI-Firewire, en este caso se crearán los correspondientes puertos MIDI en Jack o ALSA dependiendo de cómo sea el driver de la interfaz, ahora si el sinte tiene puerto USB mucho mejor. Si solo crea puerto en Alsa, entonces habría que usar Xseq o Xraw o bien a2j* para que se pueda usar con este programa.

El drama vendría a ser el mismo, que este programa trabaja exclusivamente con Jack, si el driver del controlador crea un puerto en Alsa y el driver del sinte también crea un puerto Alsa, entonces no tiene mucho sentido conectarla mediante este programa, tendría más sentido usar aconectgui. Ahora la virtud que tiene qjackctl en este sentido es que sirve para trabajar con jack y con alsa al mismo tiempo.

== Off Topic ==
El tema de como se trabaja con MIDI en Linux es un tema bastante polémico, hay muchos debates sobre las ventajas de Jack-MIDI y Alsa-MIDI, y ni hablar sobre las discusiones que hay sobre Xraw vs Xseq vs a2j*. Yo no tengo argumentos técnicos para entrar en estos debates, quiero aclarar.

Hice este programa con Jack-Midi y no con Alsa-Midi porque se puede usar vía Dbus lo que me permite programar desde Python 3, que es más fácil y está mejor soportado. No conozco apis de Alsa-Midi para python o para dbus, quizás existen y me permitan hacer de este programa una solución más integral.

Otra cosa yo siempre recomiendo Xseq en vez de Xraw o a2j* no porque piense que estas últimas sean malas. Yo tengo un grave defecto y es que mi redacción a veces da a entender que quiero descalificar algún software, pero en ningún caso ese es mi objetivo, es sólo que en mi caso particular Xseq me ha dado mejores resultados que otras alternativas.
Subir
anecochea
#6 por anecochea el 25/12/2012
Les cuento que he logrado algunos avances con este proyecto:
- Puse como comentario todas las partes incompletas.
- Agregué botones para salvar y cargar el estado. Guarda el estado en un archivo XML, pero pienso que debiera usar una extensión jkm.

El archivo está sincronizado en Ubuntu One:
http://ubuntuone.com/6cILY6HcIlWRCa9H7BnKhx
(no lo subí a pastebin porque ya se acerca a las 1000 líneas de código)

El script funciona, tiene sus bugs, pero funciona, de hecho yo lo uso en los ensayos con mi banda (Hualve) y en las presentaciones que hemos hecho. Y me ha sido muy útil, dicho sea de paso.
El principal problema es que todo lo que sé en programación es aprendido de forma autodidacta, así que el código de este script es un tanto desordenado y no sigue las normas consuetudinarias de la programación. Probablemente el código sólo sea legible por mí y por nadie más.
En adelante me voy a concentrar en mejorar el sistema para guardar y salvar el estado, corregir los bugs, y trataré de ordenar un poco el código.

Espero que este proyecto sea útil para otras personas aparte de mí.
Feliz Navidad a todos y todas.
Subir
catorze
#7 por catorze el 26/12/2012
Ànimo veguita, estos aportes son los que dan grandeza a este sistema, espero algun dia poder utilizarlo y poder decir que conozco al autor mas que sea virtualment, un abrazo!
Subir
1
anecochea
#8 por anecochea el 28/10/2013
Sigo con mi proyecto, he corregido varios errores (u horrores)

Principalmente corregí los errores al leer y guardar archivos: ahora sí funciona.

Otra cosa que le puse es una muy rudimentaria integración con ladish. Básicamente consultará si hay un estudio ladish cargado y si es así cargará un archivo asociado a ese estudio.

Como siempre se baja de mi cuenta en Ubuntu One:
http://ubuntuone.com/6cILY6HcIlWRCa9H7BnKhx

Va tomando forma, pero queda mucho por hacer :)
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo