02 december 2022
¿Cómo compilo y uso ORCA para componer música en Ubuntu?
¡Trabajadores!
Un Programador es un artesano capaz de entender un problema, plantear una solución a través del código, y resolver la dirección de trabajo de una máquina. Es un obrero, y en cierto sentido, un Dirigente Computacional. Cualquier cristiano que se empape en una técnica y una teoría puede hacer esto.
Pero un Verdadero Programador ve el código, lo aprecia, y lo entiende. Compila y ejecuta in mente. Este estado de omnicomprensión no está dado por la mancomunión con la máquina, sino por una percepción superior y de conjunto emanada del Pueblo. En esto no basta ya el estudio y la práctica. Esas son las partes inertes del arte. La parte vital es el Artista. En otras palabras Él mismo, que es un Conductor. Obra allí el Oleo Sagrado de Samuel, y ese no se vende en cualquier feria.
Es a estay concreción a la que hemos de aspirar. Es posible y no es disonante decir que todo Peronista lleva en su mochila el bastón de Mariscal.
Esto lo ofrece la Organización.
Vean señores: el hombre, aislado y sometido a lo que sólo la naturaleza le provee, podrá atinar - con suerte - a conseguirse el pan con cachos de hardware viejo. El adagio enseña que si Dios bajara a la tierra a resolver el problema planteado entre los hombres, ya le habríamos perdido el respeto. Y no faltaría un tonto que quisiera reemplazarlo a Dios. Porque el hombre es así.
Pero las Organizaciones se presentan como una evolución de este estado brutal. Están para otra cosa. Lo nuestro es la liberación de nuestro código y la Fellcidad del Pueblo. Enemigos no nos faltan: a nuestro frente, una Oligarquía coaligada con espuria sinarquías lo sume a la más abyecta de las condiciones: la de usar software privativo para hacer su cómputo. Ante esta ignominia no podemos más que hacer todos los días, todo lo que se pueda en pos de la Felicidad.
Yo, como político, soy un mero aficionado. Mi profesión es la de Conductor. Para ello me he formado y he estudiado toda mi vida. De casualidad nomás llevo en mis oídos la más Maravillosa Música, que es la Palabra del Pueblo Argentino.
Pues bien, en el campo de la música no dudarán que nos exponemos a lo mismo. Es indudable que el hombre, gracias a la tecnificación y al transistor, puede hoy utilizar Estaciones de Trabajo para Audio digital, y componer allí. No podemos negar que en esto se ha avanzado en los últimos cien años más que en los veinte siglos precedentes.
¿De qué serviría, si no es para clamar por la liberación?
Pero tampoco podemos negar que un verdadero músico ha de obrar por los mismos preceptos que un Verdadero Conductor. Ha de componer en hexadecimanl utilizando código que pueda percibir directamente, de manera de compilar y ejecutar in mente. Las DAW son para neófitos y está bien que existan para la Masa Popular, que es el verdadero condumo... Pero los Verdaderos Programadores hacen música escribiéndola en ORCA.
ORCA es un lenguaje de programación dispuesto en una grilla bidimensional, tan esotérico como Lopecito. Está destinado a crear muy rápidamente secuencais procedurales, donde cada letra del alfabeto representa una operación de control musical. Las letras minúsculas operan el disparo de acciones, en tanto que las mayúsculas operan cada cuadro secuencial individual.
Indudablemente que esta aplicación no es un sintetizador, sino un ambiente de programación en vivo capaz de enviar datos según el estándar MIDI, OSC y UDP a sus interfaces de audio y visuales. Como tal, es un excelente control de conducción estratégica que eleva la complejidad de aquellas estaciones de audio excepcionalmente sencillas para el comando táctico, tales como Ableto, Renoise, VCV Rack o SuperCollider.
Es sabido que en los sistemas GNU con Linux la Terminal puede utilizarse en todos los niveles del cómputo. En este caso, podremos utilizar una implementación escrita en C del lenguaje ORCA, y disponer de una interfaz de usuario basada en texto como elemento de superficie. Como es natural, está diseñada para ser potente y de bajísimo consumo, siendo capaz de operar secuencias grandes, incluso un sintetizador modular utilizando una terminal tipo DEC VT.
Pero de poco serviría si sólo el más selecto de los hombres puede conducirlo. En nuestro Movimiento impera la necesidad de un Trasvasamiento Generacional que lleve a las nuevas generaciones a la habilidad de hacer lo mismo y más que las generaciones anteriores. Esto es lo humanamente posible, biológicamente deseable, y humanamente inprescindible. Por tanto os enseñaré a grosso modo cómo hacer uso básico del entorno.
Para instalarlo abrimos una terminal con Ctrl+Alt+T y cargamos las dependencias:
sudo apt-get install git libncurses5-dev libncursesw5-dev libportmidi-dev
El sistema nos solicitara que ingresemos "a ciegas" nuestra contraseña. Luego instalará los paquetes necesarios de dependencia. Una vez finalizada esta acción, descargamos el código fuente, los ejemplos, y compilamos ORCA.
git clone https://github.com/hundredrabbits/Orca-c.git ; cd Orca-c ; git clone https://git.sr.ht/~rabbits/orca-examples/ ; ./tool build -d --portmidi orca ;
...Y lo ejecutamos con:
./Orca-c/build/debug/orca
Para asignar un dispositivo de salida MIDI que reciba las órdenes disparadas con ORCA, presionamos Ctrl+D en la terminal (o bien F1) para desplegar el menú gráfico principal, y luego elegimos la salida MIDI... Puede usarse cualquier sintetizador virtual que se les ocurra utilizar en su entorno GNU con Linux, ya que aparecerán en el menú.
- ORCA ---------------++ PortMidi Device Selection -----+ | New || > (*) #0 - Midi Through Port-0 | | Open... || ( ) #2 - Midi out Clavinova | | Save || ( ) #3 - Midi out VCV Rack | | Save As... |+--------------------------------+ | | | Set BPM... | | Set Grid Size... | | Auto-fit Grid | | | | OSC Output... | | > MIDI Output... | | | | Clock & Timing... | |.....................|
Operadores
Para ver la lista de operadores adentro de Orca, se usa Ctrl+D,Ctrk+G.
A adición(a b): Da salida a la suma entre los valores de entrada. B subtracción(a b): Da salida la diferencia entre los valores de entrada. C clock(rate mod): Da salida en modulo de cuadro. D delay(rate mod): dispara on modulo de cuadro. E east: Mueve al Este, o dispara. F if(a b): Dispara si las entradas son iguales. G generator(x y len): escribe operandos con offset. H halt: Detiene el operando más al sur. I increment(mod de paso): Incrementa el operando mas al sur. J jumper(val): Da salida el operando al norte. K konkat(len): Lee múltiples variables. L less(a b): Da salida a la más chica de las entradas. M multiply(a b): Presenta el producto de las entradas. N north: Mueve al norte, o dispara. O read(x y read): Lee operando con offset. P push(len key val): Escribe el operando hacia el este. Q query(x y len): Lee operandos con offset. R random(min max): Da salida a un valor aleatorio. S south: Mueve hacia el sur, o dispara. T track(key len val): Lee el operando hacia el este. U uclid(paso max): Dispara en un ritmo Euclídeo. V variable(write read): Lee y escribe variables. W west: Mueve al oeste, o dispara. X write(x y val): Escribe operando con un offset. Y jymper(val): Da salida al operando hacia el oeste. Z lerp(rate target): Transiciona el operando a la entrada.
- bang: Dispara los operandos vecinos. # comentario: Detiene una línea:
Entrada/Salida
: midi(canal octava nota velocidad duración): Envía una nota MIDI. % mono(canal octava nota velocidad duración): Envia una nota MIDI monofónica. ! cc(canal control valor): Envía un cambio de control MIDI. ? pb(canal valor): Envía un pitch Bend. ; udp: Envia un mensaje UDP = osc(ruta): Envía un mensaje OSC. $ self: Envía un comando de ORCA. MIDI
El protocolo MIDI especifica órdenes de software y material de hardware para controlar digitalmente instrumentos musicales electrónicos, a través de una interfaz normalizada. En el caso de ORCA, podremos usar este establecido protocolo mediante órdenes específicas.
Los operadores MIDI en ORCA son órdenes escritas, compuestas ellas por cinco valores de entrada en su nemónico: 'canal, 'octava, 'nota, velocity, duración.
Por ejemplo, si mandamos el operador :25C, se compilará la nota Do ("C"), en la quinta octava, a través del 3er canal MIDI. En tanto, :04c será una nota Do Sostenido ("C#"), en la cuarta octava, a través del canal MIDI número 1. Recuerden que las minúsculas operan las notas negras.
Velocity es un valor opcional de intensidad que va de 0(0/127) a g (127/127). La variable Duración es la duración referida en números de cuadros, en los cuales esta nota permanecerá pulsada.
Por ejemplo, podríamos elaborar un programa midi.orca, con el siguiente código fuente:
.......................................... .#.MIDI.#................................. .......................................... ...wC4.................................... .gD204TCAFE..################............. ...:02C.g....#..............#............. .............#..Canal....1..#............. ...8C4.......#..Octava.234..#............. .4D234TCAFE..#..Notas.CAFE..#............. ...:13E.4....#..............#............. .............################............. ...4C4.................................... .1D424TCAFE............................... ...%24F.2................................. .......................................... .......................................... .......................................... ..........................................
MIDI MONO
El operador MONO % consta de 5 entradas en su nemónico ('canal, 'octava, 'nota, velocity, duración).
Este tipo de operador es bastante similar al operador MIDI que usamos por defecto, con la salvedad que cada nota nueva que introduzcamos detendrá la ejecución de la nota anterior, impidiendo por tanto que su duración se solape con la siguiente. Como esto resulta en que sólo se puedan ejecutar secuencias monofónicas, viene bien para controlar sintetizadores modulares monofónicos que no pueden hacer acordes ni portamento (como el Moog Mini Brute Revisited, o cualquiera monofónico que tenga MIDI, se entiende). MIDI CC
Este operador se usa para alterar algún control MIDI adicional (CC).
El operador MIDI CC ! lleva 3 entradas en su nemónico ('canal, 'control, 'valor). Envía un valor entre 0-127, donde este valor se calcula como un radio de 36, sobre un máximo de 127. Por ejemplo, !008 envía 28 o (8/36)x127, en el primer Canal MIDI, al control mapeado como id0. Para asignar un mapeado a un control MIDI, se puede oprimir la Tecla Intro, con el operador ! seleccionado.
Por defecto, el operador MIDI CC envía al MIDI CC64 y superiores. De esta forma el offset puede cambiarse con el comando cc:0 para poner un offset de 0. Naturalmente, se entiende que viene bien saber de memoria los valores de los CC MIDI para todo esto. Un verdadero músico los sabe, yo no se los tengo que explicar. RUEDA DE PITCH MIDI
Este operador manda una instrucción de alteración tonal progresiva.
El operador MIDI PB ? requiere 3 entradas ('canal, 'lsb, 'msb).
Envía dos valores diferentes entre 0 y 127, donde el valor se calcula como un radio de 36, sobre un máximo de 127. Por ejemplo, el operador ?008, enviará un MSB (bit más significativo) de 28, específicamente (8/36)*127, y un LSB (bit menos significativo) de 0 y lo hará al Canal MIDI 1. SELECCIÓN DE BANCO / CAMBIO DE PROGRAMA
Mas que un operador, este es un comando (ver abajo), y combina las funciones de Cambio de programa MIDI con las de Selección de Banco MIDI (las cuales se utilizan para escoger instrumentos en la memoria de masa del sintetizador).
La sintaxis es pg:canal;msb;lsb;programa. Canal especifica de 0 a 15 para elegir el canal MIDI, en tanto que msb/lsb/programa permiten indicar entre 0 y 127, pero el programa será traducido de 1 a 128 por el controlador MIDI. Programa equivale a lo que en la nomenclatura moderna es "patch" o "parche", y denota la selección del instrumento en un sintetizador. Tengan presente que msb también puede identificarse como "Bank" y lsb como "Group" o "Sub" en algunos sintetizadores como los Yamaha SY, los AKAI, los Clavinova, o bien o DAWs como qTractor o Ableton Live.
Los msb y lsb pueden dejarse en blanco si solamente queremos mandar un cambio de programa común y corriente. Por ejemplo, pg:0;;;32 cambiará al Patch 33 (el bajo eléctrico pulsado según la convención General MIDI), sin cambiar el banco. UDP
El control por UDP permite controlar instrumentos o módulos musicales usando tipología de red tipo ethernet.
El operador UDP ; bloquea todos los puertos hacia el este (consecutivos). Por ejemplo, ;hola mandará la cadena "hola" a disparar, a través del puerto 49160 en el localhost. En el Commander, se debe usar "udp:7777" si quieren seleccionar el puerto por defecto 7777 de UDP, e "ip:127.0.0.12" para cambiar la dirección IP que oficiará de objetivo. UDP no está disponible en la versión para navegador de Orca, naturalmente.
Puede utilizar el fichero listener.js para probar los mensajes UDP. Puede verlos en acción en el ejemplo udp.orca. OSC
El Open Sound Control es un estándar abierto para poner en red instrumentos musicales, considerado una evolución sobre el tradicional MIDI en un entorno libre como ha de ser la creación musical.
ORCA opera con ellos gracias a una serie de operadores distintos a los MIDI.
El operador OSC = traba cada puerto consecutivo hacia el este. El caracter final se usará como ruta, y los caracteres siguientes serán evniados como integrales por medio de la Tabla Base36. En el Commander, se usa "osc:7777" para seleccionar el puerto OSC personalizado 7777, e "ip:127.0.0.12" para cambiar la IP de destino. OSC no está disponible en la versión de Orca para Navegador tampoco.
Por ejemplo, =1abc enviará 10, 11 yd 12 a /1, a través del puerto 49162 en el localhost; =a123 enviará 1, 2 y 3, a la ruta /a. Se puede usar el programa listener.js para evaluar los mensajes OSC. Oidrña verlo en acción en el programa osc.orca o probarlo con SonicPi. Controles Avanzados
Algunas de las características de Orca se pueden controlar externamente vía el puerto UDP 49169 o a través de su propia interfaz de línea de comandos. Para activar el prompt de comandos Commander debemos usar Ctrl+K.
Modo Proyecto
Se pueden insertar rápidamente ficheros .orca agregándolos así al archivo actual, usando el prompt de la línea de comandos. Esto le permitirá navegar a lo largo de múltiples ficheros como lo haría en un proyecto. Se usa Ctrl+L para cargar múltiples archivos .orca, y luego se usa Ctrl+B para tipear el nombre de un fichero .orca cargado para insertarlo allí. Puertos por defecto
Entrada UDP Entrada OSC Salida UDP Salida OSC 49160 Ninguno 49161 49162 Comandos
Todos los comandos tienen un equivalente de abreviación equivalente a sus primeros dos caracteres en inglés. Por ejemplo, podrá escribir usando "wr". La lista completa de los comandos es la siguiente:
play Reproduce un programa.
stop Detiene un programa.
run Corre el cuadro actual.
bpm:140 Configura la velocidad a 140 compases por minuto.
apm:160 Animate la velocidad a 160 compases por minuto.
frame:0 Configura el valor de cuadro a 0.
skip:2 Suma 2, al valor de cuadro actual.
rewind:2 Resta 2, al valor de cuadro actual.
color:f00;0f0;00f Colorea la interfaz.
find:aV Envía el cursor a la cadena aV.
select:3;4;5;6 Mueve cursor a posición 3,4 y selecciona tamaño 5:6(opcional).
inject:peron;12;34 Inserta el fichero local peron.orca, en 12,34(opcional).
write:H;12;34 Escribe el glifo H, en 12,34(opcional).
time Presenta el tiempo, en minutos y segundos, desde 0f.
midi:1;2 Configura el dispositivo de salida MIDI al #1, y el dispositivo de entrada al #2.
udp:1234;5678 Configura el puerto de salida UDP a 1234, y el puerto de entrada a 5678.
osc:1234 Configura el puerto de salida de OSC a 1234.
Anexo A: TABLA DE INCREMENTOS Base36
Orca se opera en base a 36 incrementos. Los operadores que emplean valores numéricos generalmente también operan sobre letras y las convierten a valores según la siguiente tabla. Por ejemplo, el Do se dispará en cada cuadro 24 de la secuencia.
0 1 2 3 4 5 6 7 8 9 A B
0 1 2 3 4 5 6 7 8 9 10 11
C D E F G H I J K L M N 12 13 14 15 16 17 18 19 20 21 22 23
O P Q R S T U V W X Y Z 24 25 26 27 28 29 30 31 32 33 34 35
Anexo B: TABLA DE TRANSPOSICION
El operador MIDI interpreta cualquier letra sobre la escala cromática como un valor de transposición. Por ejemplo, 3H equivale a la nota Do (A4 en la notación ingles, y nomenclado 4A en ORCA).
0 1 2 3 4 5 6 7 8 9 A B A0 B0
C D E F G H I J K L M N C0 D0 E0 F0 G0 A0 B0 C1 D1 E1 F1 G1
O P Q R S T U V W X Y Z A1 B1 C2 D2 E2 F2 G2 A2 B2 C3 D3 E3
Referencia / Turorial Básico Como se vio, ORCA opera en base a 36 incrementos secuenciales, y los operadores convierten valores alfanuméricos a valores que van de 0 a 36. Para manerjas las interacciones entre plataforma y cliente se usan caracteres especiales
Con esta sección enseñaré lo básico para tocar una nota y una secuencia de notas.
Enviar una Nota MIDI
D8, enviará un Disparo, cada 8 cuadros. :03C, enviará un Do ("C") en la tercer octava. Para mandar un Do Sostenido ("C#", se usa la minúscula c3.
D8....:03C
Tocar una nota aleatoria
aRG, dará salida a un valor aleatorio entre A & G, la mayúscula de la derecha indica la salida en mayúscula.
D8.aRG. .:03D..
Hacer una melodía
04TCAFE, creará una pista de 4 notas, y le dará salida a su primer valor.
D814TCAFE .:03A....
Tocar la melodía
8C4, contará de 0 a 3, a 1/8 de la velocidad.
.8C4..... D804TCAFE .:03C.... Lógica
Esta sección le enseñará lo básico de la lógica automática de decisión y el cambio dinámico de los valores de los operadores.
Tocar cada segunda nota
2I6, incrementará a 6 a una velocidad de 2.
.2I6....... D626TCAFEDG .:03F......
Tocar una nota con un offset
1AC, agregará 1 a Do (C), para darle salida a un Re (D). Para lograr un Re Sostenido (D#), se usa d minúscula, como en 1Ac.
D8.1AC. .:03D..
Tocar una secuencia de atrás y adelante
La combinación de la salida de C6 a B3 revolará a un valor entre 0 y 3 durante 6 cuadros.
4C6...... .4B3..... D414TCAFE .:03A....
Tocar una nota en un intervalo específico
.I4, incrementará a 4, a una velocidad de 1. .F2, disparará solo si la entrada de la izquierda es igual a 2.
I4..... 3F2.1AC ..:03D. Proyectores
Esta sección explica lo básico para crear nuevos operadores proceduralmente. Detienen un operador en movimiento.
E, se moverá a la izquierda cada vez, en cada cuadro. H, detendrá el movimiento de E.
..H E..
Lee un operador en una posición
22O, pone el operador E en el offset 2,2.
22O... ..E..H .....E
Escribe un Operador en una posición.
22X, le da salida al operador E en el offset 2,2.
22XE. ..... ..... ....E
Animar un Proyector
B4, rebotará desde 0 a 4, de ida y vuelta.
C........... .B4......... .1XE........ ........:03C ........:03D ........:03E ........:03F ........:03G Variables
Esta sección ejemplifica lo básico para almacenar, acceder y combinar dichos datos almacenados.
Escribir una variable
aV5, almacenará 5 como variable a.
aV5
Lee una variable
Va, le dará salida al valor de la variable a. Note como las variables tienen que ser siempre escritas encima de donde son leídas.
.....Va ....... aV5..Va .....5. ....... aV6..Va .....6.
Leer 4 variables
3Kion, dará salida a los valores de i, o y n, lado a lado.
iV0.oV3.nVC ........... 3Kion...... .:03C......
Mover un valor horizontal y verticalmente
Y, Mueve la entrada hacia la izquierda. J, Mueve la entrada hacia abajo.
3.. J.. 3Y3
Portar un disparo
Este método permite llevar los disparos a un lugar cerrado.
D43Ka... .Y.:03C...
ORCA es un lenguaje de programación orientado a la creación musical en vivo, que puede utilizarse con habilidad. Sumado a un conjunto de instrumentos e intrefaces de audio basada en tecnología MIDI, UDP y OSC, representa un nuevo paradigma para la composición musical en la Era Digital del Ciberespacio Peronista.