Você já viu aquelas listas de empregos que estão procurando por um "JavaScript Rock Star" e provavelmente revirou os olhos. Parece bobagem pensar que qualquer habilidade que você tenha na programação vai te fazer aparecer na Rolling Stone. Além disso, esse é o novo passo para a programação.
A menos que você seja Sam Aaron, isso é. Ele é o criador do Sonic Pi, uma linguagem de codificação ao vivo para fazer música. É um projeto de código aberto que ele construiu que cria música a partir do código em tempo real. O mundo da música está tomando conhecimento: a Rolling Stone o descreveu como "transcendendo o presente" quando ele se apresentou no mesmo festival que Grimes.
Sonic Pi trabalha em simples loops de código. Você entra em alguns comandos que indicam batidas, melodias e amostras para tocar. Esses comandos são processados através de um backend sintetizador chamado SuperCollider. A essência disso é loop e repetição, mas se você mudar o código durante a performance, a música muda também. É uma maneira simples e poderosa de colocar qualquer um em funcionamento com música eletrônica ou conceitos básicos de programação.
"Se você é um programador que não sabe nada sobre música, então Sonic Pi pode ajudá-lo com isso", disse Aaron. "Se você é um músico, que não sabe nada sobre programação, Sonic Pi pode ajudá-lo com isso. E se você não sabe nada sobre qualquer um, você tem uma jornada divertida e emocionante pela frente.
Em seu rosto, é gloriosamente simples. Tão simples, que uma criança de 10 anos pode usá-lo. Sob o capô, há alguns desafios técnicos surpreendentes para fazer uma linguagem como esta funcionar.
Começos
Antes de Sonic Pi, Aaron e seu amigo Jeff Rose criaram Overtone, outra linguagem de codificação ao vivo construída em Clojure. Este projeto aumentou seu interesse em linguagens específicas de domínio, que foi tema de sua tese de doutorado na Universidade de Newcastle. Ele continuou trabalhando em Overtone como pesquisador na Universidade de Cambridge. No entanto, o dinheiro para essa posição estava se esgotando, então Aaron sabia que teria que encontrar outra coisa para fazer.
Foi quando ele se deparou com um projeto de três meses da Broadcom Foundation — designers por trás do chip do Raspberry Pi — para construir algo para envolver mais as crianças na codificação. "Eu coloquei minha mão para cima e disse, eu acho que eu poderia fazer algo com isso. Talvez eu possa tomar overtone e torná-lo mais leve, mais simples, e reduzir a funcionalidade, mas focalizar especificamente em crianças."
Essa ideia acabou por ser mais ambiciosa do que ele pensava. Ele inicialmente assumiu que o projeto de três meses seria produzir um protótipo. Mas na primeira reunião, eles queriam um protótipo, um professor, uma escola, planos de aula, e uma corrida naquela sala de aula com sua ajuda. Isso significava que tinha que ser um sistema testado em batalha em pleno funcionamento pronto para ser usado por uma sala de aula cheia de crianças.
Raspberry Pi versão 1 foi projetado para ser de baixo custo e acessível, o que também significava que ele era de baixa potência. Aaron inicialmente tentou uma porta reta de Overtone usando Clojure. Levou sete minutos para os namespaces carregarem. "A implementação do Overtone não foi projetada para a velocidade para a baixa potência do Raspberry Pi 1", disse Aaron, "mas também o Raspberry Pi 1 tinha um suporte JVM muito, muito pobre na época. Por exemplo, os pontos flutuantes não eram suportados no hardware e eram apenas software. Felizmente as coisas melhoraram muito desde aqueles primeiros dias."
Aaron mudou para Ruby, que teve um bom desempenho no hardware e também foi flexível. Na verdade, é tão flexível, que você pode modificar a própria linguagem para atender às suas necessidades. "Linguagens flexíveis como ruby podem ser massageados no domínio em que você deseja trabalhar", disse Aarom. "Assim, Sonic Pi pode ser visto como tendo Ruby como um pedaço de argila, e moldando-o em um instrumento musical."
O protótipo acabou por ser a parte fácil. O código da primeira versão inicial levou duas semanas para ser concluído. A interface gráfica, a linguagem, o tempo de execução foram todos concluídos rapidamente. "Era apenas um sistema muito, muito, muito simples", disse Aaron. "Tudo o que ele fez foi bip."
Quando as crianças de verdade conseguiram o protótipo, entenderam como funcionava e queriam mais. "O que realmente me surpreendeu nas aulas é que as crianças diriam: 'Oh, este é um ritmo de bateria legal ou este é um baixo legal'", disse Aaron. "E eles estavam dizendo: 'Como eu toco bateria ao mesmo tempo que o baixo?' O sistema não tinha sido projetado para isso. Isso não está no currículo de ciência da computação do Reino Unido. Mas era uma pergunta tão comum. Eu pensei, bem, vamos apenas adicioná-lo dentro .
Com a concorrência veio muito sob a complexidade do capô. Revelou algumas dificuldades fundamentais que os computadores têm com um tempo preciso. Uma vez que ele introduziu vários segmentos, eles rapidamente se afastam de sincronia.
Seja simples.
Inicialmente, Aaron usou o sono POSIX para gerenciar o tempo. Mas como a maioria das operações programadas de sono, esta operação fez com que o computador dormisse pelo menos uma vez T, em seguida, executar a próxima operação quando o agendador de idioma interno o pegou de volta. "Atualmente, os computadores são apenas sobre o rendimento, não sobre latência e tempo", disse Aaron. Cada atraso se somaria para jogar fora o tempo pior e pior à medida que a música progredia.
A solução de Aaron foi construir esse atraso interno nos comandos do sono. Cada vez que você chama um comando de sono, ele rastreia quanto tempo leva para se recuperar. Em vez de dormir pelo tempo T, ele dorme para T menos qualquer tempo adicional que os cálculos anteriores levaram. Compensa a deriva automaticamente. SuperCollider, o sintetizador que realmente tocava os sons, foi capaz de aceitar timestamps. Isso significava que a linguagem seria um pouco à frente dos sons que produziu. "Não é gerenciar o tempo", disse Aaron, "é gerenciar a ideia do tempo, quando as coisas devem acontecer e, em seguida, defini-las ligeiramente antes do tempo para que o sintetizador honre esses tempos tão bem quanto pode."
Todo esse trabalho duro para criar este tempo é em grande parte invisível para o usuário final. Para eles, é um simples conjunto de loops ao vivo que qualquer um pode entender. "As restrições originais ou o problema", disse Aaron, "que era construir algo que pudesse envolver crianças de 10 anos em uma aula de ciência da computação, é um conjunto fabuloso de restrições de design, não apenas adequadas para esse ambiente, mas também para boates. Tornando sonic Pi fácil de ensinar em uma sala de aula acabou por também facilitar a performance depois que você tomou algumas cervejas e você está no palco às 2:00 da manhã em uma boate."
Essa mentalidade ficou com ele por algumas outras características complicadas. Inspirado por bateria e baixo dos anos 80 e 90, Aaron queria ser capaz de fazer uma pausa na bateria e cortá-la em amostras individuais de tambores. Ele começou com uma solução que leva seis linhas de código, mas ao longo do próximo ano, repensa-a para uma que usa apenas quatro caracteres. "É realmente uma ideia simples", disse Aaron. "É uma daquelas coisas em que uma vez que você descobre, é: 'Ah, eu deveria ter feito isso o tempo todo', e isso é tratar uma quebra de bateria como uma lista de hits de bateria." Agora você pode fazer uma pausa de Amém,processá-lo muito rápido, e tratá-lo como uma matriz.
Outro avanço foi um sistema que facilitou a aplicação de efeitos como reverb ou distorção. Como guitarrista, tenho que comprar um pedal ou uma prancha de pedais, correr um monte de fios, e viver com minhas escolhas. Em Sonic Pi, eu só fedo um bloco em with_fx: reverb ou qualquer que seja o efeito que eu quero é. "Toda vez que ele vê esse comando reverb", disse Aaron, "ele vai e compra um novo pedal e define esse efeito ou codifica-o na memória e, em seguida, executa-o, faz toda a fiação automaticamente." O sistema descobre quando você termina com o efeito, ele o lixo o recolhe. Você não precisa se preocupar com limites, uso de memória ou localização de negócios.
"É muito divertido, mas os processos de pensamento e a quantidade de esforço necessário para obter uma ideia complicada em uma forma simples, é esforço", disse Aaron. "Mas uma vez que você conseguiu isso, então você tem algo que não é apenas simples de explicar e manter e usar, mas é algo que você pode usar para então chegar a novas ideias e construir coisas novas muito mais eficazmente do que você poderia com as coisas antigas."
A batida continua
A Fundação Raspberry Pi apoiou Aaron por vários anos, e nesse tempo, ele foi capaz de adicionar muitas características, mas também trabalhar nas fundações. "Estou usando ruby, que não é conhecido por ser a linguagem mais eficiente", disse Aaron. Muito esforço foi feito para caching mensagens duplicadas e tornando a comunicação subjacente com SuperCollider, o sintetizador e motor MIDI, muito eficiente dentro das restrições de Ruby. Mas mesmo com o cache, um sintetizador com um relógio MIDI ativo poderia inundar o sistema com muitas mensagens de tempo.
Há limites, e é por isso que ele está reconstruindo a fundação de baixo nível em Rust. Com o maior rendimento que rust permite, Aaron vê a possibilidade de uma linguagem intermediária em Sonic Pi, algo que os usuários nunca vêem, mas que qualquer ferramenta voltada para o usuário compila. "Isso significa que o Sonic Pi pode começar a se tornar uma plataforma-alvo para outras línguas experimentais", disse Aaron.
Ele tem trabalhado com Thor Magnusson na Universidade de Sussex, o criador de Ixi lang, outra linguagem de codificação ao vivo para música, em uma interface para Sonic Pi. "É muito mínimo em escopo, mas super rápido em uma oficina para fazer as pessoas fazerem melodias e ritmos", disse Aaron. "Há muito poucos toques de teclas. Construímos uma versão mínima de Ixi Lang, que será na próxima versão do Sonic Pi."
Ao fortalecer as fundações, Aaron vê a possibilidade de mais bibliotecas de alto nível construídas em cima dela, até mesmo coisas selvagens como o encadeamento de Markov e a assistência à IA. Escorvar os fundamentos do tempo e dos eventos, garantindo que o mesmo código produza a mesma música todas as vezes, significa que recursos de alto nível permanecerão simples e fáceis de entender. "Se eu estou construindo muita coisa em um nível alto, tudo vai desmoronar", disse Aaron. Isso é importante, porque no final da estrada, Aaron planeja adicionar interferência distribuída para que você e seu amigo possam codificar em CEP separados e balançar a mesma melodia.
Música++
Muitas pessoas usaram Sonic Pi para criar projetos musicais impressionantes. Há toda uma cena no Japão fazendo música em espaços vr com Sonic Pi. Uma mulher na Índia está fazendo música tradicional com ela. Uma mulher no Canadá fez uma ópera inteira. E um cara na Finlândia tem feito música incrivelmente heavy metal, aproveitando a precisão do tempo para balançar com pedais duplos e assinaturas de tempo loucos.
O próprio Aaron também se apresenta um pouco, tanto em festivais de música quanto em conferências de programação. Desde que o financiamento da Fundação Raspberry Pi acabou, tem sido uma de suas principais fontes de apoio para continuar desenvolvendo Sonic Pi. Ele até chegou a se apresentar no Royal Albert Hall ao lado de uma orquestra e vocalistas. "Ser reconhecido em um nível semelhante é uma conquista real para mim", disse Aaron. "Eu sempre achei muito estranho que quando eu fui para as escolas, os professores de ciência da computação estavam super animados como, 'Sim! Esta é uma ferramenta que podemos educar nossos filhos. Enquanto os professores de música muitas vezes eram: 'Ooh, este não é um instrumento musical real.'"
Mesmo Aaron era duvidoso que poderia ser uma saída criativa real, para substituir sua ferramenta principal, Overtone. Foi construído para crianças, e talvez não tão poderoso, mas a barreira de entrada era muito menor. "Embora fosse muito menos poderoso em um sentido técnico", disse Aaron, "era uma ferramenta muito mais poderosa porque era muito mais fácil ir de ideias na minha cabeça para código na tela, música fora dos alto-falantes. Isso levou momentos, enquanto Overtone levará semanas.
Se você estiver interessado em experimentá-lo, vá até o site da Sonic Pi. Há uma comunidade ativa lá, e Aaron tem colocado um monte de trabalho para tornar os tutoriais eficientes e eficazes. Se você gosta do que ele está fazendo, considere doar para seu Patreon ou contratá-lo para sua conferência. E se você está procurando fazer algumas geleias doces em seu quarto, baixe, componha e compartilhe suas músicas nos comentários.
O Avance Network é uma comunidade fácil de usar que fornece segurança de primeira e não requer muito conhecimento técnico. Com uma conta, você pode proteger sua comunicação e seus dispositivos. O Avance Network não mantém registros de seus dados; portanto, você pode ter certeza de que tudo o que sai do seu dispositivo chega ao outro lado sem inspeção.