[01:07.060 --> 01:10.800] All right, welcome to the 5 o'clock session. [01:11.600 --> 01:16.020] So we're burning through today quite quickly, I feel like. [01:16.520 --> 01:21.800] Just a reminder, if you have your phones on, please turn them on vibrate or stun. [01:24.360 --> 01:35.260] If you have any types of issues, medical or otherwise, look for someone with a radio, someone in a blue shirt, someone with a security on their back, and they'll be sure to help you. [01:36.320 --> 01:37.720] Fire exits are over here. [01:38.260 --> 01:39.580] Water fountains around the corner. [01:39.720 --> 01:40.340] Stay hydrated. [01:40.460 --> 01:41.400] It's a very hot day. [01:41.560 --> 01:50.260] And I know there was, I guess, an issue with the Starbucks downstairs not opening, and so we didn't have any bottle of water to have for everyone. [01:50.260 --> 01:51.740] So, welcome. [01:52.020 --> 01:53.760] I'd like to introduce Joshua Freed. [01:53.880 --> 01:56.700] He's going to be talking all about Radio Wonderland. [01:56.920 --> 01:57.360] Joshua. [01:58.200 --> 01:59.020] Thank you. [01:59.180 --> 01:59.940] Hi, hi, hi. [02:01.840 --> 02:07.100] So, this talk kind of presupposes that you know what Radio Wonderland is. [02:07.100 --> 02:14.360] Maybe you saw me perform at an earlier HOPE, because I've performed at HOPE a few times. [02:14.740 --> 02:20.700] I'm performing tomorrow night at HOPE, and so it kind of would make sense to have the talk after the concert. [02:22.060 --> 02:24.020] But this will be some kind of a preview. [02:24.220 --> 02:28.000] So, this is a picture of Radio Wonderland. [02:29.280 --> 02:35.900] And you can see there's a steering wheel, and shoes, some miscellaneous technology, and a boombox. [02:37.340 --> 02:38.600] But I will get to that. [02:38.760 --> 02:41.260] I wanted to speak, just to give you some context. [02:42.640 --> 02:51.180] As a composer, I've always used technology to somehow further an unrepeatable, ephemeral moment of performance. [02:52.160 --> 02:57.540] And this has been true ever since I started playing around with technology. [02:57.540 --> 03:01.580] So, in the 80s, I had a performance. [03:01.620 --> 03:03.900] I just called myself Joshua. [03:04.500 --> 03:09.840] And I would perform a kind of Jamaican dub reggae live on stage. [03:10.680 --> 03:23.980] And dub is a technique or a set of techniques that was developed by Jamaican producers in the late 60s, early 70s, where they basically were the first ones to creatively remix multi-track recordings. [03:23.980 --> 03:27.060] And dub music is just magical. [03:27.580 --> 03:35.280] The term also refers to the practice of MCs or DJs talking over those instrumental tracks. [03:35.460 --> 03:38.480] And the two different senses of dub evolved hand in hand. [03:38.680 --> 03:42.420] But this instrumental dub was really inspiring to me. [03:43.120 --> 03:59.540] And these principles of having an ongoing groove, somewhat repetitive, so that you can mix the different parts in and out, can apply really well to a reggae groove, but also can apply to any other kind of pattern. [04:00.780 --> 04:04.640] And this is a picture of me performing as I did in the 80s. [04:04.720 --> 04:05.940] This is at the Pyramid Club. [04:06.120 --> 04:09.980] And there is a book about the Pyramid Club coming out soon. [04:10.740 --> 04:14.820] And you see, even back then in the 80s, I was performing on the shoot. [04:15.020 --> 04:16.320] Is my cursor also there? [04:16.480 --> 04:17.120] Yes, it is. [04:18.880 --> 04:20.700] But also look over here. [04:21.400 --> 04:27.860] This is an old four-track reel-to-reel tape recorder that I have rigged up with toy plastic darts. [04:27.860 --> 04:30.040] And there's about... [04:31.280 --> 04:32.920] Oh, this looks around. [04:33.340 --> 04:34.200] I don't know. [04:34.400 --> 04:39.740] Seven seconds of four-channel reel-to-reel material on a loop. [04:40.140 --> 04:42.820] On a tape loop that you see is draping... [04:42.820 --> 04:45.780] It is threaded through the toy plastic darts. [04:46.100 --> 04:50.260] And then drapes down here and goes back up to the toy plastic dart. [04:50.480 --> 04:53.260] And this has recorded on it some groove. [04:53.260 --> 04:56.180] I don't remember what exactly I was performing at the time. [04:57.060 --> 05:07.200] And I used this mixer over here to perform the dub processing of that groove in real time, live on stage. [05:08.040 --> 05:22.520] And, you know, you think of recording technology, especially for its first, I don't know, 30 years from like the 20s to the 50s, was a way to fix a live performance in a permanent form. [05:22.520 --> 05:28.860] And if I could just haul the recording equipment onto a stage, I could do the opposite. [05:29.040 --> 05:35.180] I could take multi-track recording equipment and, inspired by dub, do something that was real-time and live of the moment. [05:35.360 --> 05:36.570] And, of course, I would always improvise. [05:37.340 --> 05:41.000] Here is an example from those days. [06:46.360 --> 06:53.300] So, it is keeping pretty well to the conventions of dub reggae, but it was done live on stage. [06:53.820 --> 07:00.940] You know, I sometimes feel that I come from another planet where live means that it can't be rehearsed. [07:00.940 --> 07:02.000] It can't have a score. [07:02.860 --> 07:10.740] And this whole notion that you have something that's completely written out in advance, and you get on stage, and you just replicate what was written out. [07:11.400 --> 07:14.720] On my planet, it just seems like that's not anything. [07:14.860 --> 07:15.320] That's cheating. [07:15.460 --> 07:16.720] That's... What are you doing? [07:16.880 --> 07:18.700] Live means of the moment. [07:18.860 --> 07:20.940] And I've taken that with me. [07:21.640 --> 07:24.440] So, in the 90s, I kind of upped the ante. [07:24.640 --> 07:35.620] I was using multi-track technology again, only I added in this idea of simply wearing headphones, because when a person is wearing headphones, you can't hear what they're hearing. [07:36.400 --> 07:50.740] I developed this technique that I call headphone-driven performance, where I ask performers to replicate whatever they hear on the headphones, which is going to be spoken word mostly, absolutely in real time. [07:51.060 --> 07:57.980] Now, there's kind of a tradition of people repeating their lines right after they're fed to them. [07:58.180 --> 08:06.980] But I had something more absurd in mind, where the performer is really talking right along with the input on the headphones. [08:07.440 --> 08:18.520] I work with performers with similar material, but the actual material that they perform with, they've never heard before the moment that they're on stage hearing it. [08:18.680 --> 08:21.200] And I use very dramatic material. [08:21.940 --> 08:28.740] And I will structure, using multi-track, an interplay between different parts very precisely. [08:29.660 --> 08:32.080] So, well, let me give you an example. [08:39.940 --> 08:40.580] Yes! [09:04.100 --> 09:06.080] God's honor to the rest of the world! [09:06.280 --> 09:06.720] Ridiculous! [09:06.940 --> 09:07.240] World! [09:08.260 --> 09:09.180] Right within the world! [09:09.280 --> 09:11.280] And there's a bad agent! [09:12.740 --> 09:14.580] God do you... [09:15.260 --> 09:15.440] Yes! [09:16.580 --> 09:18.200] And you, Matthew Harrison Brady... [09:19.640 --> 09:20.880] God's honor to the rest of the world! [09:21.200 --> 09:21.640] Ridiculous! [09:22.120 --> 09:23.820] God's only one great agent in the world! [09:24.100 --> 09:25.720] Good man is a free agent! [09:27.220 --> 09:27.500] Yes! [09:30.440 --> 09:31.800] And you, Matthew Harrison Brady... [09:31.800 --> 09:33.860] God's honor to the rest of the world! [09:34.040 --> 09:34.140] Ridiculous! [09:35.140 --> 09:36.840] The only one great truth in the world! [09:37.120 --> 09:38.560] Each man is a free agent! [09:39.920 --> 09:40.240] Yes! [09:41.840 --> 09:42.480] And you, Matthew Harrison Brady... [09:42.480 --> 09:42.580] Yes! [09:42.740 --> 09:44.020] And you, Matthew Harrison Brady... [09:45.100 --> 09:46.200] God's honor to the rest of the world! [09:46.360 --> 09:46.760] Ridiculous! [09:47.020 --> 09:48.460] The only one great truth in the world! [09:48.560 --> 09:49.980] Each man is a free agent! [09:51.220 --> 09:51.620] Yes! [09:53.840 --> 09:54.980] And you, Matthew Harrison Brady... [09:55.740 --> 09:56.860] God's honor to the world! [09:57.180 --> 09:57.380] Ridiculous! [09:57.720 --> 09:58.920] Don't write the right truth in the world. [09:59.120 --> 10:00.320] Each man is a free agent. [10:00.460 --> 10:13.920] A little pause... and we are back. [10:44.460 --> 10:46.980] Kelvin, drink to you for your love... [10:49.060 --> 10:50.860] If you want get truth in the world, each man is the first! [10:51.860 --> 10:54.620] If you want get truth in the world... [10:54.620 --> 10:56.240] Let's not know what we're talking about. [10:59.640 --> 11:07.400] What has it become? [11:20.280 --> 11:47.240] So, I would include in the headphone material an electronic tone which cued the performers to listen for a stage direction, and in this case, I gave them a direction that they would get a repeating piece of material and to take note of what movements they just happened to be doing and then lock in those movements as the passage repeated. [11:47.600 --> 12:03.180] So, when I worked with performers leading up to the actual concert, I would explain to them that this is one of the directions that you may hear and I would have them work with mock material prior to the concert so that they would get used to that technique. [12:03.180 --> 12:07.520] And so, those two performers that night were given that instruction. [12:08.320 --> 12:21.280] And so, getting back to the earlier point, it's just the simple technology of multitrack and headphones that enabled this completely raw human. [12:21.440 --> 12:27.180] But, you know, one time I played some of this material and someone said, you know, you're really anti-humanist. [12:27.320 --> 12:30.420] And I was so shocked, I thought, wait a minute, we're all humanists, right? [12:30.420 --> 12:35.580] I mean, and then it occurred to me, you know, that person was sort of right. [12:35.600 --> 12:45.280] I am not exalting the human's triumph over chaos in this piece. [12:45.280 --> 12:54.680] I'm rather kind of stripping down human control and finding something that is inherent in the organism that is not based on mastery. [12:59.020 --> 13:09.380] So, this, the multitrack plus headphones technique, it could be digital technology, but it's essentially analog. [13:09.700 --> 13:14.360] There's nothing particularly digital about that, but that changed with Radio Wonderland. [13:14.480 --> 13:20.320] Radio Wonderland really does leverage digital technology because I'm doing all kinds of digital processing live. [13:20.320 --> 13:27.620] And in Radio Wonderland, I use technology to sort of up my live, unrepeatable ante even more. [13:28.040 --> 13:31.760] In Radio Wonderland, I have no pre-recorded sounds at all. [13:32.260 --> 13:41.540] I take all of my sounds from a boombox and only the sounds that I grab live off the air during the course of the performance. [13:44.720 --> 13:54.260] And what else do I need to tell you before I show you a video of Radio Wonderland that was done a few years ago in a studio. [13:56.620 --> 13:59.380] And here it comes. [17:11.050 --> 17:12.330] And here it comes. [17:54.490 --> 18:13.030] For the whole family, for the whole family. [20:36.460 --> 20:38.860] Okay, um... [20:38.860 --> 20:39.920] Thank you! [20:43.560 --> 20:45.120] Any questions right now? [20:45.660 --> 20:46.600] The things that were unclear? [20:47.180 --> 20:52.860] The next thing I'm going to do is point to the different things on the screen and explain what the different components do. [20:53.320 --> 20:54.860] Somebody... I see a hand. [20:54.980 --> 20:55.240] Yes. [20:55.520 --> 20:59.260] So the steering wheel, are you able to switch what that's parameterizing? [20:59.840 --> 21:00.280] Yes. [21:00.440 --> 21:00.740] Oh, yeah. [21:00.960 --> 21:01.100] Yeah. [21:03.080 --> 21:03.520] Okay. [21:03.700 --> 21:03.900] Yeah. [21:04.260 --> 21:08.720] Some people are bewildered because it seems like it does one thing, but then it does different things. [21:08.720 --> 21:12.380] But I hope that people will pick up what you did, which is it really does switch around. [21:13.640 --> 21:15.400] And can you see my cursor? [21:15.700 --> 21:15.940] Yeah. [21:16.280 --> 21:17.420] So I can use it as a pointer. [21:20.920 --> 21:25.500] So, as I said before, the boombox is the source of all the sounds. [21:27.780 --> 21:33.000] And all the processing is in the laptop in Max MSP code. [21:33.540 --> 21:39.160] If you've known Max for years, you might call it Max MSP, but now it's pretty much known as Max, M-A-X. [21:41.000 --> 21:48.720] And this fader box thingy here and the wheel and the shoes and the two pedals down there are all MIDI controllers. [21:48.720 --> 21:51.700] So it's all radio, all Max, all MIDI. [21:54.000 --> 22:01.800] And starting with the shoes, basically, there's pickups in the shoes and the pickups get... [22:02.680 --> 22:09.960] They're piezoelectric transducers that are glued in the... or puttied in the heels of the shoes. [22:09.960 --> 22:20.800] And they get plugged directly into an old store-bought percussion to MIDI converter, the Alesis D2, something like that. [22:20.920 --> 22:26.340] It's old and it's very responsive, very... less than a millisecond response. [22:27.740 --> 22:31.600] And the shoes are excerpting live radio. [22:31.600 --> 22:37.780] They're opening up gates on live radio, but that live radio might be pitch-shifted. [22:37.840 --> 22:50.920] So I can have three or four shoes all cutting up the same radio station, but each shoe has a different transposition of the radio station. [22:50.920 --> 23:01.520] So I can have a kind of riff that I'm creating with the shoes, but it conflicts or combines with whatever the underlying riff is if there's a song on the radio. [23:02.580 --> 23:08.080] But I can also grab radio and make loops of radio, and the shoes can trigger those loops. [23:09.420 --> 23:12.580] And the triggering happens sort of in two ways. [23:12.720 --> 23:18.960] If I hit the shoe slowly, it will trigger the beginning of the sample. [23:19.100 --> 23:20.220] Or I like to call it a grab. [23:20.360 --> 23:21.380] I don't even call it sampling. [23:21.500 --> 23:22.180] I call it grabbing. [23:24.180 --> 23:34.760] But then I also made this thing that I call marimba mode, where if I roll on the shoe, then it doesn't just play the beginning of the sample, but it goes through the sample. [23:34.840 --> 23:36.300] It sustains through the sample. [23:36.520 --> 23:46.540] So if two successive hits on the shoe are shorter than 200 milliseconds, I think, then it goes to marimba mode and I hear more of the sample. [23:49.240 --> 23:53.740] And the wheel is an up and down dial. [23:54.100 --> 24:17.580] And when I made the decision that I have to make grooves completely off the cuff with found sound, whereas in the old days I would work for weeks on my tape loops to do my dub reggae thing, I knew that I wanted to make the sounds off the cuff, and I also knew that I wanted another controller. [24:17.740 --> 24:20.300] I just wanted a knob, a giant knob. [24:21.180 --> 24:25.320] And for months I was debating whether or not to have it be a captain's wheel. [24:27.220 --> 24:30.320] And in retrospect, it just seems so silly. [24:30.560 --> 24:32.220] Of course it had to be a steering wheel. [24:32.880 --> 24:44.540] And the steering wheel is controlling the transposition of the radio, whether it is going to the shoes or it becomes part of one of those automatic patterns. [24:45.840 --> 24:51.660] The steering wheel can also change the cutoff frequency of a filter. [24:51.880 --> 24:55.020] And you've heard that also in that video. [24:55.240 --> 24:56.500] Heard and saw. [24:57.980 --> 25:01.360] The wheel can also control how long the loop is. [25:01.520 --> 25:03.480] I can shorten the length of the loop. [25:04.220 --> 25:08.800] And all of those examples are basically just shifting, just controlling frequency. [25:09.200 --> 25:13.800] It's just an up and down frequency knob, except at the end when I use it as a turntable. [25:15.180 --> 25:19.460] And so then that takes us to that mixer thing. [25:19.660 --> 25:22.760] And it is a MIDI controller with motorized faders. [25:23.080 --> 25:32.140] And the motorized faders is key because then, although it only has eight physical faders, they can physically display far more than eight parameters. [25:32.140 --> 25:38.220] So I use them to mix the various components of my groove or various sub-components of the groove. [25:39.960 --> 25:47.280] Or they can adjust the various thresholds and sort of masking time for what I call the re-esser. [25:47.840 --> 26:05.600] If you're familiar with audio production, you might have heard of this thing called the de-esser, which was originally designed in the days of vinyl to make sure that there were not too strong high frequencies because that could actually make the needle jiggle too much and cause a certain kind of distortion. [26:05.900 --> 26:11.840] So they would run records or tracks through what's called a de-esser to reduce some of those high frequencies. [26:12.260 --> 26:16.420] But what I wanted to do was isolate the high frequencies and use them as percussion. [26:16.420 --> 26:18.120] So I called it the re-esser. [26:18.120 --> 26:28.440] And when I did that, I discovered that little consonants taken from speech, if I isolate them, they sound a lot like a drum machine. [26:28.460 --> 26:30.100] And they sound like a snare drum. [26:30.480 --> 26:35.940] And it was really a wonderful example of, I guess, experimental music. [26:35.940 --> 26:41.160] I did an experiment and had something that came up that I didn't even know what happened. [26:41.540 --> 26:49.060] And I knew that I wanted to see if I could get workable percussion from spoken word, but it just worked better than I dreamed. [26:49.180 --> 26:50.380] And I was very happy about that. [26:54.360 --> 26:56.360] So this is a hacker conference. [26:56.600 --> 26:59.380] And I assume there's some interesting computers. [26:59.980 --> 27:06.200] And I wanted to do kind of a reality check to see if you're like me. [27:06.680 --> 27:13.680] If you were like me, knowing that this was done in computer code, I would just want to see some of the code. [27:13.820 --> 27:17.540] Like, it doesn't feel complete unless I actually see some code. [27:17.620 --> 27:18.900] And it doesn't have to be all of it. [27:19.140 --> 27:30.240] But if I don't get under the hood in some fashion, even if I forget about it tomorrow, even if I don't totally get it, I just have to see that code or else it just seems like nonsense. [27:30.420 --> 27:32.800] It doesn't seem... it doesn't really land. [27:33.580 --> 27:35.140] So raise your hand if you're like that. [27:36.700 --> 27:37.140] Really? [27:39.720 --> 27:42.400] Including some of the caveats, like if it's incomplete. [27:42.800 --> 27:46.660] And it's almost like... for me, I'm glad you raised your hands. [27:46.780 --> 27:49.660] But for me, it's almost like a placebo. [27:50.000 --> 27:53.260] Because I'll feel this compulsion. [27:53.440 --> 27:54.960] I have to know what's under the hood. [27:54.960 --> 27:57.600] And then I look at it, and I don't get everything. [27:58.180 --> 28:00.940] And I know I'm not going to remember it the next day, but I still got it. [28:01.020 --> 28:01.460] But okay. [28:03.120 --> 28:05.440] With that, let me open up Max. [28:06.180 --> 28:11.960] Max is a programming environment that was originally started at IRCOM, the Institute of Digital... [28:14.140 --> 28:14.540] IRCOM. [28:15.500 --> 28:17.960] Research, Acoustics, and Musical... [28:19.200 --> 28:19.900] I forget. [28:20.120 --> 28:22.500] But it was, I think, is in Paris. [28:23.140 --> 28:24.680] And a guy named... [28:24.680 --> 28:29.740] A wonderful, brilliant guy named Miller Puckett, who should speak at HOPE, devised it at IRCOM. [28:29.880 --> 28:35.140] And then it later on was taken up by a very cool little company called Cycling 74. [28:36.020 --> 28:39.760] And you may not have heard of Max, but you've probably heard of Ableton Live. [28:40.740 --> 28:43.460] And Ableton Live started as a Max patch. [28:43.460 --> 28:54.020] The programming that you do in Max involves connecting objects with virtual patch cords, so the completed programming you call a Max patch. [28:54.520 --> 29:06.760] Ableton started as a Max patch, and for many years they lived in two different tracks, and a few years ago they were combined, and now you can leverage Max programming within Ableton Live. [29:06.760 --> 29:11.280] But when I devised Radio Wonderland, Ableton Live didn't exist yet. [29:11.640 --> 29:15.080] If I had done it ten years later, I think I would have done it very differently. [29:17.040 --> 29:23.920] So let me open up a new Max window, and let me show you what this... [29:23.920 --> 29:25.460] Okay, is that big enough? [29:25.760 --> 29:27.420] No, that's really small. [29:27.420 --> 29:33.740] But as of Max 6, you can zoom your Max patches. [29:34.080 --> 29:35.200] And that never... [29:35.200 --> 29:36.260] Is that big enough, people? [29:38.020 --> 29:38.840] That's good? [29:39.000 --> 29:39.180] Okay. [29:40.080 --> 29:47.760] So I typed in Easy DAC, Easy ADC, Analog Digital Converter, and it turned into that icon. [29:48.000 --> 29:49.200] That's the Easy DAC object. [29:50.340 --> 29:52.900] There is the Easy... [29:55.180 --> 29:55.860] Easy... [29:55.860 --> 29:57.560] That's the Easy DAC. [29:58.580 --> 30:02.020] I can connect them, but let me turn my volume down. [30:05.810 --> 30:06.490] Okay. [30:07.510 --> 30:13.350] So Max Audio Processing, which is also called MSP, creates a signal network. [30:15.090 --> 30:16.610] Actually, let me jump ahead. [30:16.950 --> 30:20.750] Normally, in Max, you send things... [30:21.710 --> 30:23.230] There's a Max button. [30:24.050 --> 30:31.350] That are messages, and the message event rate is on the order of a millisecond. [30:31.990 --> 30:34.370] And that's a Max message box. [30:36.090 --> 30:39.250] I send the output of the button to the input of the message box. [30:39.370 --> 30:40.690] So here's a Max event. [30:41.270 --> 30:46.870] The button sends the message bang, and bang is the convention that Max uses to tell its objects to do their thing. [30:47.950 --> 30:51.970] And you can have timer objects, like you can create a metronome object. [30:52.110 --> 30:52.330] Oops. [30:52.490 --> 30:53.210] That's not what I meant. [30:57.650 --> 30:58.530] You can... [30:58.530 --> 30:58.730] Okay. [30:59.010 --> 30:59.450] What... [30:59.450 --> 31:00.790] I am hitting... [31:00.790 --> 31:04.330] Oh, it's the fact that the W and the E are right next to each other. [31:05.590 --> 31:19.210] There's a metronome object, and I can set it to propagate messages four times a second, 250 milliseconds. [31:22.570 --> 31:28.990] I use the toggle button to send ones and zeros to Metro to turn it on. [31:29.770 --> 31:33.810] And it sends bang messages to the button, and the button will blink. [31:37.800 --> 31:48.240] And so that's your quarter of a second metronome with an event scheduler that's running around once a millisecond. [31:48.380 --> 31:52.980] But the Max signal network propagates at the sample rate. [31:53.440 --> 31:55.260] Under the hood, there's C code. [31:55.540 --> 32:11.900] But when you're in the Max environment, it's really wonderful to think of this 44.1 thousand sample per second rate at which all these different events happen, including an audio signal propagating at the sample rate. [32:12.000 --> 32:15.920] But you can also have control values at the sample rate. [32:16.120 --> 32:20.380] So now I'm turning the volume down, and I'm going to turn the audio network on. [32:20.700 --> 32:23.800] And as I turn the volume up, we'll start to get feedback. [32:32.660 --> 32:33.220] Okay. [32:33.500 --> 32:33.820] All right. [32:37.640 --> 32:41.380] But I can also put the audio through a gate. [32:41.740 --> 32:44.190] And there is a signal processing gate. [32:47.610 --> 32:48.930] Oh, which I haven't used. [32:49.030 --> 32:52.170] I always use the Max gate, never the MSP gate. [32:52.350 --> 32:53.590] Let's see how I do here. [32:54.870 --> 32:55.570] All right. [32:55.790 --> 32:57.450] And then send the audio signal. [33:03.640 --> 33:04.040] Okay. [33:04.860 --> 33:06.160] Did I do this right? [33:06.900 --> 33:10.820] There's so much more to show you, or that I could show you. [33:11.320 --> 33:15.060] When I started programming in Max, I didn't know much about programming. [33:15.220 --> 33:16.940] I ended up teaching Max at NYU. [33:17.420 --> 33:23.980] So if you go back to the earliest part of my code, you see the worst programming habits, and then it gets better. [33:23.980 --> 33:25.620] So let's see if our gate works. [33:32.130 --> 33:34.450] Oh, did I mix up my on with my off? [33:41.350 --> 33:42.430] Here comes the feedback. [33:46.740 --> 33:47.220] And... [33:47.220 --> 33:48.380] How come I'm still hearing it? [33:57.850 --> 33:59.830] Oh, I think it's because... [33:59.830 --> 34:04.010] It's because I have another patch going on behind this. [34:04.010 --> 34:04.670] So... [34:08.340 --> 34:09.140] Here is... [34:10.780 --> 34:13.840] One section of code that's actually based on Radio Wonderland. [34:13.960 --> 34:16.700] It's just the code that allows me to... [34:17.620 --> 34:19.480] loop the last one second of audio. [34:19.700 --> 34:21.580] One second of audio... [34:27.240 --> 34:28.600] Jim, listen to that distortion. [34:29.320 --> 34:30.460] Check one, two... [34:30.460 --> 34:31.620] Okay, is this going to be any better? [34:31.680 --> 34:33.620] Is this going to be any better? [34:42.800 --> 34:44.540] I'm lowering my output here. [34:44.680 --> 34:47.640] Can you give me some more level in the room? [34:52.260 --> 34:56.340] I think the distortion... I think there's something wrong with the... [34:56.340 --> 34:58.680] I'm going to turn audio off and back on again. [34:59.460 --> 35:01.160] And we're recording again. [35:01.160 --> 35:02.560] Will it be clear this time? [35:05.900 --> 35:07.560] I get this sometimes when... [35:11.140 --> 35:13.160] No, that's a real DSP problem. [35:13.400 --> 35:13.980] Hang on. [35:14.200 --> 35:16.740] I'm going to change some of the audio parameters here. [35:18.780 --> 35:22.260] I'm going to change my signal vector size to something more human. [35:25.060 --> 35:27.660] And... see if those gremlins go away. [35:28.840 --> 35:29.740] Any better? [35:30.620 --> 35:31.180] Clearer? [35:31.180 --> 35:32.580] Check one, two. [35:38.700 --> 35:40.300] Well, it's not tomorrow night's performance. [35:40.720 --> 35:41.800] So I'm fine. [35:43.080 --> 35:48.000] And you can see the underlying code. [35:48.320 --> 36:01.220] The key thing about this is that it's only a four second buffer, but you can see it records and then it just starts recording again from the beginning. [36:01.580 --> 36:10.180] And I can stop anywhere and get the last one second of what I did. [36:10.180 --> 36:15.540] Even if it goes over the end of the buffer. [36:20.500 --> 36:22.120] That is kind of driving me nuts. [36:22.320 --> 36:24.180] Let me just... okay, hang on here. [36:28.650 --> 36:30.610] If I... go with it. [36:30.690 --> 36:31.550] I think you're right. [36:32.610 --> 36:35.110] Okay, we're going to give this one more shot. [36:36.610 --> 36:39.910] And... but see, the function... oh, no, get inside. [36:40.550 --> 36:40.910] Side. [36:40.910 --> 36:41.150] Side. [36:41.590 --> 36:41.950] Side. [36:42.350 --> 36:44.130] Now, I think the problem's still there. [36:44.290 --> 36:45.130] I think the problem's still there. [36:49.390 --> 36:53.010] So, Max gives you... and they didn't used to have this. [36:53.170 --> 37:04.310] You used to make... you used to have your code, whatever elegance and organization of your code you had, had to suffice for your presentation, for your interface, as well as the underlying code. [37:04.310 --> 37:13.750] Now Max allows you to deploy the objects visually in a presentation mode and a patching mode, and you can hide elements from the presentation mode. [37:13.890 --> 37:17.630] So that's the presentation mode, but the patching mode has all of this. [37:19.630 --> 37:27.410] And so this is just a replica of the little bit of code that allows me to loop the last one second. [37:29.630 --> 37:37.440] And so what I have here... Let me start with the playback. [37:37.920 --> 37:42.180] You see this phaser object here. [37:42.460 --> 37:45.460] A phaser object propagates phase. [37:45.840 --> 37:46.680] Well, actually, no. [37:46.800 --> 37:51.320] It propagates a ramp that runs from 0 to 1 at the sample rate. [37:51.320 --> 38:01.220] But Max MSP uses a 0 to 1 world in audio and for phase when it comes with loops and cycles. [38:01.840 --> 38:09.800] So you can use this very precise ramp at the sample rate to control all kinds of timing. [38:10.460 --> 38:14.560] And my playback object is an object that Max provides called play. [38:14.880 --> 38:16.880] And you see the little tilde after it? [38:16.880 --> 38:20.460] All the MSP signal processing objects have a tilde after them. [38:20.580 --> 38:21.860] And it looks so much like a wave. [38:22.060 --> 38:23.520] I forget that it's tilde. [38:23.760 --> 38:25.140] And I think it's just a wave. [38:25.360 --> 38:26.880] I think it's just MSP. [38:28.540 --> 38:39.340] So wave takes as its control input numbers that propagate at the sample rate that denote milliseconds for playback. [38:39.340 --> 38:52.680] So if you ramp from 2,000 to 4,000 at the sample rate and there is a buffer that has audio material between 2,000 and 4,000 milliseconds, the play object will play that bit of audio. [38:53.480 --> 39:13.400] And what I need to do is take the 0 to 1 values from the phaser, multiply them out so that they give me the milliseconds that apply to my loop, and then offset them to the point of the buffer that's one second before I hit that button to playback the last second. [39:13.400 --> 39:17.080] And so that process I do here. [39:17.200 --> 39:21.300] And the key is this thing called Snapshot. [39:22.240 --> 39:29.840] And when I hit my space bar, which is the thing that controls it, it sends a bang to Snapshot. [39:30.060 --> 39:40.180] And Snapshot gives me the number that was fed into its input at the time that I send that bang message to Snapshot. [39:40.840 --> 39:46.980] Where in that buffer was the record process when I hit the space bar? [39:47.100 --> 39:48.940] That's the crucial information I need. [39:49.060 --> 39:49.920] And that's really all I need. [39:50.040 --> 39:51.040] I'm recording it to the buffer. [39:51.260 --> 39:57.880] Just tell me when it is, buffer-wise, when I hit that button and I can calculate my audio. [39:59.520 --> 40:05.260] And so then all I'm doing is subtracting the number that I... [40:05.960 --> 40:12.820] Well, sorry, I take the 0 to 1 number from the record object, and that is giving me phase... [40:12.820 --> 40:14.160] I'm sorry, that wasn't clear. [40:14.360 --> 40:25.600] The record object, which records into the same buffer that the play is referencing, also sends a sync signal, a 0 to 1 sync signal, and Snapshot grabs that number. [40:26.120 --> 40:31.520] So I multiply it out from 0 to 1 by 4,000 because it's a 4-millisecond buffer. [40:31.740 --> 40:36.480] I'm sorry, a 4,000-millisecond buffer, a 4-second buffer, 4,000 milliseconds. [40:36.480 --> 40:48.260] And so that number is then offset from the beginning of the record point. [40:48.360 --> 40:53.080] And I subtract 1,000 to get 1 second earlier. [40:53.500 --> 40:57.280] And this pong object is kind of a modulo object. [40:57.280 --> 41:10.080] It wraps around the value so that if I am hitting my spacebar right when it's at the beginning of the buffer, it'll subtract 1,000, that makes it minus 1,000. [41:10.480 --> 41:13.100] But the wraparound object will say, no, no, no, that's 3,000. [41:13.220 --> 41:15.300] One less than the maximum, one less than... [41:15.300 --> 41:18.360] 1,000 less than the modulo of 4,000. [41:18.560 --> 41:19.620] Does that make sense? [41:22.280 --> 41:26.100] Okay, I got one sure, and no one else seems to be wincing. [41:26.820 --> 41:28.200] I think I'm getting some thumbs up. [41:28.820 --> 41:33.480] And that's basically it, but I've left out because I had certain patch cords hidden. [41:35.400 --> 41:39.820] This is the code that detects whether or not I am hitting the spacebar. [41:40.000 --> 41:41.980] Sorry, it detects when I hit the spacebar. [41:42.160 --> 41:46.480] And it resets the phase of the playback phaser. [41:47.000 --> 41:50.520] It gates out the audio when I'm recording. [41:51.080 --> 41:55.000] It changes the background color of my waveform there. [41:55.000 --> 42:04.680] And this was implicit, but in case it wasn't clear, the play object and the record object are referring to a buffer that I declared over here. [42:05.320 --> 42:07.300] And the buffer out... whoops, where'd it go? [42:07.500 --> 42:11.780] The buffer allocates a certain amount of RAM for me to record audio into. [42:15.170 --> 42:17.230] Any questions about this? [42:20.650 --> 42:26.770] Oh, at stand for... they denote attributes, and they modify the function of the object. [42:27.090 --> 42:37.210] So the play object will then loop, and whether or not it does interpolation between the end of the loop and the beginning of the next loop is set by those two attributes. [42:41.590 --> 42:48.250] And I wanted to say a little more about sort of the big picture, and then get to some questions. [42:52.210 --> 42:52.690] So... [42:54.290 --> 42:56.550] Max is a high-level language. [42:56.970 --> 42:58.750] And it's right for me. [42:59.150 --> 43:01.350] I don't need to code the whole thing in C. [43:01.930 --> 43:05.850] Max was encoded... it was coded mostly in C. [43:05.850 --> 43:11.150] Max now... MSP now leverages some audio processing libraries. [43:11.550 --> 43:13.230] And Max has an escape hatch. [43:13.330 --> 43:15.190] You can write your own objects in C. [43:15.630 --> 43:19.810] You can also leverage Java or JavaScript in Max. [43:19.990 --> 43:21.470] And Max is completely scriptable. [43:21.730 --> 43:28.190] And Max now has this audio processing compiler called GEN, G-E-N. [43:28.190 --> 43:39.470] And it compiles really well-optimized code and allows you to have normal code that you write with typing in the Max environment. [43:39.750 --> 43:43.170] But for me, the high level of Max is perfectly fine. [43:43.250 --> 43:48.430] And I think it's important for artists or just for anybody to find their sweet spot. [43:48.430 --> 43:51.250] And my sweet spot is not the lowest level. [43:51.450 --> 44:00.170] I remember I was privileged to witness a conversation between two giants of electronic and computer music. [44:00.310 --> 44:02.870] Lori Spiegel and David Bearman. [44:02.870 --> 44:06.030] And I remember Lori Spiegel saying she couldn't... [44:06.030 --> 44:07.170] She couldn't... [44:07.170 --> 44:07.970] Oh, I... [44:07.970 --> 44:08.530] Oh, we... [44:08.530 --> 44:09.290] Oh, that's right. [44:09.470 --> 44:09.870] That's right. [44:10.030 --> 44:13.850] There has to be time between my presentation and the next one. [44:14.250 --> 44:17.550] Well, I want questions, but there's a few more things I wanted to say. [44:17.890 --> 44:22.830] Very quickly, what Lori Spiegel said was, I just want a 15 megahertz interrupt. [44:23.410 --> 44:25.410] And maybe that's not exactly what she said. [44:25.490 --> 44:26.470] And I didn't know what it meant. [44:26.590 --> 44:31.150] But it meant that she didn't want this thing called Sound Manager in the Macintosh. [44:31.170 --> 44:33.150] It was too high level, too abstract for her. [44:33.530 --> 44:35.170] But it's fine with me. [44:35.950 --> 44:42.010] But if I'm using a high level language and I'm using Max as intended, so where's the hack? [44:42.770 --> 44:45.710] What's hackery about what I'm doing? [44:46.770 --> 44:48.990] Now, I'm using Max as intended. [44:48.990 --> 44:51.730] But I'm not using the media as intended. [44:52.270 --> 44:55.270] I'm sampling media that wasn't intended to be sampled. [44:55.450 --> 44:57.970] And I'm not just sampling songs, I'm sampling commercials. [44:58.230 --> 45:01.430] And I think that, if anything, is where I'm like a hacker. [45:01.750 --> 45:04.470] I'm stealing the production values of FM radio. [45:04.830 --> 45:09.430] I spent years trying to come up with creative ways to use found sound. [45:09.490 --> 45:12.090] I would pass a microphone around the audience. [45:12.330 --> 45:13.950] And it never sounded that good. [45:13.950 --> 45:32.150] And finally, I just took the plunge and decided I'm just going to use the very well produced, schooled voices, pop singers and announcers doing station IDs with the $10,000 microphone and the perfect compressors in their studio, cut them up and use them for my purposes, [45:32.150 --> 45:35.830] as well as taking a part in deconstructing commercial technology. [45:35.830 --> 45:40.050] So that, I submit to you, is the hack, if there's any hack in there. [45:44.410 --> 45:45.750] Is it getting it done? [45:46.110 --> 45:48.330] Yeah, okay, I think I got it done. [45:48.490 --> 45:49.650] And I do it in real time. [45:52.050 --> 46:09.530] So, in Radio Wonderland, the familiar source and the fact that it's a commercial source, and using familiar objects and transformations that are simple and transparent, doing it all live, to me that just makes it electric and keeps me excited when I'm doing it. [46:09.530 --> 46:13.650] So, come to the show tomorrow, and we have maybe two, three minutes for questions? [46:14.250 --> 46:15.310] Yeah, we have four minutes. [46:15.310 --> 46:16.890] We have four minutes for questions. [46:18.130 --> 46:20.070] Well, maybe you asked everything that you needed. [46:20.590 --> 46:21.270] Over there? [46:41.310 --> 46:43.790] That's a very Ableton kind of question. [46:43.990 --> 46:44.890] Ableton does that. [46:45.030 --> 46:50.070] Max has objects that allow you to program that, but that's not what I'm doing. [46:50.070 --> 46:55.010] What I'm doing is explicitly imposing my tempo on the two different songs. [46:55.350 --> 46:57.610] And that collision is what makes it interesting. [46:57.930 --> 47:02.390] It's a very Ableton sensibility to let's mash everything to match the tempo. [47:02.530 --> 47:03.010] And it's beautiful. [47:03.190 --> 47:08.030] I mean, I love beat matching and DJing, but Radio Wonderland is a different thing. [47:09.710 --> 47:10.270] Yeah. [47:11.050 --> 47:11.490] So, [47:14.880 --> 47:15.260] it's possible. [47:15.480 --> 47:16.000] Oh, yeah. [47:16.520 --> 47:22.100] And I wanted to say more about the radio interface. [47:22.300 --> 47:23.840] Is that totally outside of software? [47:24.260 --> 47:28.640] Or when you're doing live, you mentioned the radio interface. [47:31.650 --> 47:40.250] I have two mini-jacks connected to the output of this 1980s era boombox, and they go into the mini-jack of the PowerBook. [47:40.570 --> 47:41.490] And that's it. [47:41.870 --> 47:42.130] Okay. [47:42.590 --> 47:44.990] So, I'm not controlling the radio at all. [47:44.990 --> 47:46.950] Can't have two stations at once. [47:47.170 --> 47:49.890] I can sample a station, then tune to another station. [47:50.090 --> 47:53.050] And it's my hope when I'm performing live that people get that. [47:53.250 --> 47:56.490] And also, I walk through with a boombox like I did in the video. [47:57.130 --> 47:57.730] Somebody else? [48:01.760 --> 48:02.200] Yeah. [48:02.660 --> 48:03.640] Hi, it's me. [48:03.880 --> 48:04.320] Hey. [48:08.570 --> 48:10.970] From passing the mic around, was there anything else? [48:11.070 --> 48:15.070] Like, once you started getting closer to this concept, how did things change? [48:18.600 --> 48:19.400] Oh, yeah. [48:19.400 --> 48:19.500] Yeah. [48:20.960 --> 48:21.520] Um... [48:22.100 --> 48:22.660] I... [48:22.660 --> 48:29.720] For many years, I performed a piece I called Shoes, Loops, and FM Radio, where I had two shoes gating... [48:29.720 --> 48:36.500] pre-recorded loops and two shoes with live radio, but none of the patterning, no repeated pattern at all. [48:36.720 --> 48:39.840] So, it was really an intense exercise in the shoes. [48:39.840 --> 48:44.500] And then I did a few performances where there were no non-radio elements at all. [48:44.720 --> 48:47.280] And it was scary, but, oh, it kind of worked. [48:47.340 --> 48:48.200] It was okay. [48:48.200 --> 48:50.240] I didn't need my reliable loops. [48:51.900 --> 49:02.240] And then I knew that there would be some sort of software way to do this, and then I learned about Max, and Max signal processing had recently been introduced, and then I was off. [49:05.850 --> 49:06.690] Anybody else? [49:06.690 --> 49:06.710] Yes. [49:06.890 --> 49:07.010] Yeah. [49:08.030 --> 49:11.090] The piece. [49:11.410 --> 49:13.890] Do you improv a hundred percent score? [49:14.610 --> 49:23.670] Do you have, like, at least you know, like, within a piece you're able to be a CD and the salary might be recorded enough on my live? [49:24.670 --> 49:25.350] Does it happen? [49:26.450 --> 49:30.830] I don't know if I know what I'm asking, but do you kind of plan out what those pieces are going to be headed by? [49:31.570 --> 49:33.230] I think I do know what you're asking. [49:33.610 --> 49:39.010] And, yes, I think you kind of hooked into one of the principles. [49:39.290 --> 49:42.230] I rehearse it, and I have different processes. [49:42.230 --> 49:45.190] I even have different patterns that I can apply to the radio. [49:45.610 --> 49:46.850] So there's a lot... [49:46.850 --> 49:47.930] I bring a lot to it. [49:48.370 --> 49:52.210] Sometimes the grand finale, like in that example, is the steering wheel. [49:52.630 --> 49:53.830] Sometimes I do a thing... [49:54.410 --> 49:57.130] Oh, I didn't even mention that the steering wheel also controls tempo. [49:57.710 --> 50:01.110] I'll do a ramp up or a ramp down of the tempo as the finale. [50:01.430 --> 50:09.150] I generally will create the kick drum, and I didn't talk about the algorithm for that, early on in the piece. [50:09.330 --> 50:11.150] And I know I want to create a riff. [50:11.930 --> 50:17.010] And I will sometimes also have other plans, like, let me have a very slow tempo. [50:17.270 --> 50:20.250] Maybe can I do a hip-hop groove this time? [50:20.470 --> 50:22.070] Today I'm feeling more techno. [50:22.130 --> 50:24.810] I will up the tempo a bit, and things like that. [50:24.810 --> 50:26.950] And I absolutely do rehearse. [50:27.190 --> 50:28.550] But the rehearsal... [50:28.550 --> 50:31.870] The whole thing stays honest because of the unpredictable source for me. [50:31.950 --> 50:33.530] I don't get locked into anything. [50:36.810 --> 50:38.390] Okay, I think that's it. [50:39.390 --> 50:40.570] Thank you all for coming. [50:58.910 --> 50:59.650] Oh, good. [51:07.620 --> 51:08.620] I'm unplugging. [51:08.740 --> 51:08.960] Hello. [51:08.960 --> 51:08.980] There you go. [51:08.980 --> 51:09.140] we'll beatiable. [51:09.460 --> 51:09.760] Good. [51:09.760 --> 51:09.820] Ed Selig. [51:09.820 --> 51:10.120] Good. [51:10.120 --> 51:10.120] Good.