¿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.