for t in {0..8192}; do printf "\x$(printf %x $(( t<<(t>>10&3) &255)))"; done > bytebeat.raw
8192 es simplemente el largo del archivo en samples, bash es lento y por eso lo hice corto (1 segundo)
token | explicación | ejemplos |
---|---|---|
t |
tiempo, frecuencia fundamental | t ,t*2 ,t/2 |
<<,>> |
bitshifters, cambio de octava, figura rítmica, etc | t<<3 ,t>>4 |
&,|,^ |
AND OR y XOR, moldean, modulan, mezclan, son los operadores más característicos | t&150, t|150, t&t*.99, t|t*5.01, t^255, t&t>>4, t|t>>4 |
+,-,% |
después de ciertas modulaciones, estas operaciones generan distorsiones rítmicas | (t&t>>5)-50, (t|t>>5)+50, (t&t>>5)%270, (t|220)%190 |
Bytebeat es una técnica de síntesis inventada o descubierta por Viznut que podría presentarse bajo el lema "menos es más". La idea de este documento es explicar a partir del siguiente ejemplo:
t^60|t*.97&127|t>>4
Pueden escucharlo y modificarlo en un editor como dollchan o greggman y también directamente desde la terminal usando python y aplay:
#!/bin/bash | |
# init time | |
t=0 | |
# width (cols) | |
w=64 | |
# sleep time after each line | |
s=0.05 | |
# default expression |
#N canvas 0 56 1366 712 10; | |
#X obj 445 347 dac~; | |
#X obj 445 64 phasor~ 0.0125; | |
#X obj 737 228 expr~ $v1/($v1*80*8%3%2+1)*($v1*80*8%4%3%2*($v1*80%2)+1)*80000*8+$v1*80000*($v1*8*8%10*8)%8 | |
; | |
#X obj 738 297 expr~ ($v1*($v1/2000%3+1)%2)*pow(sin(1000/($v1%1000+600)) | |
\, 50)*0.2*!($v1/1000%32*25%32<25)+($v1/(8000/pow(2 \, $v1/4000%3+1))%2)*!($v1/8000%2)*0.5 | |
\; ($v1*($v1/2000%3+1)%2)*pow(sin(1000/($v1%1000+600)) \, 50)*0.2*($v1/1000%32*25%32<25)+($v1/(8000/pow(2 | |
\, $v1/4000%3+1))%2)*($v1/8000%2)*0.5; | |
#X obj 442 84 expr~ $v1*80000*2%250+$v1*10*8*8*8%(8*8*8*10)*125/80 |