Este tipo de división secuenciada genera un desface, muy interesante y explotable:
t t 3 >> 201 & /
for t in {0..8192}; do printf "\x$(printf %x $(( t<<(t>>10&3) &255)))"; done > bytebeat.raw
t t 6 >> 33 % % 1 -
lindo laser
Para especificar una frecuencia determinada, que no sea relativa a la fundamental:
t * 440 * 256 / 8000
t * freq * 256 / sample-rate
t 90 | 149 %
t 90 | t 8.1 / +
t 90 | t 8 / | 307 %
Después del taller de Nico y Mark armé unas expresiones para controlar con un solo pote, me ayudó a depurar algo de lo que venía probando.
Crear un archivo bytebeat con una sola instrucción en Python, sin necesidad de importar nada:
open('testbyte','wb').write(bytearray([(t<<1|t>>4)-210&255 for t in range(1<<16)]))
Siguiendo con un modelo similar, una variación más ambiental:
t 94 | t 95.1 / %
Puede transformarse rápidamente en algo más rítmico nada más corriendo la coma y cambiando el %
por -
o +
:
t 94 | t 9.51 / -
Otros ejemplos:
t 55 & t 32.1 / - t 8 / | 70 +
t 55 % t 32 / + t 4.4 / & 47 -
Más corta incluso:
t 16 / t 101 & % 2 *
t 9 / t 69 & % 3 *
Los shifters son muy lindos pero usando /
nos ahorramos 2 términos: t .99 * 2 >>
vs t 3.99 /
!!!
Mientras jugaba con esta forma de achicar la expresión llegué a una especie de evolución de la estructura que vengo usando hace rato.
- Moldear la onda con
&, |, ^
- Restarle una t
t 138 & t 7.9 / +
Las variaciones tímbricas y rítmicas son un montón, solamente modificando dos números.
- Por supuesto, a esto se puede agregar un "segundo envolvente" con
&, |, ^
para darle una modulación y progresión más dinámica y prolongada, sumar o restar un valor fijo, en fin, como hace tiempo vengo repitiendo.
t 193 & t 7.9 / - t 8 / & 60 -
- Otra variación, con
%
, sin usar/
ni floats:
t 155 & t 334 % -
- Se puede lograr algo parecido a lo que hicimos con los floats pero solamente con enteros, usando
%
:
t 201 & t 8 / 250 % -
- La forma de la primera onda es determinante, puede suprimirse el "bajo" completamente y dejar solamente los "glitches":
t 3 & t 3.01 / 1031 % -
--
me doy cuenta que debería escribir al revés, siempre la novedad arriba... bue, ya acomodaré el resto.
la idea del módulo al final es producir una distorsión y una progresión:
t t 4 >> & 257 %
t t 1 >> | 255 %
Esta es una anotación de los recursos de bytebeat que más estoy usando. Está todo en RPN (postfix) porque es más rápido y sucinto, por eso con Pacha decidimos que touchbit use ese modo.
La modulación más básica, que sirve como base de todo lo demás puede ser algo como
t t 5 >> &
El 5
determina la velocidad del "envolvente" y con &
o |
cambiamos la "dirección", es decir, si crece o se desvanece.
Lo que hace que la base se vuelva más percusiva e interesante es la distorsión que generan los saltos forzados a través de una suma o resta después de esta primera modulación:
t t 5 >> & 20 -
El valor que restamos (o sumamos, en caso de que hayamos usado una modulación con |
) es el que determina distintos patrones rítmicos ya que los saltos siempre se dan en subdivisiones por la evolución binaria de la onda.
Optativamente, si no encuentro una acentuación que me convenza del todo, modifico un poco la fase de la modulación.
t t 5 >> 32 ^ & 20 -
Generalmente uso ^
pero también se puede con |
, &
o cualquier operación que altere el ciclo largo del envolvente.
Esta última observación me da pie para explicar lo que me parece que es la clave para provocar desarrollos largos y "orgánicos".
t t .99 * 5 >> 20 -
Se trata de desfasar un poco (detune) una t
que tenga mucha incidencia rítmica. La diferencia con la otra t
y/o el hecho de que sumemos o restemos un valor fijo, da como resultado una "evolución" de los patrones generados.
Para que esto sea más notorio ya podemos introducir el último de los elementos básicos que suelo utilizar.
3 1 t 10 >> 2 % pick t * t .99 * 5 >> & 20 -
Analicemos esta primera parte de la expresión:
t 10 >> 2 %
No se trata más que de una secuencia o contador cuya extensión es determinada por el 2 %
(podría también usarse 1 &
pero es preferible %
porque más adelante podemos generar secuencias "irregulares" como 3 %
).
El 10
es simplemente la velocidad de la secuencia.
El resultado de esta expresión es 0, 1, 0, 1, ...
, que luego recoge pick
como operando y trae el elemento n
de la pila. En este caso, el elemento 0 es 3
(una quinta) y el 1 es 1
(la fundamental). Tenemos, entonces, 3, 1, 3, 1, ...
que será el factor de la multiplicación siguiente t *
. En definitiva: t 3 *, t 1 *, t 3 *, ...
.
Seguramente así puedan notar mucho mejor la evolución que provoca el pequeño desface del envolvente.
Agreguemos t 2 >> |
al final de la expresión que construímos recién. Es más, podemos incluso prescindir de la sencuencia melódica para simplificar el punto.
t t .99 * 5 >> & 20 - t 2 >> |
Combinar envolventes es una buena manera de generar distintos patrones, sobre todo cuando uno está desfasado. Acá dejo dos ejemplos más. Uno con ^
y otro donde el envolvente se combina antes de la resta.
t t .99 * 5 >> & 20 - t 5 >> ^
t t .99 * 5 >> & t 5 >> & 20 -
1 t 1 ^ 0 2.1 t 10 >> 4 % pick t *
1 3 4 2.1 t 10 >> 4 % pick t * dup .99 * ^
Muchas implementaciones de bytebeat no admiten floats. Se pueden lograr variaciones interesantes alterando el largo de la fase con %
.
t t 4 >> 199 % & 34 -
t t 4 >> & 20 - t 3 >> 255 % &