Um pouco de música, matemática e acaso

Meu último post e as aulas que tenho dado pra Nathalie de hardware e programação (usando um kit de lilypad que compramos pra entrar no mundo dos wearables), me deram uma idéia legal sobre misturar um pouco de eletrônica, programação, estatística e, quem diria, música!

Curioso? vem timbora ler, mas antes precisamos falar um pouco sobre o que eu vou usar (o kit), sobre música e um pouco de matemática, além de um pouco sobre o acaso .


O kit

Esse kit.

Desse kit, vou usar:

  • O cérebro de tudo, um Lilytiny, que é também uma versão alternativa e menos potente do Arduino Lilypad, só que controlado por um attiny85 (um microcontrolador pequeno e fofo, que tem um bootloader massa (micronucleus) e um esquema de hardware para ser programado via USB, sem conversor usb-serial, o que é uma mão na roda). Essa placa é praticamente um Digispark, outra placa massa que vc pode conhecer um pouco aqui, nesse meu post no roboliv.re) *!*esse microcontrolador ainda merece um post
  • um buzzer passivo
  • além de alguns cabos garra, visto que eu ainda não tenho a linha de costura condutiva que dá o charme de conexão desses wearables

Uma equação da música

Flying Lotus Physics GIF - Find & Share on GIPHY

Como já dito, notas musicais são sons com frequências específicas, que geralmente estão distribuídas em torno de escalas musicas. Pois é, existe uma equação que descreve como essas frequências variam dentro das oitavas musicais (matemática é vida mesmo, gente):

“One single equation, that explains everything”

Uma explicação rápida (e tomara que não assuste ninguém) sobre:

  •  é a frequência que se quer calcular (em relação a frequência de referência)
  •  é a frequência de referência, usada pra definir o valor de i e a frequência da nota, por exemplo
  •  é a distância, em semitons, da nota que se quer calcular (com frequência ) e a frequência de referência ()

Exemplos

  • Sabendo a frequência do Dó da 4ªoitava (C4, consultando essa tabela: 261.63 Hz), quero descobrir a frequência do Dó sustenido(também da 4ª, C#4), o que resulta numa distância de 1 semitom:
Voilá!
  • Sabendo a frequência do Lá da 4ªoitava (A4, 440 Hz), quero descobrir a do Ré da 5ª oitava (D5), o que resulta numa distância de 5 semitons:
E isso mostra que a fórmula funciona entre oitavas =]

O acaso: mé dá um número aleatório ?

Pi Randomness GIF - Find & Share on GIPHY

Existem várias maneiras de gerar coisas (números) aleatórios, mas as melhores, segundo o guia do mochileiro, são as físicas, por exemplo:

  • jogar um dado/moeda
  • misturar um baralho e pegar a última carta
  • derrubar um pão de forma (se tiver com manteiga em um dos lados, estraga a aleatoriedade pq entra na lei de Murphy)

Isso acontece porque um computador é simplesmente organizado (careeeeta) demais pra a aleatoriedade, tudo no seu funcionamento é determinístico (O Linus Torvalds, criador do Linux, inclusive, disse que isso é uma das coisas que ele mais ama na programação).

Esse assunto é meio off-topic, mas, no fim das contas, quando se trata de gerar números aleatórios, as opções são :

  • Usar um gerador de improbabilidade infinita gerador de números pseudo-aleatórios (PRNG) que geram um número estatisticamente aleatório, mas, no fim das contas, gerado por um método determinístico (como o Middle-square Method , Linear congruential generator ou Mersenne Twister).
  • Usar  a medição de algum fenômeno físico, como ruído atmosférico, térmico ou elétrico/eletrônico, pra conseguir um número “realmente” aleatório
  • Usar uma combinação dos 2 métodos anteriores

A biblioteca padrão do arduino tem uma função chamada random(min, max), que consegue gerar números pseudo aleatórios dentro de uma faixa, definida pelos seus 2 parâmetros de entrada


A ideia : músicas aleatórias !

Visto que temos uma maneira de calcular a frequência de cada nota de uma escala musical e , também, de gerar um número aleatório dentro de uma faixa de valores, então podemos tocar músicas aleatórias! No entanto, se eu quiser que saia alguma coisa minimamente “musical”, tenho que restringir a aleatoriedade a valores (de frequência e duração das notas) que façam sentido musicalmente. Se não fizer isso, meu amigo, vai parecer jazz contemporâneo.

figuras-musicais-valores.png
As durações das notas podem seguir esse padrão (semibreve é a mais longa e semifusa, a mais curta)

Então, eu posso restringir as notas possíveis definindo escalas musicais em termos de semi-tons:

escala_maior[8] = {0, 2, 4, 5, 7, 9, 11, 12},
escala_blues[7] = {0, 3, 5, 6, 7, 10, 12},
escala_penta[6] = {0, 2, 4, 7, 9, 12}

Além disso, posso definir também os intervalos possíveis:

intervalo[5] = {0.125, 0.25, 0.5, 1, 2}

Agora, usando a equação lá de cima, posso calcular todas as frequências de som que o buzzer deve tocar:

// calculando a frequência de todas as notas da escala cromática
for (i=0; i<13; i++)
    notas[i] = f_0 *pow(2, i/12.0 );               // equação : f = f_0*2^(i/12)

Pronto, agora que tenho todas notas e intervalos coerentes, basta escolher uma nota e um intervalo (duração) por vez, e tocá-la:

dur = intervalo[random(5)]*500;                     // duração aleatória da nota
tone (buz, notas[escala_blues[random(7)]], dur);    // nota aleatória
delay (dur);
esquemático mais simples, impossível

SPOILER: a música que vc vai ouvir agora não foi composta por um ser humano

Olha esse solo na escala pentatônica:

E esse esse solo de blues (tocado por esse pequeno grade compositor):

Bob Dylan GIF - Find & Share on GIPHY

Sim, música é mais que isso …

Alguns pontos que esse mini-robô musical não cobriu:

  • Só usei 1 oitava
  • Só usei a tonalidade de Dó
  • Silêncio também é música
  • A soma da duração de um conjunto de notas não necessariamente completa um compasso cheio

The Code

O código completo tá no meu github, nesse repositorio .


Esses trechos de música, mesmo que primitivos, mostram que as máquinas podem ter uma “criatividade induzida”, seja por aleatoriedade restrita, algoritmos procedurais ou deep learning.

A criatividade não é a primeira nem a última habilidade que nós teimaremos em insistir que seja só nossa.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s