Introdución a Sonic Pi

O computador como instrumento

Asociación DATA

Que é a asociación DATA?

DATA é o acrónimo de
Dezás Amigos das Tecnoloxías Abertas.
Unha asociación para a difusión do coñecemento de tecnoloxías baseadas no software libre, hardware libre, cultura libre, ...

Que é Sonic Pi?

“Sonic Pi é unha contorna de programación de código aberto, deseñada para explorar e aprender conceptos de programación a través do proceso de creación de novos sons. É un sintetizador libre para todo o mundo creado por Sam Aaron.”

Descarga

Raspberry pi ???

Que é Raspberry Pi?

Raspberry Pi é un computador baixo custo desenvolvido co obxectivo de estimular a ensinanza de ciencias da computación nas escolas.
Raspberry Pi
Esquema de Raspberry Pi

Software educativo

Distintos sistemas operativos son soportados por Raspberry Pi, o máis habitual é "raspbian", unha versión de Debian (GNU/Linux).

  • Sonic Pi
  • Scratch
  • Minecraft
  • ...

Interface

Interface de Sonic Pi

Linguaxe de programación Ruby

Atallos de teclado

Alt + R Executar (Run)
Alt + S Parar (Stop)
Alt + / (Des)comentar código
Ctrl + i Información da palabra seleccionada

Imos dar a nota


						# Escribimos o seguinte código no editor
						# a linguaxe de programación é Ruby
						play 60 # Tamén podemos poñer :C , 'C' ou :C4
						

Equivalencia numérica das notas

Equivalencia numérica das notas

Notación anglosaxona

Notación anglosaxona
Notación anglosaxona

Cal é o Do central?

Do central, ¿C3 o C4?

Silencios

Unha escala (versión play + sleep)


	play 60  # Do equivale a :C ou :C4
	sleep 1
	play 62 # Re, :D
	sleep 1
	play 64 # 'Mi', :E
	sleep 1
	play 65 # 'Fa', :F
	sleep 1
	# ... 67 'Sol', 69 'La', 71 'Si'
	play 72 # 'Do'
	sleep 1
						

Unha escala (versión play_pattern)


# As notas como números nunha lista entre corchetes
# e separados por unha coma
escala=[60, 62, 64, 65, 67, 69, 71, 72]

# As notas como notación anglosaxona, OLLO ao :C5
#escala=[:C, :D, :E, :F, :G, :A, :B, :C5]
play_pattern escala

# Alterando duración
duracion=[0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]
# Outra forma de escribir a liña anterior
#duracion=Array.new(8, 0.5)

play_pattern_timed notas, duracion
						

Unha escala (versión play_pattern + scale)


play_pattern scale(:C, :diatonic)

Silencio dentro dunha lista

A letra :R (rest) equivale a un silencio


play_pattern [:c, :d, :e, :f, :r, :g, :a, :b]

Acordes (chord)

Un acorde é unha lista de notas que se executan á vez


# As dúas liñas son equivalentes
#play [:d, :f, :a, :c5]
play chord(:d, :minor7)
					

Instrumentos (use_synth)


use_synth :beep # Por defecto
play 60

# Outros synth
# :prophet
# :dsaw
# :fm
# :tb303
# :pulse
					

Imos "programar" unha canción

  1. Ritmo de batería
  2. Pista do baixo
  3. Pista principal
  4. Engadimos "improvisación" (aleatoriedade)

Ritmo de batería (live_loop e sample)

Os "samples" son pequenas mostras de són que podemos empregar. Sonic pi vén cun conxunto de mostras pero podemos empregar as nosas.


	live_loop :drums do
	  sample :drum_heavy_kick
	  sleep 1
	end
						

Ritmo de batería (bombo e caixa)


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

Ritmo de batería (charles)


live_loop :hihat do
  sample :drum_cymbal_closed
  sleep 0.25
  sample :drum_cymbal_pedal
  sleep 1
end
						

Pista baixo (ADSR)


live_loop :bass do
  use_synth :fm
  play :c2, attack: 0, release: 0.25
  sleep 0.25
  play :c2, attack: 0, release: 0.3
  sleep 2
  play :e2
  sleep 0.75
  play :f2
  sleep 1
end

ADSR (attack, decay, sustain, release)

Pista principal (play_pattern_timed)


live_loop :melody do
  play_pattern_timed
		[:c4, :e4, :f4, :g4, :f4, :e4, :f4, :g4, :f4, :e4, :f4],
		[0.25, 0.25, 0.25, 1.5, 0.25, 0.25,0.25, 0.25, 0.25, 0.25]
end
						

"Improvisación" (one_in e use_transpose)


live_loop :melody do
  if one_in(6)
    use_transpose 2
  else
    use_transpose 0
  end
  play_pattern_timed
		[:c4, :e4, :f4, :g4, :f4, :e4, :f4, :g4, :f4, :e4, :f4],
		[0.25, 0.25, 0.25, 1.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25],
		attack: 0,
		release: 0.2
end

Escoller unha nota dunha lista (choose)


live_loop :bass do
  use_synth :tb303
  play (chord :C2, :major).choose,
	  release: 0.125, cutoff: rrand(60, 110)
  sleep 0.25
end

Máis opcións de play (amp, pan, cutoff, pitch)


# Control do volume (amp) e control estereo (pan: 0, 1 ou -1)
play 60, amp: 0.8, pan: -1
sleep 1

# Eliminar frecuencia -130
use_synth :tb303
play 60, cutoff: 100
sleep 1

# Misturado con ADSR
use_synth :prophet
play 60, attack: 1, sustain: 1, pan: -1, cutoff: 90, amp: 0.8
						

Efectos (with_fx)


use_bpm 180
use_synth :beep
# Variar os valores de room entre 0 e 1
with_fx :reverb, room: 0.9 do
	play :c, sustain: 4, pan: -1, amp: 0.6, cutoff: 120
	sleep 1

	play :e, sustain: 3, pan: 1, amp: 0.7, cutoff: 110
	sleep 1

	play :g, sustain: 2, pan: 0, amp: 0.8, cutoff: 100
	sleep 1

	play :c5, release: 1
end
						

Escalas (scale, tick, choose, live_loop)

Unha escala é unha lista de notas que se executa unha detrás da outra de xeito ascendente


live_loop :escala do
	play (scale :c, :diatonic).tick
	sleep 1
	play (scale :c, :diatonic).choose
	sleep 1
end
						

Funcións para listas: ring, tick, shuffle, choose,...


# Lista de acordes
prg=[chord(:d,:m7), chord(:e,:m7), chord(:d,:m7), chord(:G,:M7)]
prg=prg.shuffle
anel=prog.ring
live_loop :acordes do
  play anel.tick, attack: 0.25, release: 0.25, sustain: 1
  sleep 1.5
end
						

Progresións de acordes

http://www.lotusmusic.com/chord-progression-map.html

Funcións para listas: ring, tick, shuffle, choose,...


# Lista de notas
notas= scale :a, :minor_pentatonic, num_octaves: 2
notas=notas.shuffle
anel=notas.ring

live_loop :acordes do
  play anel.tick, attack: 0.25, release: 0.25, sustain: 1
  sleep 1.5
end
						

Sons personalizados (sample e pitch)


trompeta='/ruta/ao/ficheiro/trumpet_cs5.wav'
tonos=[0,2,4,5,7,9,11,12]
8.times do
  sample trompeta, sustain: 0.5, release: 0.5, pitch: tonos.tick
  sleep 1
end
						

Demostracións do que se pode facer con Sonic Pi

Exemplos de Robin Newman

  • Marenzio
  • Doctor Who

Referencias

Grazas pola atención