Making Music with Text: Audible Programming with Sonic Pi
This is a modal window.
The media could not be loaded, either because the server or network failed or because the format is not supported.
Formal Metadata
Title |
| |
Title of Series | ||
Number of Parts | 12 | |
Author | ||
License | CC Attribution 4.0 International: You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor. | |
Identifiers | 10.5446/40461 (DOI) | |
Publisher | ||
Release Date | ||
Language | ||
Producer |
Content Metadata
Subject Area | |
Genre |
2nd Sonoj convention, 201810 / 12
4
12
00:00
Supersonic speedComputer programmingMusical ensembleBitProgrammer (hardware)Software developerComputer programmingJSONLecture/ConferenceMeeting/Interview
01:12
AeroelasticityNormed vector spaceThread (computing)Meta elementSupersonic speedPhase transitionLoop (music)Mountain passSmoothingNewton's law of universal gravitationMusical ensembleMultiplicationCurve fittingComputer fileoutputFunction (mathematics)Event horizonSystem programmingMotion captureSystem callBitArtificial lifeDemosceneSource codeXMLComputer animation
02:07
Thread (computing)Normed vector spaceLoop (music)Sample (statistics)Bit rateAeroelasticitySynchronizationFunction (mathematics)Convex hullVotingCellular automatonCurvatureRange (statistics)Computer multitaskingMathematicsError messagePhase transitionInterior (topology)12 (number)Computer iconSupersonic speedPolygon meshASCIIProgrammable read-only memoryPort scannerProduct requirements documentLaceTrailSupremumWindowMenu (computing)Control flowAreaDivisor (algebraic geometry)SCSISlide ruleDefault (computer science)Wechselseitige InformationFingerprintMusical ensembleSource codeXML
11:31
Function (mathematics)Sample (statistics)Control flowBit rateArmChi-squared distributionWeightSynchronizationDefault (computer science)Convex hullCurve fittingLoop (music)Divisor (algebraic geometry)Thread (computing)Supersonic speedRoyal NavyDocument Type DefinitionDisk read-and-write headView (database)DialectDecision tree learningSCSIManufacturing execution systemLevel (video gaming)Core dumpGamma functionNormed vector spaceData modelComputer iconMultitier architectureRing (mathematics)Single-precision floating-point formatDuality (mathematics)Cost curveKerr-LösungMenu (computing)IntelRun time (program lifecycle phase)Error messageData bufferLine (geometry)Simulated annealingExecution unitEmulationLarge eddy simulationMach's principleAsynchronous Transfer ModeSlide ruleMassPersonal identification numberPointer (computer programming)AeroelasticityBounded variationRule of inferenceMIDISampling (music)Computer multitaskingSmith chartMaizeAtomic nucleusPiRange (statistics)Scalable Coherent InterfaceAnnulus (mathematics)Optical disc driveTotal S.A.MUDDemo (music)Programmable logic arrayBraidDigital image correlationMaxima and minimaEstimation5 (number)Intrusion detection systemUsabilityFingerprintHash functionTablet computerInclusion mapTrigonometryMusical ensembleSource codeXML
20:56
Computer programmingDisk read-and-write headVideo gameOrder (biology)Software developerMusical ensemblePoint cloudIntegrated development environmentProjective planeSupersonic speedArtificial lifeBitMoment (mathematics)Source codeXMLMeeting/Interview
22:59
Decision tree learningSupersonic speedDisk read-and-write headPointer (computer programming)Motion captureBetti numberEvent horizonSystem programmingReal numberNewton's law of universal gravitationFunction (mathematics)outputSystem callHacker (term)Standard Generalized Markup LanguageMusical ensembleMultiplicationMaß <Mathematik>Supersonic speedCollisionInheritance (object-oriented programming)Function (mathematics)Workstation <Musikinstrument>Musical ensembleTraffic reportingData managementComputer configurationSampling (statistics)Polar coordinate systemText editorLetterpress printingXML
24:10
Thread (computing)Decision tree learningSupersonic speedCodeControl flowLoop (music)Text editorWritingSupersonic speedTranslation (relic)Buffer solutionSinc functionRevision controlMusical ensembleHypermediaLevel (video gaming)Positional notationParameter (computer programming)Instance (computer science)Medical imagingSqueeze theoremField (computer science)WordFamilyLecture/Conference
25:19
Thread (computing)Loop (music)WebsiteUniformer RaumBEEPImage warpingChemical equationFluxDefault (computer science)Sanitary sewerDivisor (algebraic geometry)Mathematical singularitySupersonic speedSineComputer iconError messageRun time (program lifecycle phase)Line (geometry)Data bufferGame controllerSoftwareTrailSystem programmingField (computer science)Musical ensembleLoop (music)CollisionSpecial unitary groupTwitterPRINCE2Data compressionTheorySet (mathematics)Hand fanVideoconferencingMaxima and minimaMereologyOffice suiteCodeOpen sourceParameter (computer programming)TelecommunicationInstance (computer science)MiniDiscSupersonic speedStatement (computer science)MathematicsClosed setComputer programmingSineBEEPThermal conductivityMIDIDefault (computer science)Thread (computing)Object-oriented programmingNumberProgrammschleifeOscillationQuicksortArrow of timeOverlay-NetzLecture/ConferenceComputer animation
30:06
Error messageRun time (program lifecycle phase)Variable (mathematics)Divisor (algebraic geometry)Supersonic speedLoop (music)Thread (computing)Data bufferLoop (music)QuicksortThread (computing)Multiplication signProgrammschleifeInstance (computer science)Mixed realityMusical ensembleSupersonic speedRun time (program lifecycle phase)FamilyTransformation (genetics)Lecture/ConferenceMeeting/InterviewXML
31:56
Divisor (algebraic geometry)Supersonic speedGamma functionError messageRun time (program lifecycle phase)Chord (peer-to-peer)Computer fileChi-squared distributionLoop (music)Programmable read-only memoryDuality (mathematics)UsabilityThread (computing)Digital filterCurveChord (peer-to-peer)QuicksortNumberOctaveElectronic mailing listRandomizationGame theoryProcess (computing)Musical ensembleHacker (term)Row (database)Computer animation
34:53
Divisor (algebraic geometry)Chord (peer-to-peer)Loop (music)Supersonic speedSample (statistics)Lie groupThread (computing)Computer multitaskingMenu (computing)Gamma functionBit rateBeat (acoustics)Planar graphMeasurementElectronic mailing listMusical ensembleVideoconferencingSpecial unitary groupSpacetimeProjective planeAreaGraph coloringInstance (computer science)PlanningData managementMathematicsBitSubsetControl flowMeasurementWritingSampling (statistics)Beat (acoustics)Multiplication signRing (mathematics)Loop (music)Object-oriented programmingProgram slicingLecture/ConferenceXML
40:06
Bit rateLoop (music)Sample (statistics)Computer multitaskingConvex hullError messageoutputSanitary sewerAnnulus (mathematics)Supersonic speedDressing (medical)Polygon meshExecution unitMultiplication signThread (computing)CurvatureMultiplication signBit rateRevision controlArtificial neural networkProgrammer (hardware)1 (number)Beat (acoustics)Code2 (number)Dependent and independent variablesWeb 2.0Disk read-and-write headMetropolitan area networkMusical ensembleEvent horizonPoint (geometry)Data managementCue sportsWebsiteComputer programmingVideo gameKey (cryptography)Uniformer RaumWitt algebraXML
45:12
Reading (process)Source codeCategory of beingSupersonic speedContent (media)Order (biology)Sampling (statistics)Type theoryMultiplication signFunctional programmingSupersonic speedComputer programmingLoop (music)Right angleSoftwareRow (database)TrailProgrammschleifeInterface (computing)Physical lawBeat (acoustics)Software developerWordNetwork topologyMusical ensembleLecture/Conference
48:16
Chemical equationSupersonic speedCoding theoryState of matterSign (mathematics)Computer iconConvex hullThumbnailTrailBeat (acoustics)WeightMusical ensembleDrum memoryComputer configurationSupersonic speedTablet computerVideoconferencingAndroid (robot)Different (Kate Ryan album)Row (database)Computer animation
49:15
Control flowProgrammschleifeVideoconferencingDrum memorySampling (statistics)Video gameBit2 (number)Software developerComputer programmingRow (database)Functional programmingMultiplication signMusical ensembleDifferent (Kate Ryan album)Sample (statistics)Library (computing)Control flowIntegrated development environmentArtificial lifeSupersonic speedImage resolutionPresentation of a groupTelecommunicationDirectory serviceMeeting/Interview
52:39
Sample (statistics)WindowRevision controlSampling (statistics)Term (mathematics)Type theoryFormal languageMusical ensembleAxiom of choiceSource codeXML
53:40
Sample (statistics)CodeWechselseitige InformationSupersonic speedLoop (music)Phase transitionControl flowMechatronicsOnline helpProcess (computing)MechatronicsBitInstance (computer science)Workstation <Musikinstrument>Constructor (object-oriented programming)Lecture/ConferenceMeeting/InterviewXML
54:53
Supersonic speedRange (statistics)Inversion (music)Chord (peer-to-peer)Loop (music)BEEPThetafunktionState of matterNormed vector spaceDefault (computer science)Sample (statistics)Inclusion mapDampingThread (computing)Disk read-and-write headConvex hullMathematical singularityChord (peer-to-peer)Loop (music)System programmingText editorQuicksortMusical ensembleDrag (physics)Sound effectMachine visionDemosceneDrop (liquid)Computer animation
57:07
Chord (peer-to-peer)Type theoryInversion (music)Supersonic speedComputer configurationNumberLecture/Conference
58:26
Degree (graph theory)BitChord (peer-to-peer)Natural numberComputer configurationIntegerPolar coordinate systemMusical ensembleSystem callCore dumpComputer animation
59:26
Sampling (statistics)Artificial lifeQuicksortYouTubeProgrammer (hardware)CondensationComputer programmingVideoconferencingVideo gameLecture/Conference
01:00:18
Loop (music)Data compressionCodePositional notationQuicksortParameter (computer programming)Function (mathematics)Sound effectXMLJSON
01:02:08
Scaling (geometry)Inheritance (object-oriented programming)Statement (computer science)CollisionElectronic mailing listLecture/Conference
01:04:20
Electronic mailing listScaling (geometry)WritingSheaf (mathematics)Open sourceFormal languageXMLLecture/ConferenceMeeting/Interview
01:05:20
JSONXMLUML
Transcript: English(auto-generated)
00:10
We've heard some really nice talks, and I'm a bit intimidated because there was a lot of talking about good sound,
00:22
and I know that there are also some programmers here, and I'm not a programmer, and I'm not a sound engineer, but I dare to make music with Sonic Pi, and I decided that before I talk about this program and give you a bit of an introduction,
00:40
because I'm quite sure that quite a few of you will try it out after you've seen what can be done with it, I would like to make some live coding, so to make some music, and I would ask you to...
01:01
I will need about 20 minutes to develop this piece, and this is actually what you could call the new genre live coding. Are there some of you who have already heard about live coding or are live coders?
01:20
Ah, OK. So I just start, and you hopefully listen, and then I'm going to step a bit back and go into the program and explain a bit what I've done, but this will be a quiet thing, at least soon.
01:58
Just checking everything.
02:00
You see, that's, by the way, Carla, I thankfully am able to use.
21:12
Thank you very much, that went rather well. As you can see, everything can go wrong, because it's more or less live coded,
21:20
although a bit rehearsed, I must admit. So this is Sonic Pi, and Sonic Pi was developed by Sam Aaron. Sam Aaron, he used to work at the University of Cambridge, he's a developer, and he was asked by the Cambridge University
21:41
and also by the Raspberry Pi Foundation whether he could do something in order to facilitate that children in England could learn programming without actually having to program. So it was a project that started, I'm not quite sure,
22:02
I think, 2012. I learned about Sonic Pi in 2013. Sam Aaron had already developed a live coding environment called Overtone, which is much more complicated.
22:22
So actually, you have to set up the whole thing, it works with Clojure, and the moment you play just one note, you have already spent two days just setting the system up. And so he said, this is not suitable for children.
22:42
But on the other hand, he wanted to create something where children learn programming without actually, just with having fun. And just to let you know how you start, or you can start working with Sonic Pi,
23:02
let's go through the program and you'll see how it works and what you can do with it. Let me just make sure one thing that we have. Ah, that's the explanation why the output was a bit overdriven, because actually I put the sound from Super Collider,
23:24
Channel 1 and Channel 2, which I should have removed, but I didn't. Sorry for that. So this actually tells you something about Sonic Pi. Beneath Sonic Pi, Super Collider runs. So Super Collider is, it might be,
23:43
some of you might know this, it's actually a very powerful sound engine. It's equipped with everything you need, so oscillators, filters, sample, management options
24:04
and things like that. This lies beneath Sonic Pi, and Sonic Pi itself has an editor, as you see, it's just a text editor. It has, well, this is a rather awkward translation. It says Puffer, for German, for buffer.
24:22
So these are buffers, so you can switch the workplaces, write code, and on the other hand, you have the logs. Actually, so Sonic Pi tells you what it's actually doing right now, and you can also, no, I need the press.
24:43
You can also see the cues Sonic Pi is sending, which is interesting, because Sonic Pi is now capable of, since version three, so since about a year, is able to send MIDI and to send OSC signals,
25:02
as well as receive them, which makes it expandable. So for instance, here I have my little new Blofeld. I still don't know how it works. I just tried it out, but I brought it with me so that I can give you a little demonstration
25:21
that you believe me, that you can, I can control the Blofeld synthesizer with Sonic Pi, as well as naturally every software synthesizer you are running on the system. So, but to start, so actually starting at Sonic Pi
25:40
is very easy, and you do the things you mostly like. One thing is play, and let's say 60, and the other thing is sleep. So that's actually all you need. And as Sam Aaron always says,
26:03
all you need to reproduce the whole culture of music, Western music, you need pitches and you need time. And this will sound like that. So very interesting, but nevertheless, it works.
26:23
These are MIDI numbers, so I can change these, and I have points, and this is MIDI C, number 60, or I can have a D at the end. And it's separated by the sleeps.
26:41
You can use different, so for everything in Sonic Pi, there's a default setting. So we have already a running synthesizer in the background, which is just a sine oscillator. It's called beep, beep or sine. And I could, for instance, switch the synthesizer
27:00
and say, I want, this is the beep. So you will not hear any changes because this is the default, but you could, for instance, say, I want a sawtooth. Oops. There's also an FM synthesizer.
27:23
These are quite basic sounds, but you can tweak them. So for instance, if I say use synth defaults and say depth one, so actually these parameters are like knobs
27:44
on my synthesizer, which I turn. Let's add some depth, and you see the sound changes. So what you now can also can hear
28:00
that if I evaluate the code, because anytime I evaluate the code, it will be played. And it creates sort of overlays because these are all threads running in the background. I can separate these or I can, and this is what I'd like to show,
28:20
I can use a construct which is totally new, totally new loop. It's only used in Phonic Pine, it's called live loop. I had this typo on the forum, I said, love loop. So could also be, this is my test loop.
28:41
And now I can, if I also add the synth definition into the, if I put it into the loop and I close the loop, I can, and let's just remove one of the notes.
29:01
I could also set, for instance, for the whole buffer, something like BPM, conduct 20. So if I now change the synth and re-evaluate, you see how the live playing is done.
29:22
Because while the loop is playing, it's evaluating the new parameters I just inserted. If I, for instance, do something wrong, you see in this case, it will just stop the loop
29:42
because it doesn't know what to play. But if I have other live loops, they will go on. So this is necessary if you are on an Algorave, so people are dancing to your music and you have just started to set up your live loops and then you make an arrow
30:01
and suddenly the whole music stops. This just doesn't work. There's already a question. Yes, this is actually the live loop.
30:22
Just, it's just one thread and it renews the thread, what's running within the thread. So that's one thing, especially about the live loop. Yeah, then it's sort of adding up new threads. There is actually two,
30:41
if you do, if you try to make music with Sonic Pi, there are, for me at least, two concepts. You could say, I use in thread, which means you can make a song which runs a certain runtime or you are working with live loops, which I prefer. So you actually have, all the time you have running live loops,
31:01
you can stop them and you sort of mix them together, stop them if you want them and re-evaluate them again and they are going to play again with the other live loops. You can synchronize the live loops, which I did because I have, for instance,
31:20
running a bass phrase which runs for about two bars and I want them to synchronize with my synthesizer. And so I can sort of make them listen to each other or to a thing like a metronome live loop. So this is just counting two bars, for instance.
31:42
How much time have we left? Okay, so the next interesting thing is, you see, I can now create melodies just with play and sleep. I can do something else.
32:01
I can, for instance, say I have a bunch of notes. Let's do the following. I can, for instance, say I have a chord. I can also use note names. So I can, for instance, write C. And I can say a chord C minor.
32:25
Let's sleep. So now we have the chord. Let's take this one. And there's an internal counter which I can use. Actually, it's called tick.
32:43
No. Yeah, we could just. And now it's going through, this is actually returns the numbers of the C minor chord. And as I haven't specified an octave,
33:00
it's going to use C for octave. But I can, for instance, say I want to have a number of octaves, I think.
33:27
I could also say, which I use quite a lot, twos. So take this one. And now I've sort of arpeggiated, random arpeggiator.
33:43
So, and you know, as soon as I'm going to change the attack, it's very different sounds.
34:13
I can also say, okay, let's, this also randomize. So I say, this is a ring and use.
34:29
That's a good question. Yeah, but it's, so now we're changing between D and C.
34:44
Actually it's a ring, but it's one which you can use in music because if it ends, it will start at the beginning. So I don't, I can also use lists. Like for instance, like that's just a list.
35:06
But for instance, if I use this one, let's do it.
35:32
No, it works actually. That's a bad example, a bad example for that's, yeah, yeah.
35:40
So you see now it's going to tick. It's going to go through this array, but it just gets three values and then there's no value anymore. If I then say, okay, let's use a ring. Then this is more logical in a way that music works.
36:05
So now it's going to repeat it. Yes, it's going back. So that's why it's called ring. So, but let's, let's try out something else.
36:23
I can of course use samples. So for instance, is there anyone in the room who doesn't know the Amen break? Probably not, okay. So I can simply say sample and I say, there is, I think the full break just to see it.
36:50
Oops. So this is going to play one time. There's also, I think these are two bars.
37:03
This is what I'm going to use. Okay, now I would like to use, to loop this. The problem is, I don't know how long the sample is. There are different ways to cope with it.
37:23
What actually happens, there should be a four. Then you can hear a pause. So I could, for instance, measure the sample and could then adjust the sleep,
37:42
but musically this wouldn't be, wouldn't make any sense because I have, for instance, I want to have two bars filled. So what I'm going to do is I'm going to beat stretch that beat stretch to four.
38:03
Now it's, use 120, so it's synchronized with 120 BPM and it repeats properly. So that's kind of interesting, but more interesting is now, for instance, say,
38:23
I want to slice this sample and I want to slice this into eight bits. And I want to pick a slice any time it runs. I think this should be half a beat.
38:51
So what happens if, no, I haven't shown you the following. Let's just stop this one.
39:01
Yes, so that's, that's the usual rate. So let's make one point, you know, we can,
39:20
or you might prefer this one. So what's going to happen if I say minus one? So now you see, I can, let's make a little, a little example. For instance, I have this loop
39:42
and I would like to play it a few bars and then I would like to create, oops, a break. So I'm going to do the following. I say, what I'm writing is a subset of Ruby. That's why anyone who knows Ruby, probably.
40:02
That's why I can, yeah, probably better than me. That's why you can write, for instance, three times two. Yes, but it's frequently said on the forum, don't rely on that. So it could break within another version of Sonic,
40:23
but because it's just a subset, but there are quite a few things which you can use coming from Ruby. It's not really interesting for me because I'm not a programmer and I don't like complicated code because I don't understand it. So I need a musically working simple solutions,
40:41
although it's code. So I don't use very much Ruby. I started to learn it, but there's so much to learn about these things that I just said, okay, I know enough about Ruby. So we're going to play the sample,
41:02
let's say three times. Beat stretch four. So we're gonna sleep four.
41:23
And this just sounds like three times and then the loop repeats. So now I'm gonna do the following. I say this one. This is actually redundant to write it one time, but I do it just for the sake of clarity.
41:43
So one time is not enough because we need to fill another four. So we have to do something like that, I think. Oops, keyword do, thanks.
42:11
Yes, but probably a bit more realistic. It would be if this one's play eight times. So this one is gonna play four beats, right?
42:24
Eight, yes, four beats. So I'm gonna play one time, one times do and I'm gonna play the sample again, but just half of it. So I say finish 1.5
42:46
and this one then needs to be four times. That's right.
43:07
I can now tweak things and say, no, actually it's not, yeah, yeah, it's not correct. This one's gonna one times, this should be, we don't have a sleep in here.
43:23
So this one should sleep two. But I can say, for instance, okay, let's mess up, mess with the rate.
44:01
Okay, let's make it a bit faster. We can also say, for instance, let's make more slices. It will sound a bit artificial.
44:21
I'll think, and this is eight times. Let's see how this sounds.
44:46
Well, we can do things like, okay.
45:13
How much time have we left? We could, do you have any questions?
45:23
I hopefully can answer. Yeah, just coming back to what you just said about Ruby being integrated,
45:41
programming your own beats, like not using loops. I've found, well, I've used it like long time ago, Sonic Pi, and I found it to be tedious typing all this stuff, so I immediately, because I have a programming background, writing my own functions in order to quickly
46:02
type new drum beats, basically. You, I thought you didn't use it, I think, in the first example, but I guess the software developed in the meantime, and there are means, maybe. Do you generally create your own drum loops,
46:22
or are you tending to use sample-based drum loops, and then slicing and stuff, what you just showed to us? Well, creating your own loops is somehow performance-wise not, well, I would do it for sound-wise,
46:43
because I needed a special sound. I have, for instance, in this, the track I coded, there's a sample right at the start from the Brofeld, which I used, so I tried to incorporate other things, and what I did, actually, is I created a drum loop
47:00
within Sonic Pi, and then I recorded it. You have a record part, so you can record anything, and then I used it again. And I have also written, because it supports OSC, I have written a live looper application, which was, actually, I thought
47:23
I'm going to use it to be able to record on the fly, and then use this sample within Sonic Pi. So let me just show you the interface.
47:40
By the way, that's the Sonic Pi community, which is a very, very friendly community. So you won't find anyone saying, you don't know anything about it, go on, read the fucking manual, and then come back. This won't happen. So even for starters and beginners,
48:02
even for programming dummies like me, or at least I was one, you can go there and will be treated very nicely. You can download Sonic Pi here, of course.
48:26
And this is what I, sorry, Sonic Pi net. And what I was going to show is,
48:51
so this is what the live looper looks like. And this was supposed to, it runs, yeah, it runs on a tablet and on an Android device.
49:02
And I planned to have the option to record for someone playing live. I did it, for instance, with a didgeridoo player. And I'm also sometimes recording drum stamps within Sonic Pi. I, for instance, I learned a lot from Antoine, from his videos. So I saw, okay, how can I synthesize a kick drum?
49:22
And then I made a drum loop, but created a sample. Because otherwise you probably run into trouble if you have 15 running live loops and you have even more X runs. Well, at some time,
49:41
Sonic Pi won't be able to keep up the time. But you might develop a style to make this happen. And I also, I think you mentioned it, I use sometimes snippets and I use also a library. So you can, there's a .sonicpi directory
50:01
where you can put in your code, which is being loaded when the program starts. And there, for instance, you can also implement functions and solve functions, which are available as soon as you have started the program. Okay.
50:22
You were using a phrase to coordinate between your loops to make sure they were synchronized. That phrase is distributed. So you could, in theory, have two people live coding. Have you ever done that? Ah, okay. No, I haven't.
50:43
It's probably, I know that people have tried this and it doesn't seem to be really a technical problem, but more an aesthetical and communication problem to synchronize that. Yeah, it might be, the community is growing
51:02
and there are lots of things going on. There are, of course, different environments for live coding, like I think it's pronounced Tidal or Tiddle, Tidal. And other ones, Superglider itself is used for live coding.
51:21
And there are also live coding bands. They must somehow synchronize it. I'm more interested, as soon as I feel up for it, interested to play with a live musician. And especially recording bits of the live playing and play it back because you can work with the samples.
51:41
Once you have it as a sample available, you can sort of reflect it in a different way and work with it. That's kind of interesting for me in the future. Thanks for our talk. I would never think that a live coding presentation could get me engaged, but it did.
52:04
That's very flattering. Props for that. Also, I wanted to ask if the children are learning on aim and break. Is that like, it's a sample supplied with Sonic Pi? Yes, there's a sample set of more or less good quality,
52:23
but it is sufficient just to go and start and to work with the program. There are ambient sound, there are drum sounds, there are bass sounds, bass drums, quite a few bass drums. And as you probably saw, you get a prompt
52:41
as soon as I, for instance, type sample. I will get, well, this is actually from the language reference, so this is all what's available concerning the term samples. And as soon as I go on,
53:01
this is actually the collection of samples. And maybe for everyone who wants to start working with the program, you can spend three hours on a rainy Sunday afternoon just tweaking samples. Just download it, it's available for Mac,
53:21
it's available for Windows. It is available for Linux, but you will have to compile it because the version which is available packaged is quite old. It runs on Raspberry Pi, obviously.
53:41
And then you can just click on help and you will get a very nice tutorial. Well, it's supposed to be for younger children, but it doesn't really, it helps a lot because it's very well written. You have examples, and that's kind of fun. You can, for instance, go, let's see.
54:05
We have Tron Bike, for instance. That's an example coded by Sam Aaron. So, that's Tron Bike.
54:30
It's the original Tron. You see, it's quite a lot, bits where it's using randomization. So, have rent, choose, and so on.
54:45
And you can, and this is nice, so if you have no idea about programming, you can just take, for instance, chord inversions, which is very short example. You can now, after you've learned about it
55:02
here in this session, you can now say, okay, let's create a live loop. And then play it. Okay, and now I'm looking for things I can change.
55:21
Major, I know major, so let's take minor. And then I've seen this thing about use synth FM,
55:41
and I've seen defaults. Oh, it's way too low, so that's. What I haven't even shown is that, obviously,
56:04
you can use effects, like, for instance, reverb,
56:31
and a shorter release.
56:45
And this is, I haven't written this code, so I just drag and dropped it into the editor and changed some things and tried it out, yeah. In this example, you changed it to major to minor,
57:02
but from what I heard, it seemed like it has some sort of built-in system for, like, the tonica and the dominant and subdominant, and how powerful is that system? Can you also do, for instance, Maldor and Dormol and stuff like that?
57:21
Yes, for instance, here, you have the option invert, so you can do chord inversions. Chord inversion means, usually, you have C-E-G. You play C-E-G. Yeah, I know what an invert is. Ah, you know. But I mean, things like, for instance, two Neapolitan, or I don't know how it's called
57:42
in English, but there's, like, no, not subdominant. I mean, there's a lower second called Neapolitan or something, and there's also Maldor and Dormol,
58:02
and they have, like, special. I don't think this, actually, this chord type isn't in Sonic Pine. You don't, you just can't. You can do chord inversions. You have a lot of chords, which you can switch around. You can say how many notes. For instance, I could say, it says here, minor three.
58:22
So this is the number of notes within the chord. So if I say one. Then it's the tonica. You see, if I say two, it's gonna take two chord notes. Three, and if you want it a bit jazzy, then take four.
58:47
I misinterpreted. It's the chord degree D that I was talking about, sorry. So how many options do we have for that D? The chord degree, that's actually, it's where it goes, it has two loops,
59:00
intersected, intertwined, and it goes from chord degree one and uses this one here, and then it uses the third note and then the sixth note, and then goes back to the fourth. So that can only be an integer then? Yes, naturally.
59:22
I wanted to ask. You mentioned you prepared the concert piece you showed us, and I watched your YouTube video, so I recognize the sample. So how much preparation, how do you practice?
59:44
The first thing, I saw Sam Aaron doing live coding, and he's the programmer of the program, and he knows his stuff. It's still a lot of practice, and I thought about how can I practice this.
01:00:00
The first, I think, live coding I recorded was I'd actually typed the stuff from a printout, and I then thought, okay, that's somehow an exercise, but it doesn't really work for me. And then I sort of condensed my, the pieces into a kind of score. For instance, I have,
01:00:22
let me, let me have, no, that's it. Yes, there was two.
01:00:53
So that's sort of a short notation of what I will write. So what I spell out as code.
01:01:02
But that is still something like a score, and it's quite, I mean, you won't be able to read it, but for me, the slicer, face, and the value parameter. But for here, I said, okay, this is not enough for SonoJoy. I need something which is more reduced,
01:01:25
and this is just in the beginning. So I here say, okay, my live loop is gonna, just to remind me, what's the next piece? What's the next bit? This is gonna, a live loop called Blofeld,
01:01:42
and as I am actually using effects outside from Sonic Pi, loaded via Carla, two reverbs and compression. Yeah, compressor, right, thanks.
01:02:00
I need to know the output channel, because you can channel things out of Sonic Pi, so I could, and that's what I actually, channel one and two of Super Collider gather everything from Sonic Pi. So that's why this was a bit distorted,
01:02:20
and actually changed, obviously, the sound, but you haven't heard it in the original version, so it's okay. And therefore, I have these reminders for me, for which channel, because I couldn't just remember. This one has an effect, does it have an effect? I don't know, I'm just taking this as a reminder.
01:02:42
But the rest of the code, I had, well, I started quite early, and I just did it as an exercise every evening, since a few weeks. But, well, you get used to it, and this is a way towards improvisation,
01:03:01
because I get more confident in which statement creates what sound, which you need. But on the other hand, it's all about just trying out and making mistakes. Hopefully, they're not too awful and too nasty,
01:03:20
and hopefully you find them, but yeah, that's the way you can exercise. Oh yeah, a very quick question. Actually, I just wanted to expand on a previous question about chords. So basically, you were just picking
01:03:41
which degree out of the scale would be played, right? Did I understood that correctly? Yeah, that's actually, it's a different way of, you don't name the note, you just take the... You pick the degrees out of the scale. But are you able to change the scale
01:04:02
to either pick one from a list that is available, or maybe even design the one you want? So you want scales, yes. Yeah, sure. There are lots of scales inbuilt.
01:04:20
So if you look in the language, well, actually, you can do the following. That's quite handy. You can write scale and hit on Linux, it's Control-E, and then you are at the scale section of the language reference. I have, Sonic Pi is one of the best documented
01:04:44
open source programs, I must say. And here you see a list of scales, which you see. Well, that's quite long. Cool. But you can always create your own scales. You could specify one. Oh, that's great. And reference them via a variable.
01:05:01
Nice, thank you. Okay. All right, yeah, thank you again. Great talk. Thank you.