Matteo Basei

Una collezione di piccoli programmi realizzati a scopo didattico.

Bytebeat.exe composizioni in una riga di codice

"La musica è il piacere che la mente umana prova quando conta senza essere conscia di contare."

Gottfried Wilhelm von Leibniz

Questo argomento sembra essere totalmente trascurato, se non da pochissimi appassionati. Inoltre, cosa ancora più strana, in rete non ce n'è traccia prima del 2011. Io ne sono venuto a conoscenza nel 2014 e sono rimasto particolarmente affascinato dalla musica generata dalla formula

(t * 9 & t >> 4 | t * 5 & t >> 7 | t * 3 & t >> 10) - 1

(che ho usato come colonna sonora del mio simulatore spaziale Amazing Skies). Il programma che ho sviluppato per esplorare quello che si può fare con la bytebeat (così viene chiamata dai pochi estimatori) oltre a riprodurre il suono mostra il grafico del segnale e permette di salvare il risultato in formato WAV.

Bytebeat 1

In questa formula e in quelle che vedremo compaiono solamente numeri interi, parentesi, operatori elementari e la variabile t. Quest'ultima non è altro che un numero intero che parte da 0 e che viene incrementato di 1 ad ogni iterazione del programma. Il segnale musicale generato è campionato a 8 bit e 8000 Hz. Bit è la contrazione di binary digit, quindi significa semplicemente cifra binaria, quindi cifra di un numero in base 2. Campionando a 8 bit avremo quindi che l'ampiezza del nostro segnale potrà assumere 28 = 256 valori, da 0 a 255. Campionare a 8000 Hz significa invece che una sequenza di 8000 valori produrrà un suono della durata di 1 secondo.

Ho trovato in rete alcuni esempi a campionamento maggiore e che utilizzano qualcosa in più delle operazioni fondamentali sugli interi, con conversioni in virgola mobile, utilizzo di funzioni trigonometriche e operatori condizionali ternari. A parer mio questi esempi snaturano il senso stesso della bytebeat, diventando a tutti gli effetti dei classici sintetizzatori.

Come funziona la bytebeat

Per capire come funziona tutto ciò partiamo dalla più semplice formula che si possa usare per generare musica con questo metodo, vale a dire semplicemente:

t

In questo caso il valore di uscita corrisponde esattamente al nostro contatore. Essendo però il valore di uscita limitato a 8 bit dopo 28 = 256 iterazioni si otterrà il valore massimo possibile, in binario 11111111. All'iterazione successiva il numero 100000000 in binario verrà troncato, ottenendo 00000000. Il suono prodotto da questa formula sarà quindi un'onda a dente di sega con periodo 256 / 8000 = 0,032 secondi, frequenza 1 / 0,032 = 31,25 Hz, un si leggermente aumentato. Un suono certamente poco interessante (anche un po' fastidioso per dire la verità).

Bytebeat 2

Cosa succede se moltiplichiamo t per una costante? Il suono generato dalla formula

t * 5

ad esempio, sarà altrettanto banale, cioè un segnale a dente di sega con periodo 0,032 / 5 = 0,0064 secondi, frequenza 1 / 0,0064 = 156,25 Hz, un mi bemolle 3 ottave sopra al precedente.

Bytebeat 3

Prima di continuare una breve nota sugli operatori &, | e >> che compaiono in queste formule, visto che non sono le classiche operazioni numeriche a cui tutti sono abituati. & e | significa che i bit del numero risultante saranno rispettivamente la coniugazione e la disgiunzione logica dei corrispondenti bit nei due operandi.

>> invece significa che i bit dell'operando a sinistra vengono traslati a destra tante volte quanto indica l'operando di destra. In base 10 questa operazione corrisponde alla divisione per le potenze di 10, infatti 314 >> 1 = 31,4, 314 >> 2 = 3,14, eccetera. In base 2 corrisponde quindi alla divisione per le potenze di 2. t>>7 corrisponde quindi a t/(27) = t/128. Quindi un'onda a dente di sega di periodo 0,032 * 128 = 4,096 secondi.

Ultima nota tecnica: in mancanza di parentesi la precedenza degli operatori è: *, +, -, >>, &, |. Quindi t * 5 & t >> 7, la prossima formula che vedremo, corrisponde a (t * 5) & (t >> 7).

Bytebeat 4

Torniamo a noi. La cosa si fa interessante quando si inizia a combinare diverse onde a frequenza differente, in pratica quando nella formula t compare più di una volta. Ad esempio

t * 5 & t >> 7

produce già una melodia molto interessante e, se notate, è una parte della prima formula citata in questa pagina.

Bytebeat 5

In alcuni casi, più che la melodia e il ritmo generati, risulta interessante la geometria della forma d'onda risultante.