1 pontos por GN⁺ 2024-01-29 | 1 comentários | Compartilhar no WhatsApp
  • O código funciona como uma partitura de arte-instalação que rege ao mesmo tempo a seleção de acordes, a síntese sonora e a resposta dos LEDs, enquanto uma estrutura escultural que lembra o caule de uma planta gera som e luz repetidamente
  • A parte A cria acordes Major, Minor, Major 7th, Minor 7th e suas inversões de A2 até D5, passando a cada 8 segundos para um acorde que difere por apenas uma nota
  • A parte B escolhe uma nota do acorde atual e a reproduz com forma de onda e duração aleatórias, sobrepondo notas isoladas imprevisíveis a uma progressão harmônica regular
  • Sempre que surge um novo acorde ou nota, os LEDs em forma de caule reagem, e a cor de cada nota é mapeada para que notas próximas no ciclo das quintas pareçam semelhantes
  • A implementação é dividida entre um programa de áudio em C++ no Raspberry Pi 3 B+ e o controle de LEDs com FastLED em um Arduino Uno, com os dois dispositivos trocando informações de notas pela porta serial

Partitura composta por regras gerativas

  • A parte A enumera todos os acordes possíveis Major, Minor, Major 7th, Minor 7th e todas as suas inversões de A2 até D5
  • O acorde selecionado é reproduzido por 8 segundos e, em seguida, passa para um dos acordes que diferem do acorde atual por apenas uma nota
  • Esse processo continua repetidamente, alternando entre a reprodução de 8 segundos e a escolha de acordes adjacentes

Regras de geração de som

  • A parte B seleciona uma nota do acorde atualmente em reprodução
  • A nota selecionada é reproduzida com uma forma de onda aleatória, durante uma duração aleatória
  • Se a duração for curta, ela é repetida um número aleatório de vezes e, depois de esperar por um tempo aleatório, o mesmo processo se repete

Regras de resposta da iluminação

  • A parte C ilumina cada caule da raiz até a ponta sempre que um novo acorde é acionado na parte A
  • As cores da iluminação correspondem a cada nota do acorde, e notas adjacentes no ciclo das quintas têm matizes semelhantes
  • A parte D ilumina a ponta de um dos caules com uma cor brilhante correspondente à nota sempre que uma nota é reproduzida na parte B

Implementação de hardware e software

  • As partes A e B ficam a cargo de um programa C++ personalizado executado no Raspberry Pi 3 B+
    • Ele cuida tanto da seleção das notas quanto da síntese dos buffers de áudio
  • As partes C e D são implementadas com um programa personalizado na placa Arduino Uno
    • Ele faz a interface com fitas de LED compatíveis com o protocolo WS2812B usando FastLED
  • As informações de notas enviadas do Raspberry Pi para o Arduino são recebidas por sinais da porta serial

Estrutura física e modo de operação

  • A fita de LED passa por dentro de tubos transparentes usados em aquários domésticos
  • Os tubos são reforçados com fio de níquel grosso, formando uma estrutura moldável
  • O gabinete de madeira sob o vaso contém o microcomputador, a fiação e um conector de áudio de 3,5 mm para ligação ao sistema de som
  • A alimentação entra por meio de duas conexões principais de energia
  • Os computadores operam em modo headless e fazem inicialização automática quando recebem energia

1 comentários

 
GN⁺ 2024-01-29
Opiniões do Hacker News
  • Essa pessoa também é criadora de um endless acid banger incrível com o qual dá para brincar por horas no navegador
    https://www.vitling.xyz/toys/acid-banger/
    Depois de experimentar isso, acabei até comprando um clone de 303 de verdade e comecei a mexer nele. Também gosto do fato de todas as demos abrirem com uma tela silenciosa de “click to start”, e de os vídeos com reprodução automática ficarem silenciados por padrão, como neste artigo

    • Nas duas páginas, a mensagem “click to start” não apareceu no meu ambiente, mas acho que deveria aparecer
      Neste artigo, eu precisava passar o mouse sobre o “silent gif” para ver o controle de volume; no acid banger, eu já estava escrevendo metade de um comentário antes de descobrir que clicar em qualquer lugar tirava o mudo
    • É mesmo um brinquedinho incrível. Além disso, fico curioso se é difícil aprender e usar um 303 mesmo sem nenhuma experiência com sintetizadores
    • Gostei do botão de mudança de tom. Para virar uma ferramenta de DJ realmente excelente, acho que ele teria de conseguir voltar para algum padrão anterior arbitrário, em vez de só seguir em frente; será que há algum botão ou opção que não encontrei?
  • É interessante ver a partitura de música generativa escrita nesse formato de especificação
    Ela é detalhada o suficiente para que, se alguém reimplementasse sua própria versão com base nessas instruções, o resultado fosse essencialmente a mesma “obra musical”, mas a interpretação certamente seria diferente. Isso porque a partitura fixa algumas partes com precisão, mas deixa outras escolhas em aberto. Ainda ficam questões como o que exatamente “todas as inversões” significa ao enumerar acordes, se isso inclui voicings abertos, de quais valores escolher o comprimento de uma forma de onda arbitrária, quão “curto” é “curto” ao decidir repetições, que sintetizador de forma de onda usar e como modulá-lo
    Essas decisões são parecidas com as escolhas que um instrumentista tradicional faz ao interpretar e tocar uma partitura. Aqui, um programador de música generativa pode seguir essa “partitura” e criar um programa com sua própria interpretação
    Implementar isso em Sonic Pi(https://sonic-pi.net/) foi um exercício divertido, e sinto que consegui criar algo próximo da direção pretendida pelo compositor. Ele carrega a mesma atmosfera da gravação no vídeo, mas, se isso faz sentido, é a minha “execução” da obra. Embora, na prática, quem toque durante a execução seja o Sonic Pi
    Esse processo também me fez repensar a relação entre especificação e implementação. Podemos ver as implementações de um algoritmo por programadores diferentes como “execuções” individuais da partitura que é o projeto geral, e desenvolvedores que criam elementos de uma arquitetura de sistema maior podem parecer músicos assumindo suas partes dentro de uma banda ou orquestra. Algumas equipes são conduzidas por um maestro/arquiteto; outras improvisam trocando riffs entre si e às vezes assumem solos. Outras ainda parecem músicos de sessão que tocam de forma pouco chamativa, mas sólida, seguindo a especificação de um produtor
    Foi um bom exercício de codificação meditativa para uma tarde de domingo, e mudou minha perspectiva

    • Acho que você captou muito bem o que eu queria fazer com a partitura, e fico feliz que a intenção tenha chegado
      Quando tentei expor um trabalho antigo, recebi feedback de uma curadora de arte; a obra era esta: https://www.vitling.xyz/welcome-to-tech-talk/. No começo ela não entendia bem o que estava acontecendo, mas, depois que expliquei como funcionava e o que acontecia por dentro, ela disse: “agora eu realmente gosto. Mas você está escondendo do público todas as partes interessantes”
      Na arte generativa, o “trabalho” que faço não é tanto o áudio ou o visual resultante, mas sim o conjunto de regras ou o algoritmo. Por isso, sempre quis encontrar uma forma de mostrar o que acontece “dentro da caixa”. Código-fonte pode ser bom, mas só para quem consegue lê-lo, e a ideia central pode acabar enterrada em boilerplate e esquisitices técnicas. Daí cheguei à ideia de escrever em forma de partitura, tentando mostrar as premissas básicas do que está acontecendo, mas sem entrar em tantos detalhes a ponto de as pessoas se perderem
    • Um dos artistas visuais procedurais de que gosto também deixa uma ambiguidade parecida nas especificações, de modo que surgem boas variações cada vez que a obra é recriada: https://www.sfmoma.org/artist/sol_lewitt/
      https://massmoca.org/event/walldrawing305/
    • Entendo que “todas as inversões” normalmente significa pegar o acorde em posição fundamental e aplicar inversões como permutações cíclicas, excluindo oitavas
      Então voicings mais abertos e espaçados provavelmente ficariam de fora
    • O acorde básico de dó maior é c4 f4 g4, e as inversões são feitas movendo a nota de baixo para cima, formando algo como f4 g4 c5 ou g4 c5 f5
      As inversões mudam bastante o sabor do acorde
    • Pelo que dá para ouvir, não parece haver acordes abertos; parece que são usados apenas acordes em que as notas seguem uma à outra sem espaços
  • Gostaria de receber recomendações de livros ou cursos de teoria musical que ajudem a entender este algoritmo ou https://www.vitling.xyz/toys/acid-banger/
    Existem algumas regras bem simples que preveem quando algo vai soar razoavelmente bem, e outras mais complexas; é famoso que a música barroca é algorítmica, mas ainda não consigo ter nenhuma intuição sobre isso
    Já procurei nessa direção antes, mas não lembro exatamente qual era o problema dos livros que vi. Acho que a maioria era básica demais e não ajudava. Há muito tempo tive um treinamento muito básico de solfejo e consigo ler partituras, mas na época eu era jovem demais para fazer as perguntas que tenho agora ou entender o propósito daquele treinamento

    • Para entender de verdade, é preciso estudar por vários ângulos. Dá para chegar lá ao longo de 1 a 10 anos com Hooktheory.com, livros e muitos vídeos no YouTube
      No fim, é difícil entender teoria musical sem escrever bastante música por conta própria. É parecido com ler um livro de JavaScript: se você nunca escreveu software e não pretende escrever, não há como realmente entender aquele livro
      Tentando explicar como este aplicativo deve funcionar, ele talvez escolha aleatoriamente um subconjunto de notas em uma tonalidade menor, isto é, graus da escala. A escala pentatônica, um subconjunto de até 5 notas de uma escala, limita o espaço de melodias possíveis de modo que a maioria das combinações soe bem. Usar menos notas torna o resultado mais previsivelmente agradável, mas pode ser menos interessante. Por exemplo, as notas que formam o acorde da tônica sempre soam bem em qualquer ordem. Linhas de acid normalmente sugerem algum acorde menor por meio de um arpejo, uma melodia repetitiva composta apenas pelas notas de um determinado acorde
      Além disso, um subconjunto de uma escala sempre pode pertencer também a outra escala. Se você cria um trecho que usa um subconjunto de notas compartilhadas e depois muda para uma nova escala, consegue modular de uma escala para outra. Desse modo, uma música pode passar por todas as escalas possíveis e, no acid techno, quase todas são escalas menores
    • O curso online Listening to Music, de Yale, cobre bastante teoria musical. Achei bem divertido de ouvir: https://online.yale.edu/courses/listening-music
    • É muito difícil começar. Para mim, é o mais parecido com matemática
      Você não consegue pegar algo escrito para alguém com um nível de entendimento acima do seu e tirar muito proveito. É preciso ler cada página devagar, de forma deliberada e humilde, dedicando tempo para compreender completamente cada termo que encontrar. Nesse processo, você acaba fazendo desvios de horas, e dentro deles outros termos se ramificam sem fim. Não dá para pular coisas como intervalo, locrian/lydian, e esperar entendê-las por osmose
    • Não é um livro introdutório típico de teoria, mas o livro de psicologia popular de Daniel J. Levitin, This Is Your Brain On Music, contém coisas parecidas com o que você está perguntando
      Ele trata do que é a altura de uma nota, por que o cérebro “gosta” de certas combinações de alturas e não de outras, etc. O livro também é interessante pelas várias teorias sobre neurologia da música, e há uma introdução bem básica à teoria no começo
    • Se você não toca um instrumento, acho que seria parecido com explicar Tetris a uma pessoa cega
  • Uma dica para o autor: se remover o Arduino e usar esta biblioteca, que permite controlar diretamente fitas WS281x a partir de um Raspberry Pi, você pode reduzir bastante a complexidade de hardware e software: https://github.com/jgarff/rpi_ws281x
    Eu uso isso em um Pi 4 para controlar, como decoração de fim de ano, uma fita WS2815 de 466 pixels instalada no beiral da minha casa

  • Há uma teoria musical interessante escondida neste projeto. Com o algoritmo descrito, toda transição de um acorde para outro é uma transição para o mesmo acorde — por exemplo, de dó maior para uma de suas inversões, ou adicionando/removendo a sétima — ou uma das três transformações básicas da teoria Neo-Riemanniana: P, L, R
    Para mais detalhes, veja a página da Wikipedia sobre Neo-Riemannian theory; o essencial sobre P, L, R é o seguinte. Se um acorde arbitrário x for maior, P(x), L(x) e R(x) serão todos menores. Se x for menor, P(x), L(x) e R(x) serão todos maiores. P, L e R são todas suas próprias transformações inversas, de modo que P(P(x)) = x, e o mesmo vale para L e R. Por alguma sequência das transformações P, L, R, é possível ir de qualquer acorde maior ou menor para qualquer outro acorde maior ou menor. Por exemplo, saindo de dó maior, aplicar L e depois R leva a sol maior; aplicar R e depois P leva a lá maior; aplicar L e depois P leva a mi maior
    Mover-se por transformações Neo-Riemannianas é uma maneira de chegar rapidamente, por meio de uma condução de vozes suave, a centros tonais “distantes”, ou seja, lugares que não compartilham muitas notas da escala com a tonalidade inicial. Mas, ao ouvir esta peça, fiquei surpreso porque a harmonia parece relativamente estável. O interessante é que, pela construção do algoritmo, a transformação P aparece com muito menos frequência do que as transformações L ou R, ou do que permanecer no mesmo acorde. A transformação P é um ingrediente-chave para se deslocar rapidamente para tonalidades distantes, mas, pelas minhas contas aproximadas, assumindo que o processo de Markov tenha chegado ao estado estacionário e ignorando os limites de altura mínima e máxima, apenas 1/27 de todas as mudanças de acorde são transformações P. No estado estacionário, também aparece que acordes com sétima são mais comuns que tríades simples na proporção de 16:11

  • Tenho curiosidade sobre os detalhes técnicos, porque quero entender melhor os limites do Raspberry Pi
    Não seria possível lidar com tudo isso usando apenas um Raspberry Pi e os muitos pinos GPIO ligados a ele? Do jeito atual, parece que o Raspberry Pi está sendo subutilizado, e simplificar para uma única placa parece melhor. Também haveria a boa consequência de precisar de apenas uma conexão de energia

    • Pensei o mesmo, mas considerei mais o Arduino em vez do Raspberry Pi
      Se o que o Pi faz é apenas “seleção de notas e síntese do próprio buffer de áudio”, um Arduino Uno certamente não conseguiria fazer isso?
    • Parece possível, mas como o código dos LEDs foi projetado para Arduino, do ponto de vista de reutilização de código ou prototipagem provavelmente era mais simples usar dois dispositivos na primeira versão
  • Gosto do fato de estar escrito em pseudocódigo, de um jeito que todo mundo consegue entender
    Eu também já fiz projetos assim, especialmente na parte de geração de música, então gostei muito dessa forma de apresentação. Seria ainda melhor se tivesse até uma demonstração em vídeo; muitos projetos de código acabam morrendo antes mesmo de a gente começar porque o autor explica tudo apenas com um longo paredão de texto

  • Muito legal. Seria ótimo ter instruções detalhadas de construção para fazer algo assim

    • Acho que agora precisa criar uma versão online. Com Web Audio e CSS transform, parece totalmente viável
  • Acho que poderia ser usado como intro de um set do Four Tet :)

  • Lindo. Faz imaginar um planeta alienígena onde as plantas são desse jeito
    Essas coisas poderiam formar uma floresta e talvez se sincronizar entre si, como metrônomos ou vaga-lumes se sincronizam

    • Se desse para construir e experimentar, seria uma instalação artística divertida :)