Home

Linguaggi di programmazione per la musica e il sound design¶

Indice¶

  • IDE
  • Altezze e tempo
  • Loop
  • Strumenti e timbro
  • Soundfiles
  • Polifonia e forkling
  • Live coding
  • Aggiungere FX
  • Controllare i parametri
    • Linguaggio
    • Random
    • Sequencing
  • Approfondimenti

IDE ¶

Integrated Development Environment o ambiente di lavoro.

No description has been provided for this image

Altezze e tempo ¶

  • Selezioniamo Buffer 0 (di default)
In [ ]:
play
  • Clicchiamo sull'icona play
  • Compare un messaggio di errore
In [ ]:
play(60)
  • Clicchiamo sull'icona play
  • Udiamo un Do per 1 secondo
In [ ]:
play 60
play 64
play 67
  • Clicchiamo sull'icona play
  • Udiamo un accordo di Do maggiore per 1 secondo
  • Accordo = arpeggio velocissimo (scheduling)
In [ ]:
play 60
sleep 0.5
play 64
sleep 0.5
play 67
  • Clicchiamo sull'icona play
  • Udiamo una melodia con le note separate da 0.5 secondi (tempi delta)
  • Se vogliamo settare il BPM
In [ ]:
use_bpm 50

play 60
sleep 0.5
play 64
sleep 0.5
play 67
  • Schema di sequenza informatico (sequencing)

Argomenti¶

  • Rappresentazione altezze in MIDI Note e Hertz
  • Suoni periodici, non periodici e altezza
  • Oscilloscopio (rappresentazione e GUI in Sonic Pi)
  • Durata e Tempo delta
  • Tempo assoluto (secondi) e tempo relativo (beat)
  • Schema di sequenza
  • Settare il BPM

Esercizio¶

  • Scrivere una breve melodia
  • Scrivere una breve sequenza di accordi

Loop ¶

In [ ]:
3.times do
  play 60
  sleep 0.5
  play 62
  sleep 0.5
  play 64
  sleep 0.5
  play 60
  sleep 0.5
end
  • Attenzione all'indentazione
  • Clicchiamo sull'icona play
  • Come un ritornello musicale
  • In informatica si definisce ciclo ed è una struttura di controllo come lo schema di sequenza
  • Se vogliamo un loop infinito (pattern musicale)
In [ ]:
loop do
    play 60
    sleep 0.5
    play 64
    sleep 0.25
end
  • Clicchiamo sull'icona play
  • Clicchiamo sull'icona stop
  • Possiamo specificare le altezze anche con la notazione alfabetica anglosassone
In [ ]:
play :c4
sleep 0.25
play :ds4
sleep 0.25
play :e4
sleep 0.25
play :f4
sleep 0.25
play :gf4
sleep 0.25
play :g4
sleep 0.25
play :a4
sleep 0.25
play :b4
sleep 0.25

play :c4
play :e4
play :g4
play :c5
  • Clicchiamo sull'icona play
  • f = flat (bemolle)
  • s = sharp (diesis)

Argomenti¶

  • Indentazione
  • Ciclo e Ritornello
  • Notazione alfabetica per le altezze

Esercizio¶

  • Scrivere una breve melodia con all'interno dei ritornelli consecutivi, oltre alle note singole includere anche bicordi e tricordi

Strumenti e timbro ¶

  • Il suono che abbiamo sentito è stato generato dallo strumento di default che si chiama beep
  • Possiamo modificarlo con la seguente sintassi: use_synth :nome_del_synth
In [ ]:
use_synth :fm

    loop do
        play 60
        sleep 0.5
        play 67
        sleep 0.5
    end
  • Clicchiamo sull'icona play
  • Clicchiamo sull'icona stop
  • Esplorariamo il timbro dei diversi synth che abbiamo a disposizione cliccando sull’icona help in alto e poi su Synth in basso a sinistra

Argomenti¶

  • Il timbro restituisce informazioni sulla sorgente sonora
  • Cenni sul teorema di Fourier e alla DFT
  • Dimensione del tempo $\rightarrow$ rappresentazione come forma d'onda
  • Dimensione dello spettro $\rightarrow$ rappresentazione come spettrogramma

Esercizio¶

  • Realizzare uno o più brevi sound design con strumenti cercati tra quelli a disposizione cercando di sfruttarne le caratteristiche sonore

Soundfiles ¶

  • Eseguiamo dei soundfiles in playback
In [ ]:
sample :loop_amen
  • Clicchiamo sull'icona play
  • I soundfile hanno una loro durata assoluta
  • Se vogliamo metterli in loop possiamo recuperarla automaticamente e settarla come beat (1.0)
In [ ]:
use_sample_bpm :loop_amen      # 1 = lunghezza del sound file

2.times do
    sample :loop_amen
    sleep 1
end
  • Se settiamo un valore in bpm senza recuperarlo dal sound file questo vale solo per i valori di sleep (tempi delta)
  • La durata del sound file non viene modificata (stretching) come in Audacity o altre DAW
In [ ]:
use_bpm 50

loop do
  sample :loop_amen        # Durata non modificata
  sleep 1                  # 1 beat a 50 bpm
end
  • Troviamo una collezione di soundfiles disponibili nel menù Campioni in basso a sinistra
  • Se invece vogliamo caricare dei nostri soundfiles dobbiamo specificare il percorso assoluto (path)
In [ ]:
sample "/Users/andreavigani/Desktop/musicaecodice/anew/didattica/media/bach.wav"

Argomenti¶

  • Playback
  • Monofonia e polifonia realizzate con il rapporto tra durate e tempi delta
  • Allocazione dinamica delle voci (come un pianoforte)
  • Loop musicali come struttura formale
  • Path percorso informatico

Esercizio¶

  • Realizzare dei loop (monofonici e polifonici) attraverso la riproduzione (playback) di soundfiles propri o della collezione nativa di Sonic Pi

Polifonia e forkling (Multithread)¶

  • Se vogliamo sovrapporre più voci (allocazione statica delle voci) possiamo sincronizzarle allo stesso beat
In [ ]:
use_sample_bpm :loop_amen      # 1 = lunghezza del sound file

in_thread do                   # Voce 1
    loop do
        sample :loop_amen
        sleep 1
    end
end

in_thread do                   # Voce 2
    16.times do
        play 75
        sleep 0.5
        play 74
        sleep 0.5
    end
end
  • Clicchiamo sull'icona play
  • Clicchiamo sull'icona stop

Argomenti¶

  • Thread o processo
  • Sincronizzazione (monoritmia)
  • Suddivisioni del beat
  • Polifonia e Poliritmia

Esercizio¶

  • Realizzare un breve brano a più voci indipendenti
  • Ogni voce può essere eseguita da uno strumento diverso oppure contenere il playback di un soundfile in loop o meno.

Live coding¶

  • Computer come strumento musicale
  • Nuova forma musicale e nuova forma di rappresentazione
  • Improvvisazione musicale scrivendo il codice al volo (on the fly coding)
In [ ]:
use_bpm 50

define :play_my_synth do    # Definisce una funzione
  use_synth :prophet
  play 55
  sleep 0.25
end

loop do
  play_my_synth             # La richiama
end
  • Clicchiamo sull'icona play
  • Commentiamo il blocco di codice che definisce il loop inserendo # all'inizio di ogni linea
  • Modifichiamo uno o più parametri
  • Clicchiamo nuovamente sull'icona playy

Argomenti¶

  • Live coding
  • Funzione
  • Commenti

Esercizio¶

  • Predisporre un ambiente per l'improvvisazione definendo diversi pattern musicali sotto forma di funzioni
  • Ogni funzione può contenere un synth che esegue un pattern musicale oppure un soundfile
  • Ogni funzione può essere richiamata all'interno dello stesso loop oppure possiamo predisporre dei forkling come illustrato nel paragrafo dedicato
  • Realizzare con questo ambiente una piccola improvvisazione modificando i parametri dei loop o dei synth

Aggiungere FX (Effetti)¶

  • Modificano un suono in ingresso
  • Riverberi, equalizzatori, delay, distorsori
  • Includiamo i generatori di suono in un blocco FX
  • Player $\rightarrow$ Riverbero $\rightarrow$ Dac
In [ ]:
with_fx :reverb do
    sample :guit_e_fifths
end
  • Possiamo indentarli
  • Il blocco che li racchiude è l'ultimo
  • Player $\rightarrow$ Distorsore $\rightarrow$ Riverbero $\rightarrow$ Dac
In [ ]:
with_fx :reverb do
    with_fx :distortion do
        sample :guit_e_fifths
    end
end
  • Troviamo gli effetti disponibili nel menù Effetti in basso a sinistra

Argomenti¶

  • Catene audio
  • Generatori e modificatori
  • Funzioni d'onda e funzioni di trasferimento
  • Effetti a cascata o in parallelo (side chain)

Esercizio¶

  • Prototipare alcuni strumenti virtuali costruendo l'algoritmo di sintesi attraverso una catena audio
  • Impiegare configurazioni a cascata e/o in parallelo
  • Applicare un Riverbero a tutti gli strumenti

Controllare i parametri¶

  • Possiamo modificare dinamicamente i parametri di Synth, sampler e FX
  • Troviamo una lista dei parametri modificabili di ognuno nel suo help file
  • Per ogni parametro sono specificati i valori di default
  • Alcuni parametri sono propri dello strumento impiegato, altri degli oggetti del linguaggio (come play)

Linguaggio¶

  • Troviamo tutti gli oggetti da utilizzare nella sintassi del codice nel menù Linguaggio in basso a sinistra
  • Gli help file ne illustrano le caratteristiche e propongono degli esempi
  • A titolo esemplificativo apriamo play
In [ ]:
use_bpm 92

loop do
  use_synth :dpulse
  play 55, env_curve: 7, cutoff: 130, pan: -0.5
  sleep 0.5
end

Random¶

  • Funzioni non deterministiche per modificare i parametri
In [ ]:
use_bpm 92
use_synth :dpulse

loop do
  play chord( :a3, :minor).choose,
    attack: 0.01,
    decay: rrand(0.01,0.2),
    cutoff: rrand(40,131),
    pan: rrand(-1,1),
    amp: rand(0.3)
  sleep 0.2
end
  • Esercizio - scegliere un Synth o un FX e programmare un sound design che impieghi controlli dei parametri non deterministici (esplorare quello a disposizione)

Sequencing¶

  • Sequenze deterministiche per modificare i programmi
  • Partiture informatiche
In [ ]:
bpm = 120
use_synth :pluck

live_loop :ciccio do
  use_bpm bpm
  play_pattern [:D4,:D4,:A4,:A4,:B4,:B4] # tempo = 1
  play :A4
  sleep 2
  play_pattern [67,67,66,66,64,64]
  play chord(:D5, :M)
  sleep 2
end

sleep 2   # aspetta 2 beat a 120
bpm = 82  # risetta il tempo metronomico

# Siccome il live_loop ha lo stesso nome sostituisce il precedente

live_loop :ciccio do  # altezze                      suddivisioni
  use_bpm bpm
  play_pattern_timed [:D4,:D4,:A4,:A4,:B4,:B4,:A4], [1,1,1,1,1,1,2]
  play_pattern_timed [67,67,66,66,64,64,62], [1,1,1,1,1,1,2]
end

Argomenti¶

  • Cotrollo dei parametri
  • Stocastica e Determinismo
  • Sequencing
  • Partiture informatiche

Esercizio¶

  • Realizzare un sound design complesso
  • Realizzare un live coding musicalmente articolato
  • Realizzare materiali audio da montare successivamente su una DAW

Approfondimenti¶

  • Tutorials
  • Workshop