Você está na página 1de 75

Música dos códigos:

Uma Introdução amigável ao Sonic Pi


Ivan Eiji Simurra
Música dos códigos:

Uma Introdução amigável ao Sonic Pi


Ivan Eiji Simurra

Inspirado por Jon Witts http://www.jonwitts.co.uk/archives/755, e por Sam Aaron https://sonic-pi.net/.


Nesta mini-curso você irá...
● Criar sons digitando textos (prompts) no Sonic Pi
● Criar laços de uma música para que se repita
● Mudar sons utilizando diferentes sintetizadores e arquivos
de áudio

Além disso, você também pode aprender sobre:

● ‘threading’ - Quando o programa executará mais de uma função ao


mesmo tempo e em sincronia
Este é o Sam Aaron.
Ele desenvolveu Sonic Pi.

Fonte: http://www.bettshow.com/seminar/Raspberry-Pi-Watch-this-space
Vamos começar!

Depois de instalado…

https://sonic-pi.net/

… abra o Programa
Executar o Programa Alterar o tamanho do editor de texto do
Janela de Ajuda
Parar o Programa Código
Salvar o Código
Gravar sua Música Habilitar visualização Confgurações
Carregar um Código dos sons criados

Janela de
Painel de Programação
Visualização dos
(onde você vai escrever
sons criados
seus códigos)

Painel do relatório de
Atividades (log)

Painel da Tabela do Conteúdo da Ajuda Painel da Ajuda


Buffers (0-9) podem ser utilizados para armazenar suas músicas escritas no
Sonic Pi.
Modo Escuro!
Vamos fazer um som
Escreva play :c4 e aperte ‘Run’
Vamos tentar Três Sons...
O que irá acontecer?

play :c4
play :g4
play :e4
Notações em Sonic Pi

As notas a seguir podem ser usadas:

:C, :Db, :D, :Eb, :E, :F, :Gb, :G, :Ab, :A, :Bb, :B
Tocando notas diferentes em Oitavas
difrentes

play :A2 play :G4 play :D7

Basta adicionar um número após o símbolo de nota! Por


exemplo, play :C4
:nota+s+oitava para sustenido e :nota+b(f)+oitava para bemol
Vamos incluir algum silêncio!
play :c4
Então aperte ‘Run’ novamente
sleep 0.5
Um intervalo de
silêncio de meio
pulso antes de
tocar a próxima
nota

play :d4
E a relação com notação musical…
considerando a semínima = 60

Semibreve Mínima Semínima Colcheia Semicolcheia


E algumas notas a mais...
Você consegue
ouvir a sequência?
Tocando uma melodia

Você pode usar números entre 0 e 127


como notas com o comando play.

Os números representam as notas do


piano. Se você estiver familiarizado com a
notação musical tradicional, também pode
usar o seguinte...
Outras possibilidades para incluir notas...

play 60
sleep 1
play 64
sleep 1
play 67
Repetindo frases
Algumas estruturas

loop, x.times ou live_loop do

end
Repetindo frases
loop No Sonic Pi, quando usamos loop, estamos dizendo:
"Continue tocando essas notas ou sequência de
notas para sempre, até que eu lhe diga para parar".

loop do Enquanto o loop pode parecer uma ferramenta útil, e


realmente é, é preciso ter cuidado ao usá-lo no Sonic
play :C4
Pi. Porque ele não tem um mecanismo de
sleep 1 sincronização.
end
Pode ser fácil perder o controle de seu código ou
enfrentar problemas de timing.
Repetindo frases

play :C4
sleep 1

}
4.times do
play :E4 Áreas indexadas
são denominadas
sleep 0.5 como “blocos de
play :G4 códigos”
sleep 0.5
end
Repetindo frases

}
x.alguma coisa do
O Áreas indexadas
são denominadas
bloco como “blocos de
que se quer códigos”
dentro da estrutura
end
Adicione outras notas
depois da sua estrutura
de bloco de código:
Repetindo frases
live_loop
O live_loop é uma ferramenta especial no Sonic Pi que permite que você repita uma
seção de código musical indefinidamente, garantindo que ela continue tocando em
sincronia com outros live_loops que você pode ter em sua composição.

Permite que você "mixe" diferentes seções de música ao vivo, adicionando, modificando
ou removendo partes, tudo enquanto a música continua tocando.
live_loop :batida do Como funciona?
play :C
sleep 1 Nome Único: Cada live_loop precisa ter um nome único para que o Sonic Pi saiba
diferenciá-lo dos outros.
end
Tempo: Dentro de cada live_loop, é essencial que a duração do código seja
consistente. Se você diz ao live_loop para dormir (usando a função sleep) por 4
batidas, tudo dentro dele deve somar exatamente essas 4 batidas.

Sincronização: Usando o comando sync, você pode fazer um live_loop esperar outro
terminar, garantindo que eles estejam perfeitamente alinhados.
Repetindo frases
Diferenças entre:
loop: X.times: live_loop:
● Este é um loop “infinito” ● Esta é uma construção nativa que
● Esta é uma construção específica do Sonic Pi,
ideal para performances ao vivo de código.
● Ele repetirá o bloco de código que executa o bloco de código um ● Ele possui um mecanismo embutido para manter
ele contém indefinidamente. número específico de vezes. No o loop sincronizado no tempo. Se o bloco de
código interno leva mais tempo para ser
● No contexto do Sonic Pi, usar um exemplo 4.times, o bloco de código executado do que o valor do sleep no final do loop,
loop puro pode não ser ideal, pois seria repetido quatro vezes. o Sonic Pi ajustará automaticamente o tempo de
● É determinístico e não infinito. início da próxima iteração para manter a
pode levar a problemas de
sincronização.
sincronização e timings ● Cada live_loop deve ter um nome único para
indeterminados. que possa ser referenciado e, se necessário,
sincronizado com outros live_loop.
● Ele é projetado para ser usado em situações ao
vivo, onde os loops podem ser modificados e
re-executados sem parar o fluxo da música.
loop do 4.times do
play:C4 play:C4
sleep 1 sleep 1 live_loop :melody do
end end play:C4
sleep 1
end
Vamos construir essa...

É Frère
Jacques!
Você também pode usar repetições dentro de
repetições, se desejar:

4.times do
4.times do
Primeiro bloco play :c4
a ser
executado sleep 0.25
Segundo bloco a ser
executado
end
considerando toda a
estrutura interna
play :d4
sleep 0.5
play :f4
sleep 0.5
end
Alterando o tempo
Vamos adicionar o seguinte
comando antes de iniciar a
inclusão das notas:

use_bpm 120
“Praticando 1.1”

Escreva uma melodia em


Sonic Pi com pelo menos
8 notas que se repetem
Mudando o Parâmetro de intensidade
Um dos parâmetros mais play 50, amp: 0.1
trabalhados inicialmente:
sleep 0.25
play 55, amp: 0.2
sleep 0.25
Em Sonic Pi: [0-1]
play 57, amp: 0.4
sleep 0.25
play 62, amp: 1
Mudando o Parâmetro de intensidade
Construindo uma estrutura de # Definindo a amplitude inicial
intensidade de acordo com os amp = 0.2
blocos de repetição
# Loop para repetir 5 vezes
5.times do
play :E4, amp: amp
sleep 1
amp += 0.2
end
Controlando outros parâmetros

Por exemplo:
Pan
play :c2, amp: 0.5, pan: -1 #monitor à esquerda
play :c2, amp: 0.5, pan: 1 #monitor à direita

play :c2, amp: 0.5, pan: 0 #Centro


Controlando outros parâmetros

Por exemplo:
tempo de início e tempo de fim
play :c2, attack: 1, release: 1
#a nota tem duração mais longa
Mudando o som (timbre)
Volte para o início do seu código e
adicione esta nova linha:

use_synth
Experimente diferentes sabores de sons.
Existem muitos sons de sintetizador diferentes no
Sonic Pi.
Aqui estão alguns dos meus favoritos:

fm, dsaw, prophet, tb303, pulse,


pretty_bell, mod_fm
Alternando os sabores
use_synth :blade
play :C4
sleep 0.25
use_synth :pulse
play :C2
sleep 0.25
use_synth :chiplead
play :G3
sleep 0.25
“Praticando 1.2”

Escreva três melodias em Sonic


Pi com pelo menos 8 notas e
com timbres diferentes que se
repetem e depois faça duas
repetições da estrutura inteira
Criando acordes
Algumas alternativas:

1: Primeiro exemplo play 52


play 55
play 59
Criando acordes
Algumas alternativas:

2: Como Lista play [52, 55, 59]


ou
play [:E3, :G3, :B3]
Criando acordes
Algumas alternativas:

3: Como Função play_chord chord(:E3, :minor)


Estrutura:

play_chord chord(fundamental, característica)


“Estrutura de sobreposição” – in_thread
use_bpm 120
# Linha de Baixo
in_thread do
use_synth :tri
4.times do
play :C2, release: 0.75
sleep 1

É como se estivéssemos iniciando um play :A1, release: 0.75


sleep 1
play :F2, release: 0.75

grupo musical independente dentro de


sleep 1
play :G2, release: 0.75
sleep 1
end

nossa orquestra digital. end


# Acordes
in_thread do
use_synth :piano
4.times do
play chord(:C, :major), release: 2
sleep 2
play chord(:A, :minor), release: 2
sleep 2
end
end
# Melodia pop rock

Cada "grupo" pode tocar sua parte, sem in_thread do


use_synth :blade
4.times do
play :E4, release: 0.5
esperar que os outros terminem, sleep 0.5
play :G4, release: 0.5
sleep 0.5

permitindo a criação de várias linhas play :F4, release: 0.5


sleep 0.5
play :E4, release: 0.5
sleep 0.5

musicais que acontecem ao mesmo play :D4, release: 0.5


sleep 0.5
play :F4, release: 0.5

tempo.
sleep 0.5
play :E4, release: 0.5
sleep 0.5
play :D4, release: 0.5
sleep 0.5
end
end
Se quiser, salve suas músicas...
No nosso próximo encontro…
Vamos trabalhar com samples e efeitos?
Sonic Pi Encontro 2
Trabalhando com arquivos de áudio e efeitos
Atividade 1:
Um simples
resumo
Último código de ontem.
# Melodia pop rock
in_thread do
use_synth :blade
use_bpm 120 4.times do
use_synth :tri play :E4, release: 0.5
sleep 0.5
# Linha de Baixo # Acordes play :G4, release: 0.5
in_thread do in_thread do sleep 0.5
4.times do use_synth :piano play :F4, release: 0.5
play :C2, release: 0.75 4.times do sleep 0.5
sleep 1 play chord(:C, :major), release: 2 play :E4, release: 0.5
play :A1, release: 0.75 sleep 2 sleep 0.5
sleep 1 play chord(:A, :minor), release: 2 play :D4, release: 0.5
play :F2, release: 0.75 sleep 2 sleep 0.5
sleep 1 end play :F4, release: 0.5
play :G2, release: 0.75 end sleep 0.5
sleep 1 play :E4, release: 0.5
end sleep 0.5
end play :D4, release: 0.5
sleep 0.5
end
end
Atividade 2:
Samples
Tocando samples 1

Por exemplo:

sample :bd_fat
sample :ambi_lunar_land
sample :ambi_piano
sample :ambi_choir
Tocando samples 2

Por exemplo:

sample :drum_heavy_kick
sample :drum_snare_hard
sample :drum_cymbal_closed
sample :drum_cymbal_pedal
Tocando samples 3
Por exemplo:
live_loop :drums do
sample :drum_heavy_kick
sleep 1
end

live_loop :drums do
sample :drum_heavy_kick
sleep 1
sample :drum_snare_hard
sleep 1
sample :drum_heavy_kick live_loop :hihat do

sleep 1 sample :drum_cymbal_closed

sample :drum_snare_hard sleep 0.25

sleep 1 sample :drum_cymbal_pedal

end sleep 1
end
Samples
Sonic Pi tem muitos samples (sons curtos e pré-gravados) embutidos. Eles estão
listados na seção de ajuda

live_loop :algum_nome do

sample :ambi_piano

sleep 2

end
Agora vamos alterar os parâmetros dos samples...
Assim como nos parâmetros já vistos (amplitude, pan, attack e release, temos!

“Rate” para alterar a velocidade da reprodução.

live_loop :algum_nome do

sample :loop_amen, rate: 1

sleep 2

end
Agora vamos alterar os parâmetros dos samples...
Assim como nos parâmetros já vistos (amplitude, pan, attack e release, temos!

“Rate” para alterar a velocidade da reprodução.

live_loop :algum_nome do

sample :loop_amen, rate: 2 (dobro da velocidade)

sleep 2

end
Agora vamos alterar os parâmetros dos samples...
Assim como nos parâmetros já vistos (amplitude, pan, attack e release, temos!

“Rate” para alterar a velocidade da reprodução.

live_loop :algum_nome do

sample :loop_amen, rate: 0.5 (metade mais lento)

sleep 2

end
Agora vamos alterar os parâmetros dos samples...
Assim como nos parâmetros já vistos (amplitude, pan, attack e release, temos!

“Rate” para alterar a velocidade da reprodução.

live_loop :algum_nome do

sample :loop_amen, rate: -1 (tocando invertido?)

sleep 2

end
“Praticando Looping”

Crie um programa com o


Sonic Pi que tem pelo
menos dois
live_loops tocando no
ao mesmo tempo!
Samples do armazenamento local ...1
Então, como você reproduz qualquer arquivo arbitrário WAV, AIFF ou FLAC
no seu computador? Tudo o que você precisa fazer é passar o caminho
desse arquivo para a função sample:

# Raspberry Pi, Mac, Linux

sample "/…/my-sound.wav"

# Windows

sample "C:/…wav/my-sound.wav"
Samples do armazenamento local ...2
Então, como você reproduz qualquer arquivo arbitrário WAV, AIFF ou FLAC
no seu computador? Tudo o que você precisa fazer é passar o caminho
desse arquivo para a função sample:

Utilizando pastas com diversos arquivos

pasta = "/path/to/my/samples/"

sample pasta, 0 #o número indica a posição do arquivo no diretório


“Praticando com Samples”

Toque com seus próprios


arquivos de áudio e com
controles de parâmetros!
Atividade 3:
Escolhas
“aleatórias” e
efeitos
Uma ótima maneira de adicionar algum interesse à sua música é
usando alguns números aleatórios. Sonic Pi tem algumas ótimas
funcionalidades para adicionar aleatoriedade à sua música, mas
antes de começarmos precisamos aprender uma verdade chocante:
em Sonic Pi aleatório não é verdadeiramente aleatório

play rrand(50, 95)

live_loop :algum_nome do
play rrand(50, 95)
sleep 0.5
end
aleatório não é verdadeiramente aleatório

live_loop :algum_nome do
sample :perc_bell, rate: (rrand 0.125, 1.5)

sleep rrand(0.2, 2)

end

use_synth :tb303

live_loop :algum_nome do
play 50, release: 0.1, cutoff: rrand(60, 120)
use_random_seed 40 sleep 0.125
5.times do end
play rrand(50, 100)
sleep 0.5
end
choose live_loop :algum_nome do
maneiras
diferentes play (chord :c, :major).choose
live_loop :algum_nome do

play choose([60, 65, 72]) sleep [0.25, 0.25, 0.5, 1].choose

sleep 1 end

end
play rrand_i(50, 95) inteiros

loop do Mudando a oitava live_loop :melody do


if one_in(6)
use_octave [0, 1].choose use_transpose 2
else 1 em …?
play [:c, :e, :g].choose use_transpose 0
end
sleep [0.25, 0.25, 0.5, 1].choose play_pattern_timed [:c4, :e4, :f4, :g4, :f4,
:e4, :f4, :g4, :f4, :e4, :f4], [0.25, 0.25,
end 0.25, 1.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25],
attack: 0, release: 0.2
end
E os efeitos sonoros?

$0.00
Processadores de Efeitos
with_fx :reverb do
...
end

with_fx :echo do
...
end

with_fx :distortion do
...
end
3º - Infos sobre
efeitos
1º - Em Ajuda

2º - Lista de efeitos
...Vamos testar alguns efeitos:
live_loop :effects do
with_fx :reverb do
play 50
sleep 0.5
sample :elec_plip
sleep 0.5
play 62
end
end
...Vamos testar alguns efeitos aninhados?
live_loop :effects do live_loop :effects do
with_fx :wobble do
with_fx :reverb do
with_fx :slicer do
play 50 with_fx :reverb do
play 50
sleep 0.5
sleep 0.5
sample :elec_plip sample :elec_plip
sleep 0.5 sleep 0.5
play 62
play 62
end
end end

end end
end
Atividade 4:
Variáveis,
Estrutura de dados,
Condicionais
s = 60

Variáveis play s, amp: 0.75


sleep 1
s = play 60, release: 5 play s + 1, amp: 0.75
sleep 1
play s + 1, amp: 0.75
sleep 1

print s

s = 60

s = play 60, release: 5 play s, amp: 0.75


sleep 0.5 sleep 1
control s, note: 65 s = s + 0.5
play s, amp: 0.75
sleep 0.5 sleep 1
control s, note: 67 s = s + 0.5
sleep 3 play s, amp: 0.75
control s, note: 72 sleep 1

print s
Adicionando aleatoriedade (pseudo, lembra?):
use_synth :tb303
loop do
play choose(chord(:E3, :minor)), release: 0.3, cutoff: rrand(60, 120)
sleep 0.25
end

loop do
play (chord :c, :major).choose
sleep [0.25, 0.25, 0.5, 1].choose
end
n=1 n=1

Se…. outro… 3.times do


play 60
3.times do
play 60
sleep 0.5 sleep 0.5
if play 60 play 60
sleep 1 sleep 1
if n == 1 if n == 1
else 2.times do 2.times do
play 67 play 67
sleep 0.5 sleep 0.5
play 67 play 67
sleep 0.5 sleep 0.5
play 65 play 65
sleep 0.5 sleep 0.5
n=2 n = rrand_i(1,3)
end end
else if n == 2 else if n == 2
2.times do 2.times do
play 62 play 62
sleep 0.5 sleep 0.5
play 62 play 62
sleep 0.5 sleep 0.5
n=7 n=7
end end
end end
end end
end end
Não há 'isso é
errado' …
Live Coding?
ou
Próximo
Laboratório?
encontro ?
(vejo vcs na
próxima…)
Further places of Sonic Pi enlightenment
Raspberry Pi introduction lesson
https://www.raspberrypi.org/learning/getting-started-with-sonic-pi/

Official web site


http://sonic-pi.net

Hanno Zulla’s amazing resources


https://gist.github.com/hzulla/cf9165ba15342e5df9b3

The help files!


There’s an amazing amount built-in to Sonic Pi itself >
Sam Aaron’s TEDx talk
Compelling argument
for why we should
learn to code even
though most of us will
not become
professional
programmers:

Você também pode gostar