Programação Criativa Musical
berin | Bernardo Fontes
25 de Fevereiro de 2021
### Minha proposta
- Visão geral de **ferramentas**, **comunidades** e **artistas-programadores**
- Mão**S** na massa com **FoxDot**
- Quem quiser, pode adiantar a **[instalação](https://foxdot.org/installation/)** (opcional)
### Programação Criativa para Som
- Muita **diversidade** tecnológica
- Cada ferramenta/biblioteca tem **influência na estética** final
- Pedra fundamental: **SuperCollider**
- Plataforma para síntese de som e composição algorítmica
- Software livre
- scsynth: servidor para processar o som em tempo real
- sclang: linguagem interpretada para operar o servidor
- scide: IDE com vários facilitadores
- sc3-plugins: repositório colaborativo de UGens (unit generator) criados pela comunidade
- Utilizado por várias outras tecnologias para a prática de live coding
### Exemplo de código
```
// modulate a sine frequency and a noise amplitude with another sine
// whose frequency depends on the horizontal mouse pointer position
// and pink noise depends on the vertical
{
var x = SinOsc.ar(MouseX.kr(1, 100));
var y = SinOsc.ar(MouseY.kr(1, 100));
SinOsc.ar(300 * x + 800, 0, 0.1)
+
PinkNoise.ar(0.1 * y + 0.1)
}.play;
```
### Experimentando um piano
```
(
{
MdaPiano.ar(
LFNoise0.kr(1).range(20, 60).round.midicps, // random note
stereo: 0.5,
vel: LFPar.kr(0.1).range(10, 100), // varying velocity
mul: 0.2
)
}.play
)
```
### Definindo o som do nosso piano
```
(
SynthDef(\help_mdapiano, { |out=0, freq=440, gate=1|
var son = MdaPiano.ar(freq, gate, release: 0.9, stereo: 0.3, sustain: .5);
DetectSilence.ar(son, 0.01, doneAction:2);
Out.ar(out, son * 0.1);
}).add;
)
```
### Criando nossa peça
```
(
TempoClock.default.tempo = 1.2;
Ppar([
Pbind(
\instrument, \help_mdapiano,
\degree,
Pseq([
0, 7, -5, 7, 0, 5, -7, 5, -2, 5, -7, 5, -2, 3, -9, 3,
0, 7, -5, 7, 0, 5, -7, 5, -2, 5, -7, 5, -2, -3, -4, -5 ], inf),
\dur, 1.5,
\octave, 3,
\root, 3,
\vel, Prand([Pseq([100, 30, 50, 10]), Pseq([100, 30, 10, 10, 5, 10, 20, 30])], inf),
\legato, 2
),
Pbind(
\instrument, \help_mdapiano,
\degree,
Pseq([ \, 0, -1, 7, 2, 0, \, \, \, 0, -2, \, \, -2, -4, \, \ ], inf),
\dur, 0.5,
\octave, 6,
\root, 3,
\vel, Pwhite(50, 100, inf)
)
], inf).play
)
```
Opiniões e visões
- Muito verstátil e poderoso
- Comunidade ativa
- Excelente para se explorar timbres únicos
- Linguagem de programação que utiliza muito símbolos e isso pode ser confuso
- Operacional relativamente complexo para prática de live coding
- Artistas-programadores: Gil Fuser (São Paulo), bgola (Brasil/Berlim)
### Em cima do SuperCollider
- SonicPi
- TidalCycles
- **FoxDot**
- Instalação e experimentação são bem fáceis
- Muito material e tutoriais de qualidade (mehackit!!!)
- Fácil adaptação de notações da teoria da música para o código
- Artistas-programadores: Sam Aaron (criador) e Bitkids
Exemplo de código
- Comunidade muito ativa e com excelente fórum (Tidal Club)
- Linguagem minimalista favorece muito a prática de live coding
- Bastante fundamentado no uso de samples
- Escrito em Haskel, mas bem mais simplificado e acessível
- Artistas-programadores: yaxu | Alex McLean (criador), djalgoritmo, Ghales e beise.
### Exemplo de código
```
d1 $ sound "bd sd:1"
d2 $ sound "hh hh hh hh"
d3 $ sound "arpy"
```
- Escrito em Python ❤️
- Meio campo entre minimalismo experimental e notação musical "clássica"
- Já vem com um amplo conjunto de sintetizadores e samples próprios
- Fácil extensão e, por conta disso, existem vários forks do projeto
- Artistas-programadores: Qirky | Ryan Kirkbride (criador), CrashServer e Pietro Bapthysthe
- É o que vamos experimentar!
### Comunidades e Eventos
- [TOPLAP](https://toplap.org/) - organização de 2004 para promover o Live Coding
- Movimento das [Algoraves](https://algorave.com/)
- [Algorave Brasil](https://algoravebrasil.ml/)
- [CLiC](https://colectivo-de-livecoders.gitlab.io/) - Colectivo de Live Coders (Argentina)
- [flok.click.cf](https://flok.clic.cf/) - nó criado pelo CLiC utilizando o projeto [flok](https://github.com/munshkr/flok)
## **Bora fazer um som!!!**