Afternoon everybody, as that part of the slide says, my name is Steve, as that part
of the slide says, I'm a bit of a geek.
If we've all turned up to the correct bloom, this is a talk about midi-life performing.
Yeah, hopefully we have turned up to the white bloom, it's been a long weekend.
Thanks to Shimei.
So, I hope the next 15, 20 minutes or so, I'm going to be telling what this library is,
what it does, how it works, and the sort of things that you can actually do with it.
There's no point in actually using any software unless it's useful.
So, before I start, I should probably do the who am I?
One of I done to deserve a place on this stage, always the slide should be called the ego slide.
This is where the speaker blags about themselves for 10 minutes, while you always think,
is there enough of death room I can get to?
Well, I'm a geek, I'm a general purpose, mess around with anything.
I'm a very bad pianist.
keyboard, can I can fix it?
I like fixing every single note.
I'm a control freak like that.
I'm a bad performer, but I'm okay as a composer, because I can fix it in post.
And I am a very big open source advocate.
I've been at the first end for the last 26 years.
I've spoken here, you know, I thought, is anyone seen me speak here before?
And you came back.
You're better than I thought.
So, I am basically winging it right now.
I'm not a composer, but I try to be.
And open source software lets me be that composer, I thought I should be.
If I was born in another decade, I would be Chopin.
I would love to have been Chopin.
But all this means is ignore everything I say, because what's important is not what's on that slide.
What's important is what is not on that slide.
I'm not professional.
I'm just making this up as I go along.
Which means if I can do this, so can you?
So what am I doing?
Well, I'm doing this live performance thing.
And I call it a midi live performance.
It's not live coding.
It's about taking midi and put streams.
It's about processing that midi stream, and then outputting something from that midi stream.
I like live coding thing.
I enjoy watching people do live coding, but it's not what I do.
I said, I'm a control freak.
I want to have control over every single note.
If a lossity of every note, every accent, I want control of it.
So there is no way I will do a live performance.
But I'm perfectly happy with people who will.
I take the midi in.
I throw some midi out.
These are some of the examples that I'm going to demonstrate.
Links are all at the end.
You don't have to copy anything down.
It's not a test.
So the first thing is, well, how do we get input?
Bring in the library, open a port, and then process it.
And that's what you get.
That's midi input.
That's midi data.
Has anyone looked at midi data in their life and saw this and going,
so what is 1, 4, 4?
It's no Tom.
You see that, everyone?
He's the nerd, not me.
That's no Tom, yeah?
It is.
But it's not quite as simple as that.
Because 1, 4, 4 is no Tom on channel 1, 0.
60 is the note.
It's that one.
100 is the velocity, the volume of that note.
Well, it turns out that a velocity of 0
is exactly the same as note off, which means
every single piece of code that ever processes midi
has to have a stupid exception saying,
hey, it's no Tom, unless the volume is 0, then it's no Tom.
It is annoying, but you have to do it,
which is why I'm kind of happy that I have a library that
does it for me.
So if I can find my window, this here, for example, there we go.
This is the midi dump example, so when I play things on here,
this is what's coming through the keyboard.
And you can see everything is saying no Tom, no Tom,
because I've had to munch the data saying, well,
it came through as no Tom with 0.
And then we have to change it to note off, which is frustrating.
But what can you do?
This midi format was created in 1981, 1982.
Back when computers really didn't have any kind of processing
or memory.
So you can understand why they said,
investors have one message for two different things.
And then all the programmers can worry about it for the next 50 years.
So that's one of the sort of things you can do with it.
You take the data when you process it,
and you just dump that out to the stream.
This is what actually comes out.
What comes out of the keyboard?
It's 144, 48, 100.
But it then gets unpacked to saying, well, it's a no Tom.
It is C4, it's 100, 100 volume, it's on this channel.
Things that you could actually use,
and then start processing in some way.
Those are the examples I showed you.
That's me playing a senior major chord.
And then you've got the output.
The input comes in.
It goes to the machine.
You can munch that data anywhere you like.
And then you throw it back out to midi somehow.
I'm using fluid synth on this for the demonstration
that home might have a proper synthesizer.
It is a nice big thing.
It's like this.
It looks great.
I'm thinking, have I actually ensured my house for enough money
to have this synthesizer?
It quite literally costs more than my job.
Although when you consider the fact that I'm unemployed, that's not difficult.
So I use the use sense for this demonstration.
I'm using something on the laptop.
So the frequency does all the timing for you.
Which I don't know if anyone notices on the notes.
This project is written in JavaScript,
because it is the one true language.
OK, some people are laughing, some people are nervously laughing.
I'm not quite sure if I've alienated the room or not at this point.
JavaScript is really good at demonstrating
how to write a really weird language.
I'm using my words carefully here,
because I'm confident in a couple of months with Douglas Cotford.
And I don't want to run a finger guy.
So if you're watching Douglas, hello.
It's a mess.
JavaScript is a mess.
And the timing is awful.
But as long as you don't care about the timing,
I eat your drama, it will be fine.
OK, I can see the drama in the room.
Are you telling me about two minutes?
It's left or not.
Because it's not quite right, you've got a pulse in JavaScript,
which is not accurate enough.
Tink everything to the platform, it will be fine.
And that's my approach for this.
I'm not trying to build the best thing ever.
I'm just trying to use something that I can experiment with
and just build up MIDI things as I go along.
So here's an example.
You bring in the library, you set the outputs,
you build up the sequencer, and you key messages
for I use the word letter Q for Qing, I thought.
Q is a very nice English word.
Q, you, E, you, E.
Quite literally four of those letters are redundant.
The only letter we need in the word Q is the letter Q.
So I'm just Qing messages for them saying no to on note.
And that's all I'm doing,
because then I can do a thing with it.
And this is an example of the echo program.
Every time an input comes through from the keyboard,
it looks at it and goes, OK, well, then place some notes.
And if the, you know, it's computers are willing,
maybe we can do a live demo that demonstrates that.
And you can hear the echo on that.
Now, if anyone's old enough, oh, yeah.
You ain't seen nothing yet.
That's quite effective.
And I was, anyone here, old enough to remember,
Brian May and Queen back in the 1970s.
I can see the old people nodding and saying,
please don't talk about me.
He had a, he had a, he had a loop of pedal.
And he would create and target our solos based on our looping,
things like that.
So like, OK, there's a thing you can do with that.
So because it's code, you can actually do anything you want with that.
So that is, are we on the right thing here?
So if I do one note, that's not the right window.
That's, that's fine.
Am I on the right tab now?
Nope.
Where's my cursor gone?
There we go.
So if I do that, there we go echo.
It's code.
I just decided to take the pitch by an octave.
Almost no effort.
But there's an idea there that you can think, I could use this.
And anyone that's, listen, there's black horse on the cherry tree.
Anyone know that song?
Woohoo.
Yeah, that one.
What do you track?
You could basically recreate that in 30 seconds if you had talent,
which I don't, which is why I'm on stage.
So that's one of the examples, it's basically echo.
Another one I did was strummer.
Again, because I have no talent, I can't play guitar.
But it's okay, because what I can do instead.
I take the input.
I look at the notes I'm playing.
It says, oh, you're playing a C chord, you're playing a D chord.
What would a guitarist do in this situation?
And the answer is, well, a guitarist would
stay saying, look at me.
What it also does is work out that chord,
or a guitar, would be a series of different notes
than what I'm playing down here.
So it takes those notes, it changes them,
and then it plays each of them with a very slight time difference.
So it feels like you're actually strumming the instrument.
And of course, you don't need to do it with an actual guitar sound.
You could do it with any kind of sound you like.
And you can see here, it's like, oh, yeah, I've detected a G chord
to a B7 chord and everything else.
So you've got a lot of scope for playing some really weird effects on this.
Another one is the looper.
Oh, and I've got to do a live demo.
This is going to go in badly, isn't it?
Let's see if the live demo is actually going to work.
So the live demo is not going to work, so that's fine.
Oh, there we go.
Let's cancel that, that's not a good sign.
What is it with the curse of these days?
No, not two.
Three?
Okay, never mind, we might just skip that.
Oh, I've got a four, what's four, do?
Oh, we've got some sounds.
You've got a person going to hear.
Tins.
So I can set the channel the mutes from this half and the notes played on this half.
Yes, not quite craft work, is it?
Boom, boom, chuck.
But that's a general idea.
You can feed things in, you'll loop the things.
And as a fun bit, I put this chord thing in.
So this is telling you what all the various stats are doing at this point.
So these are the channels which are muted if I unmute those.
Can I unmute those?
There we go.
Track three, mode, erase notes.
If shift, quantizing, mute, and next chord is that one.
So if you've ever had one of those Yamaha keyboards from the 1980s and had the auto accompaniment on it,
that's what it's doing.
But it means you're just experiment.
And after a while, it becomes quite hypnotic.
And you think, actually, maybe I have a musician after all.
But clearly not.
So with that in mind, the demo almost worked.
I've also used, is anyone seen Terry Wiley's in C?
I know you have Steve, and a couple of others as well.
It might come as a shop to some of you, but I don't have many friends.
When you laugh, and that's where you go are.
Let's try that again.
Okay, edit that bit out of the video.
It might come as a surprise to you, but I don't have many friends.
Patronizing lots.
So I wanted to create Terry Wiley's in C.
Basically, there's 50 odd bars of music, and each musician plays each bar as they feel like
it.
They move on to the next bar when they feel like it.
Well, I didn't have enough friends to do this.
So I used that library to create an entire version of the composition with all these
very instruments.
So I was quite literally a conductor.
I was saying, okay, synthesize that.
Now you go.
Now you pause.
Now you go to the next bit.
I spent a quiet.
This is an hours worth of music.
It just keeps going on and on.
It's brilliant.
Have I got an hour to play the whole thing?
No, okay.
I did in C, and I recorded that, and I thought, that's quite a good version.
I'm going to do another version.
Well, I'm going to record every single stem, and then manipulate every stem individually.
And I went, and I went from doing in C to being in C++.
And this is the only conference in the world where that joke is understood.
I did this at the Royal Albert Hall, and I just went.
So the stuff is there.
The library works.
It does its thing.
Ultimately, in the end, I quite like it.
I like messing around.
I'm just seeing what happens.
So maybe some of you will find something interesting there as well.
So that's all for me.
I'll let me update the scorecard.
Okay, that's 31 talks given this conference.
I've probably done my time.
Thank you.
Good night.
Thank you.