WEBVTT

00:00.000 --> 00:10.600
Afternoon everybody, as that part of the slide says, my name is Steve, as that part

00:10.600 --> 00:12.800
of the slide says, I'm a bit of a geek.

00:12.800 --> 00:17.640
If we've all turned up to the correct bloom, this is a talk about midi-life performing.

00:17.640 --> 00:25.000
Yeah, hopefully we have turned up to the white bloom, it's been a long weekend.

00:25.000 --> 00:26.360
Thanks to Shimei.

00:26.360 --> 00:31.760
So, I hope the next 15, 20 minutes or so, I'm going to be telling what this library is,

00:31.760 --> 00:36.360
what it does, how it works, and the sort of things that you can actually do with it.

00:36.360 --> 00:40.360
There's no point in actually using any software unless it's useful.

00:40.360 --> 00:44.160
So, before I start, I should probably do the who am I?

00:44.160 --> 00:51.560
One of I done to deserve a place on this stage, always the slide should be called the ego slide.

00:51.560 --> 00:55.360
This is where the speaker blags about themselves for 10 minutes, while you always think,

00:55.360 --> 00:58.560
is there enough of death room I can get to?

00:58.560 --> 01:03.560
Well, I'm a geek, I'm a general purpose, mess around with anything.

01:03.560 --> 01:07.960
I'm a very bad pianist.

01:07.960 --> 01:10.960
keyboard, can I can fix it?

01:10.960 --> 01:13.560
I like fixing every single note.

01:13.560 --> 01:15.160
I'm a control freak like that.

01:15.160 --> 01:20.760
I'm a bad performer, but I'm okay as a composer, because I can fix it in post.

01:20.960 --> 01:23.960
And I am a very big open source advocate.

01:23.960 --> 01:26.360
I've been at the first end for the last 26 years.

01:26.360 --> 01:31.360
I've spoken here, you know, I thought, is anyone seen me speak here before?

01:31.360 --> 01:34.360
And you came back.

01:34.360 --> 01:36.360
You're better than I thought.

01:36.360 --> 01:39.160
So, I am basically winging it right now.

01:39.160 --> 01:43.160
I'm not a composer, but I try to be.

01:43.160 --> 01:47.760
And open source software lets me be that composer, I thought I should be.

01:47.960 --> 01:50.960
If I was born in another decade, I would be Chopin.

01:50.960 --> 01:53.960
I would love to have been Chopin.

01:53.960 --> 02:00.560
But all this means is ignore everything I say, because what's important is not what's on that slide.

02:00.560 --> 02:03.760
What's important is what is not on that slide.

02:03.760 --> 02:05.760
I'm not professional.

02:05.760 --> 02:08.960
I'm just making this up as I go along.

02:08.960 --> 02:13.560
Which means if I can do this, so can you?

02:13.560 --> 02:14.760
So what am I doing?

02:14.760 --> 02:18.160
Well, I'm doing this live performance thing.

02:18.160 --> 02:20.560
And I call it a midi live performance.

02:20.560 --> 02:23.160
It's not live coding.

02:23.160 --> 02:25.360
It's about taking midi and put streams.

02:25.360 --> 02:31.360
It's about processing that midi stream, and then outputting something from that midi stream.

02:31.360 --> 02:32.760
I like live coding thing.

02:32.760 --> 02:36.560
I enjoy watching people do live coding, but it's not what I do.

02:36.560 --> 02:39.160
I said, I'm a control freak.

02:39.160 --> 02:42.760
I want to have control over every single note.

02:42.760 --> 02:46.560
If a lossity of every note, every accent, I want control of it.

02:46.560 --> 02:49.560
So there is no way I will do a live performance.

02:49.560 --> 02:52.560
But I'm perfectly happy with people who will.

02:52.560 --> 02:54.160
I take the midi in.

02:54.160 --> 02:55.760
I throw some midi out.

02:55.760 --> 02:58.160
These are some of the examples that I'm going to demonstrate.

02:58.160 --> 02:59.360
Links are all at the end.

02:59.360 --> 03:01.360
You don't have to copy anything down.

03:01.360 --> 03:03.360
It's not a test.

03:03.360 --> 03:06.560
So the first thing is, well, how do we get input?

03:06.560 --> 03:12.360
Bring in the library, open a port, and then process it.

03:13.160 --> 03:16.760
And that's what you get.

03:16.760 --> 03:18.760
That's midi input.

03:18.760 --> 03:19.760
That's midi data.

03:19.760 --> 03:23.560
Has anyone looked at midi data in their life and saw this and going,

03:23.560 --> 03:26.960
so what is 1, 4, 4?

03:26.960 --> 03:29.560
It's no Tom.

03:29.560 --> 03:31.160
You see that, everyone?

03:31.160 --> 03:34.160
He's the nerd, not me.

03:34.160 --> 03:36.760
That's no Tom, yeah?

03:36.760 --> 03:38.760
It is.

03:39.760 --> 03:43.360
But it's not quite as simple as that.

03:43.360 --> 03:47.960
Because 1, 4, 4 is no Tom on channel 1, 0.

03:47.960 --> 03:49.160
60 is the note.

03:49.160 --> 03:51.560
It's that one.

03:51.560 --> 03:55.960
100 is the velocity, the volume of that note.

03:55.960 --> 03:59.560
Well, it turns out that a velocity of 0

03:59.560 --> 04:03.760
is exactly the same as note off, which means

04:03.760 --> 04:06.560
every single piece of code that ever processes midi

04:06.560 --> 04:08.360
has to have a stupid exception saying,

04:08.360 --> 04:13.160
hey, it's no Tom, unless the volume is 0, then it's no Tom.

04:13.160 --> 04:15.760
It is annoying, but you have to do it,

04:15.760 --> 04:18.560
which is why I'm kind of happy that I have a library that

04:18.560 --> 04:19.760
does it for me.

04:19.760 --> 04:28.160
So if I can find my window, this here, for example, there we go.

04:28.160 --> 04:35.560
This is the midi dump example, so when I play things on here,

04:35.560 --> 04:37.760
this is what's coming through the keyboard.

04:37.760 --> 04:40.560
And you can see everything is saying no Tom, no Tom,

04:40.560 --> 04:43.160
because I've had to munch the data saying, well,

04:43.160 --> 04:46.560
it came through as no Tom with 0.

04:46.560 --> 04:51.960
And then we have to change it to note off, which is frustrating.

04:51.960 --> 04:54.760
But what can you do?

04:54.760 --> 04:59.160
This midi format was created in 1981, 1982.

04:59.160 --> 05:01.960
Back when computers really didn't have any kind of processing

05:01.960 --> 05:02.560
or memory.

05:02.560 --> 05:05.160
So you can understand why they said,

05:05.160 --> 05:08.760
investors have one message for two different things.

05:08.760 --> 05:14.760
And then all the programmers can worry about it for the next 50 years.

05:14.760 --> 05:17.360
So that's one of the sort of things you can do with it.

05:17.360 --> 05:18.960
You take the data when you process it,

05:18.960 --> 05:22.160
and you just dump that out to the stream.

05:22.160 --> 05:23.560
This is what actually comes out.

05:23.560 --> 05:25.960
What comes out of the keyboard?

05:25.960 --> 05:28.560
It's 144, 48, 100.

05:28.560 --> 05:31.560
But it then gets unpacked to saying, well, it's a no Tom.

05:31.560 --> 05:35.560
It is C4, it's 100, 100 volume, it's on this channel.

05:35.560 --> 05:36.960
Things that you could actually use,

05:36.960 --> 05:40.560
and then start processing in some way.

05:40.560 --> 05:41.960
Those are the examples I showed you.

05:41.960 --> 05:45.960
That's me playing a senior major chord.

05:45.960 --> 05:49.960
And then you've got the output.

05:49.960 --> 05:50.760
The input comes in.

05:50.760 --> 05:51.960
It goes to the machine.

05:51.960 --> 05:53.960
You can munch that data anywhere you like.

05:53.960 --> 05:56.960
And then you throw it back out to midi somehow.

05:56.960 --> 05:59.760
I'm using fluid synth on this for the demonstration

05:59.760 --> 06:02.560
that home might have a proper synthesizer.

06:02.560 --> 06:03.560
It is a nice big thing.

06:03.560 --> 06:04.360
It's like this.

06:04.360 --> 06:05.560
It looks great.

06:05.560 --> 06:08.760
I'm thinking, have I actually ensured my house for enough money

06:08.760 --> 06:10.360
to have this synthesizer?

06:10.360 --> 06:13.160
It quite literally costs more than my job.

06:13.160 --> 06:16.560
Although when you consider the fact that I'm unemployed, that's not difficult.

06:16.560 --> 06:20.760
So I use the use sense for this demonstration.

06:20.760 --> 06:23.360
I'm using something on the laptop.

06:23.360 --> 06:26.960
So the frequency does all the timing for you.

06:26.960 --> 06:31.760
Which I don't know if anyone notices on the notes.

06:31.760 --> 06:34.960
This project is written in JavaScript,

06:34.960 --> 06:38.160
because it is the one true language.

06:38.160 --> 06:43.560
OK, some people are laughing, some people are nervously laughing.

06:43.560 --> 06:48.760
I'm not quite sure if I've alienated the room or not at this point.

06:48.760 --> 06:51.960
JavaScript is really good at demonstrating

06:51.960 --> 06:55.160
how to write a really weird language.

06:55.160 --> 06:57.360
I'm using my words carefully here,

06:57.360 --> 07:01.960
because I'm confident in a couple of months with Douglas Cotford.

07:01.960 --> 07:04.360
And I don't want to run a finger guy.

07:04.360 --> 07:07.560
So if you're watching Douglas, hello.

07:07.560 --> 07:08.360
It's a mess.

07:08.360 --> 07:09.760
JavaScript is a mess.

07:09.760 --> 07:12.560
And the timing is awful.

07:12.560 --> 07:16.560
But as long as you don't care about the timing,

07:16.560 --> 07:20.960
I eat your drama, it will be fine.

07:20.960 --> 07:23.760
OK, I can see the drama in the room.

07:23.760 --> 07:24.960
Are you telling me about two minutes?

07:24.960 --> 07:28.560
It's left or not.

07:28.560 --> 07:32.960
Because it's not quite right, you've got a pulse in JavaScript,

07:32.960 --> 07:34.560
which is not accurate enough.

07:34.560 --> 07:39.960
Tink everything to the platform, it will be fine.

07:39.960 --> 07:41.760
And that's my approach for this.

07:41.760 --> 07:44.160
I'm not trying to build the best thing ever.

07:44.160 --> 07:46.960
I'm just trying to use something that I can experiment with

07:46.960 --> 07:52.560
and just build up MIDI things as I go along.

07:52.560 --> 07:54.760
So here's an example.

07:54.760 --> 07:58.760
You bring in the library, you set the outputs,

07:58.760 --> 08:01.560
you build up the sequencer, and you key messages

08:01.560 --> 08:05.960
for I use the word letter Q for Qing, I thought.

08:05.960 --> 08:08.060
Q is a very nice English word.

08:08.060 --> 08:11.060
Q, you, E, you, E.

08:11.060 --> 08:14.760
Quite literally four of those letters are redundant.

08:14.760 --> 08:19.360
The only letter we need in the word Q is the letter Q.

08:19.360 --> 08:22.760
So I'm just Qing messages for them saying no to on note.

08:22.760 --> 08:23.760
And that's all I'm doing,

08:23.760 --> 08:26.360
because then I can do a thing with it.

08:26.360 --> 08:29.160
And this is an example of the echo program.

08:29.160 --> 08:31.760
Every time an input comes through from the keyboard,

08:31.760 --> 08:35.760
it looks at it and goes, OK, well, then place some notes.

08:35.760 --> 08:40.260
And if the, you know, it's computers are willing,

08:40.260 --> 08:43.760
maybe we can do a live demo that demonstrates that.

08:43.760 --> 08:49.760
And you can hear the echo on that.

08:50.760 --> 08:56.760
Now, if anyone's old enough, oh, yeah.

08:56.760 --> 09:02.760
You ain't seen nothing yet.

09:02.760 --> 09:04.760
That's quite effective.

09:04.760 --> 09:07.760
And I was, anyone here, old enough to remember,

09:07.760 --> 09:10.760
Brian May and Queen back in the 1970s.

09:10.760 --> 09:13.760
I can see the old people nodding and saying,

09:13.760 --> 09:15.760
please don't talk about me.

09:15.760 --> 09:17.760
He had a, he had a, he had a loop of pedal.

09:17.760 --> 09:21.760
And he would create and target our solos based on our looping,

09:21.760 --> 09:23.760
things like that.

09:23.760 --> 09:26.760
So like, OK, there's a thing you can do with that.

09:26.760 --> 09:31.760
So because it's code, you can actually do anything you want with that.

09:31.760 --> 09:34.760
So that is, are we on the right thing here?

09:34.760 --> 09:38.760
So if I do one note, that's not the right window.

09:38.760 --> 09:41.760
That's, that's fine.

09:41.760 --> 09:44.760
Am I on the right tab now?

09:44.760 --> 09:45.760
Nope.

09:45.760 --> 09:46.760
Where's my cursor gone?

09:46.760 --> 09:47.760
There we go.

09:47.760 --> 09:50.760
So if I do that, there we go echo.

09:56.760 --> 09:57.760
It's code.

09:57.760 --> 10:00.760
I just decided to take the pitch by an octave.

10:14.760 --> 10:15.760
Almost no effort.

10:15.760 --> 10:19.760
But there's an idea there that you can think, I could use this.

10:19.760 --> 10:25.760
And anyone that's, listen, there's black horse on the cherry tree.

10:25.760 --> 10:27.760
Anyone know that song?

10:27.760 --> 10:28.760
Woohoo.

10:28.760 --> 10:29.760
Yeah, that one.

10:29.760 --> 10:30.760
What do you track?

10:30.760 --> 10:35.760
You could basically recreate that in 30 seconds if you had talent,

10:35.760 --> 10:40.760
which I don't, which is why I'm on stage.

10:40.760 --> 10:43.760
So that's one of the examples, it's basically echo.

10:43.760 --> 10:45.760
Another one I did was strummer.

10:45.760 --> 10:50.760
Again, because I have no talent, I can't play guitar.

10:50.760 --> 11:01.760
But it's okay, because what I can do instead.

11:01.760 --> 11:02.760
I take the input.

11:02.760 --> 11:04.760
I look at the notes I'm playing.

11:04.760 --> 11:06.760
It says, oh, you're playing a C chord, you're playing a D chord.

11:06.760 --> 11:09.760
What would a guitarist do in this situation?

11:09.760 --> 11:11.760
And the answer is, well, a guitarist would

11:11.760 --> 11:13.760
stay saying, look at me.

11:13.760 --> 11:16.760
What it also does is work out that chord,

11:16.760 --> 11:20.760
or a guitar, would be a series of different notes

11:20.760 --> 11:22.760
than what I'm playing down here.

11:22.760 --> 11:24.760
So it takes those notes, it changes them,

11:24.760 --> 11:28.760
and then it plays each of them with a very slight time difference.

11:28.760 --> 11:31.760
So it feels like you're actually strumming the instrument.

11:31.760 --> 11:34.760
And of course, you don't need to do it with an actual guitar sound.

11:34.760 --> 11:37.760
You could do it with any kind of sound you like.

11:37.760 --> 11:39.760
And you can see here, it's like, oh, yeah, I've detected a G chord

11:39.760 --> 11:42.760
to a B7 chord and everything else.

11:42.760 --> 11:47.760
So you've got a lot of scope for playing some really weird effects on this.

11:47.760 --> 11:49.760
Another one is the looper.

11:49.760 --> 11:52.760
Oh, and I've got to do a live demo.

11:52.760 --> 11:55.760
This is going to go in badly, isn't it?

11:55.760 --> 11:58.760
Let's see if the live demo is actually going to work.

11:58.760 --> 12:07.760
So the live demo is not going to work, so that's fine.

12:07.760 --> 12:10.760
Oh, there we go.

12:10.760 --> 12:13.760
Let's cancel that, that's not a good sign.

12:13.760 --> 12:17.760
What is it with the curse of these days?

12:17.760 --> 12:20.760
No, not two.

12:20.760 --> 12:22.760
Three?

12:26.760 --> 12:30.760
Okay, never mind, we might just skip that.

12:30.760 --> 12:35.760
Oh, I've got a four, what's four, do?

12:36.760 --> 12:39.760
Oh, we've got some sounds.

12:39.760 --> 12:41.760
You've got a person going to hear.

12:41.760 --> 12:42.760
Tins.

12:42.760 --> 12:47.760
So I can set the channel the mutes from this half and the notes played on this half.

12:55.760 --> 12:58.760
Yes, not quite craft work, is it?

13:02.760 --> 13:04.760
Boom, boom, chuck.

13:05.760 --> 13:12.760
But that's a general idea.

13:12.760 --> 13:15.760
You can feed things in, you'll loop the things.

13:15.760 --> 13:18.760
And as a fun bit, I put this chord thing in.

13:18.760 --> 13:23.760
So this is telling you what all the various stats are doing at this point.

13:23.760 --> 13:26.760
So these are the channels which are muted if I unmute those.

13:26.760 --> 13:28.760
Can I unmute those?

13:28.760 --> 13:29.760
There we go.

13:29.760 --> 13:31.760
Track three, mode, erase notes.

13:31.760 --> 13:35.760
If shift, quantizing, mute, and next chord is that one.

13:55.760 --> 14:00.760
So if you've ever had one of those Yamaha keyboards from the 1980s and had the auto accompaniment on it,

14:01.760 --> 14:03.760
that's what it's doing.

14:03.760 --> 14:05.760
But it means you're just experiment.

14:05.760 --> 14:08.760
And after a while, it becomes quite hypnotic.

14:08.760 --> 14:13.760
And you think, actually, maybe I have a musician after all.

14:13.760 --> 14:15.760
But clearly not.

14:15.760 --> 14:19.760
So with that in mind, the demo almost worked.

14:19.760 --> 14:23.760
I've also used, is anyone seen Terry Wiley's in C?

14:23.760 --> 14:27.760
I know you have Steve, and a couple of others as well.

14:27.760 --> 14:33.760
It might come as a shop to some of you, but I don't have many friends.

14:33.760 --> 14:36.760
When you laugh, and that's where you go are.

14:36.760 --> 14:37.760
Let's try that again.

14:37.760 --> 14:39.760
Okay, edit that bit out of the video.

14:39.760 --> 14:44.760
It might come as a surprise to you, but I don't have many friends.

14:44.760 --> 14:47.760
Patronizing lots.

14:47.760 --> 14:51.760
So I wanted to create Terry Wiley's in C.

14:51.760 --> 14:56.760
Basically, there's 50 odd bars of music, and each musician plays each bar as they feel like

14:56.760 --> 14:57.760
it.

14:57.760 --> 15:00.760
They move on to the next bar when they feel like it.

15:00.760 --> 15:02.760
Well, I didn't have enough friends to do this.

15:02.760 --> 15:09.760
So I used that library to create an entire version of the composition with all these

15:09.760 --> 15:10.760
very instruments.

15:10.760 --> 15:12.760
So I was quite literally a conductor.

15:12.760 --> 15:14.760
I was saying, okay, synthesize that.

15:14.760 --> 15:15.760
Now you go.

15:15.760 --> 15:16.760
Now you pause.

15:16.760 --> 15:18.760
Now you go to the next bit.

15:18.760 --> 15:20.760
I spent a quiet.

15:20.760 --> 15:22.760
This is an hours worth of music.

15:22.760 --> 15:24.760
It just keeps going on and on.

15:24.760 --> 15:25.760
It's brilliant.

15:25.760 --> 15:28.760
Have I got an hour to play the whole thing?

15:28.760 --> 15:31.760
No, okay.

15:31.760 --> 15:37.760
I did in C, and I recorded that, and I thought, that's quite a good version.

15:37.760 --> 15:38.760
I'm going to do another version.

15:38.760 --> 15:42.760
Well, I'm going to record every single stem, and then manipulate every stem individually.

15:42.760 --> 15:49.760
And I went, and I went from doing in C to being in C++.

15:49.760 --> 15:54.760
And this is the only conference in the world where that joke is understood.

15:54.760 --> 15:59.760
I did this at the Royal Albert Hall, and I just went.

15:59.760 --> 16:01.760
So the stuff is there.

16:01.760 --> 16:02.760
The library works.

16:02.760 --> 16:04.760
It does its thing.

16:04.760 --> 16:07.760
Ultimately, in the end, I quite like it.

16:07.760 --> 16:08.760
I like messing around.

16:08.760 --> 16:09.760
I like messing around.

16:09.760 --> 16:10.760
I like messing around.

16:10.760 --> 16:11.760
I like messing around.

16:11.760 --> 16:12.760
I like messing around.

16:12.760 --> 16:13.760
I like messing around.

16:13.760 --> 16:14.760
I'm just seeing what happens.

16:14.760 --> 16:17.760
So maybe some of you will find something interesting there as well.

16:17.760 --> 16:18.760
So that's all for me.

16:18.760 --> 16:20.760
I'll let me update the scorecard.

16:20.760 --> 16:22.760
Okay, that's 31 talks given this conference.

16:22.760 --> 16:23.760
I've probably done my time.

16:23.760 --> 16:24.760
Thank you.

16:24.760 --> 16:25.760
Good night.

16:25.760 --> 16:35.760
Thank you.

