Met Sonic Pi kun je muziek programmeren als code! In deze instructie gaan we wat muziek maken, passend in de maand december.
Introductie
Sonic Pi is een programma geschreven door Sam Aaron en het Sonic Pi Core team. Je kunt er muziek in programmeren en zelfs live muziek in aanpassen terwijl het speelt!
In deze instructie leren we hoe je muziek kunt maken in Sonic Pi op basis van bladmuziek van eenvoudige liedjes passend in de maand december. We maken Sinterklaas Kapoentje en Klink klokje klingelingeling. Je leert ook hoe je zelf op basis van bladmuziek muziek kunt programmeren.
Wat heb je nodig?
Downloaden
Tijdens de dojo kun je het installatiebestand sneller downloaden van de CoderDojo server:
download
Sonic Pi is eventueel ook te downloaden van de site https://sonic-pi.net/.
Er zijn officiële versies voor Windows, MacOS en Raspberry Pi OS. Er is ook een onofficiële versie voor Linux.
Let er bij het downloaden voor de MacOS versie op dat je de juiste versie pakt, die voor ARM voor recente MacBooks met Apple Silicon en die voor Intel voor oudere.
Installeren
Voor de installatie van de Windows en MacOS versies moet je het gedownloade bestand uitvoeren. Volg de instructies tijdens de installatie.
Gebruik
Na het starten van Sonic Pi is het programma mogelijk in het Engels. Zoek dan in het menu naar “Language” en kies “Nederlands”. Je moet het programma dan even herstarten en krijgt het dan in Nederlands.

Hoe je code schrijft in Sonic Pi
Voordat we naar liedjes kijken, verkennen we eerst even Sonic Pi zelf. Probeer de onderstaande voorbeelden door ze in te typen of te kopiëren en druk elke keer op run om het te horen. Maak vervolgens aanpassingen en luister naar wat er verandert. Sonic Pi is het leukst als je ermee experimenteert, maak vooral fouten en luister goed naar wat wel en niet werkt.
| |
Druk nu op de run knop. Wat hoor je?
Deze code selecteert een piano geluid en speelt de toon C. De 4 geeft aan hoe hoog de C moet zijn. Probeer daar eens een 3 of 5 van te maken en luister naar het verschil. Maak van de C een andere letter zoals G of D en luister naar het verschil. Je kunt ook andere geluiden gebruiken dan piano, probeer eens :saw of :fm en luister naar het verschil. Andere klanken vind je
hier
:dull_bell
:pretty_bell
:beep
:sine
:saw
:pulse
:subpulse
:square
:tri
:dsaw
:dpulse
:dtri
:fm
:mod_fm
:mod_saw
:mod_dsaw
:mod_sine
:mod_beep
:mod_tri
:mod_pulse
:tb303
:supersaw
:hoover
:prophet
:zawa
:dark_ambience
:growl
:hollow
:mono_player
:stereo_player
:blade
:piano
:pluck
:sound_in
:noise
:pnoise
:bnoise
:gnoise
:cnoise
:basic_mono_player
:basic_stereo_player
:basic_mixer
:main_mixer
Meer noten
Probeer de onderstaande code eens en druk op run. Hoor je wat je verwacht?
| |
Er spelen drie noten tegelijk! Dit noemen we een akkoord. Probeer eens hoe het klinkt als je hier de toon van elke noot aan past. Wat klinkt mooit en wat klinkt niet mooi?
Tot nu toe hebben we geluid, maar nog geen muziek. Om een melodie te maken, moet Sonic Pi even wachten tussen elke noot. Dat doen we zo:
| |
Met de sleep commando zeg je tegen Sonic Pi dat het 1 tel moet wachten. Hoe lang een tel duurt, wordt bepaald door je bpm: Beats Per Minute, oftewel tellen per minuut. Door dit getal hoger of lager te maken gaat je muziek sneller of langzamer. Kun je de muziek 2x zo snel maken? Of 2x zo langzaam? En wat gebeurt er als je sleep een hoger getal geeft? Of een lager getal?
Let op dat je met programmeren een punt gebruikt in plaats van een komma. Als je bijvoorbeeld een halve tel wilt wachten in plaats van een hele tel, schrijf je 0.5
Programmeren in Sonic Pi
Nu dat je de basis kent, is het tijd om het wat interessanter te maken. Probeer dit eens:
| |
Dit bevat wat nieuwe elementen:
- De
live_loopzorgt ervoor dat de muziek zich blijft herhalen - De
decayzorgt ervoor dat de noot iets langer wordt aangehouden. Probeer ook eens decay met de andere tonen. En speel eens met het getal achter decay en de sleep die erop volgt. - De laatste sleep duurt langer dan de eerste twee, bij elkaar opgeteld kom je tot 4. Als je muziektheorie kent, herken je een 4/4 (vier kwarts) maatsoort. Hier komen we straks op terug.
De live loop is het hart van Sonic Pi. Je kunt meerdere live_loops gebruiken om je muziek gelaagd te maken. Let op dat je niet tussendoor op stop hoeft te klikken, de muziek blijft in de maat:
| |
Het begin is nog hetzelfde, maar nu hebben we twee live loops: een melodie en een beat. De beat gebruikt samples om een soort drumstel te maken. Elke loop heeft een naam, die we kunnen gebruiken om te syncen. Sync zorgt ervoor dat de loops gelijk blijven. Wat gebeurt er als je die regel weg haalt? En wat gebeurt er als je meer sleeps of meer samples in de tweede loop zet?
Ter afsluiting, laten we nog een effect eronder gooien. Laat je code hetzelfde en voeg deze code eronder toe:
| |
Deze sample heeft wel power! Begrijp je alle code tot nu toe? Je kunt nog andere samples verkennen in de Help van Sonic Pi. Er is vanalles, wat je muziek echt tot leven brengt!
Speel hier nog even mee door, of ga verder met deze tekst, want nu weet je genoeg over de code om liedjes te gaan maken!
Twee voorbeelden
We hebben 2 voorbeelden uitgewerkt voor gebruik in Sonic Pi.
De voorbeelden komen beide van https://www.pianokinderliedjes.nl.
Sinterklaas Kapoentje

Als je bladmuziek kan lezen, heb je misschien al een idee hoe je dit naar Sonic Pi kan overschrijven. Zo niet, dan helpen we je nog even op weg:

Wat we hier uit halen:
- De maatsoort is 3/4, dat betekent dat er drie tellen in de maat zijn en elke tel is een kwart noot (1/4)
- Een kwart noot kun je dus noteren als
sleep 1 - Een halve noot kun je noteren als
sleep 2 - Een rust betekent nog een extra tel wachten voordat de muziek verder gaat, dus in dit geval
sleep 3 - We hebben handig de toonhoogtes in letters erboven geschreven, de G toon in Sonic Pi is dus
play :g4
Nu zou je het hele liedje moeten kunnen schrijven in Sonic Pi. Misschien vind je dat nog moeilijk, dus kun je hier onder spieken hoe wij dat hebben gedaan. Voordat je verder leest, probeer het toch maar even
Nog één opmerking voordat we alles uit de kast trekken: we vinden 3 tellen per maat best wel langzaam, dus kiezen wij ervoor om 1 tel per maat te nemen. Dat combineert ook leuker met de beat van de vorige oefening. Om dat te doen moeten we rekenen: elke kwart noot delen we door drie.
Dit is hoe wij het hebben gedaan, er zitten een paar nieuwe trucjes in die we nog niet verteld hebben:
| |
Dit zijn de nieuwe trucjes:
- Met
kwart_noot = 1.0 / 3definiëren we een variabele, met een berekening van hoe lang een kwart noot duurt. - De halve_noot en hele_maat zijn ook variabelen, hoe lang ze duren hangt af van hoe lang de kwart_noot duurt. Als je dus de timing wilt veranderen, hoef je alleen de kwart_noot te veranderen!
2.times dozorgt ervoor dat het eerste stukje twee keer gespeeld wordt.- De
;zorgt ervoor dat we play en sleep op 1 regel kunnen zetten.
Probeer nu eens een beat eronder te zetten, kun je een mooie remix maken?
Zelf aan de slag
Ben je klaar om zelf een liedje om te schrijven? Om in de kerst sfeer te komen, hebben we voor het volgende liedje ook alle tonen erboven geschreven.
Kling klokje klingeling

Probeer dit nu zelf om te schrijven. Je kunt weer spieken hoe wij het hebben gedaan, maar probeer het eerst zelf. Verken de Help van Sonic Pi om te ontdekken wat je nog meer kan gebruiken.
Tip: zoek op in de Help hoe je een functie definiëert. Omdat de eerste regel zich herhaalt in het lied, kun je de functie later weer aan roepen om die regel niet 2x uit te hoeven schrijven.
Klap dit uit om onze versie te zien
| |
Goed gedaan!
Meer muziek: https://www.pianokinderliedjes.nl/index.php
Tutorial: https://sonic-pi.net/tutorial.html
Licentie
Deze instructies worden, net als alle andere instructies van CoderDojo Nijmegen, aangeboden onder een Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Licentie.
