Multi Threading

Kunsten, at gøre flere ting samtidigt ... eller, at lade som om man gør det.

Det magiske trick hedder 'Threads' eller 'Tråde' på dansk.

I SonicPi kan vi tænke på det som flere musikkere, der spiller sammen i et band. De spiller på, hvert sit instrument og følger deres eget sæt noder. Tricket er, at få dem til, at holde takten dvs. være synkroniserede. Det skal vi også tale en del om i dag.

live_loops

Lad os starte med en simpel trommerytme:

live_loop :hihat do
  sample :drum_cymbal_closed
  sleep 0.5
end

# Hjælp vi kommer ud af takt
sleep 0.33

live_loop :drums do
  sample :drum_bass_hard, amp: 2
  sleep 1
  sample :drum_snare_hard, amp: 2
  sleep 1
end

Hvert live_loop er en musiker, men den er gal med synkroniseringen. Jeg har snydt lidt for, at fremkalde det.

Prøv, at fjerne 'sleep 0.33' uden, at trykke på 'Stop' og tryk derefter på 'Run'. Musikken er stadig ude af takt !!!

sync & cue

I rockmusik er det stor- og lilletromme, der sætter takten så vi sætter dem til, at udsende et signal (et cue) når de starter på en takt. Så kan de andre instrumenter vente på dette signal (med sync) og køre videre når de modtager signalet.

Vi prøver igen, nu med synkronisering:

live_loop :hihat do
  sync :beat
  sample :drum_cymbal_closed
  sleep 0.5
  sample :drum_cymbal_closed
end


# Wait for loops to start
sleep 0.33

live_loop :drums do
  cue :beat
  sample :drum_bass_hard, amp: 2
  sleep 1
  cue :beat
  sample :drum_snare_hard, amp: 2
  sleep 1
end

Yeah, nu rocker vi.

Scales & Functions

Lad os sætte en bas på også:

use_bpm 100

live_loop :bass do
  sync :beat
  use_synth :tb303
  
  fn_bass
  sleep 0.5
  fn_bass
end


define :fn_bass do
  play (scale :d3, :major_pentatonic, num_octaves: 1).choose,
    release: 0.25, cutoff: rrand(80, 130), amp: 0.25, res: 0.95
end


live_loop :hihat do
  sync :beat
  sample :drum_cymbal_closed, amp: 2
  sleep 0.5
  sample :drum_cymbal_closed, amp: 2
end


# Wait for loops to start
sleep 0.01

live_loop :drums do
  cue :beat
  sample :drum_bass_hard, amp: 4
  sleep 1
  cue :beat
  sample :drum_snare_hard, amp: 2
  sleep 1
end

Ligesom sidste gang, får vi computeren til, at vælge tonerne tilfældigt, men denne gang vælger den ud fra en skala. Den kan stadigvæk ikke spille falsk, men der er flere toner i en skala end i en akkord som vi brugte sidste gang.

Derudover har vi også lavet en funktion for vi giiiiiddddddeeerrrr bare ikke skrive den lange play kommando flere gange.

Melodi stemmen

Vi kan bygge melodistemmen på sammen måde som bassen, men med nogle ændringer:

  1. Vi skal vælge et andet instrument
  2. Vi skal gå 1-2 oktaver op i skalaen, men i den samme toneart
  3. Der skal mere fart på melodistemmen end på bassen.

Herunder er et færdigt eksempel på, hvordan det kan gøres.

Resourcer


Retur til StartSide