1 00:00:05,239 --> 00:00:07,259 [music] 2 00:00:09,825 --> 00:00:11,845 [music] 3 00:00:15,360 --> 00:00:17,920 Hello, welcome back. Now on stage we 4 00:00:17,920 --> 00:00:20,305 have Jesse Maner. 5 00:00:20,305 --> 00:00:22,325 [applause] 6 00:00:31,599 --> 00:00:34,239 There we go. Hello everyone. How you all 7 00:00:34,239 --> 00:00:36,239 going? 8 00:00:36,239 --> 00:00:39,280 Yippee. I'm very excited to be here. Uh, 9 00:00:39,280 --> 00:00:40,879 I need to let you know I've brought 10 00:00:40,879 --> 00:00:44,239 something with me to show you. I use 11 00:00:44,239 --> 00:00:46,879 this system to kind of put in audio, 12 00:00:46,879 --> 00:00:48,800 transform it, and try and make music on 13 00:00:48,800 --> 00:00:50,800 the spot with it. We getting some 14 00:00:50,800 --> 00:00:52,879 feedback. It's all right. It shouldn't 15 00:00:52,879 --> 00:00:54,480 keep happening. 16 00:00:54,480 --> 00:00:57,120 Uh, keep in mind I am a violinist, but I 17 00:00:57,120 --> 00:00:58,160 haven't brought that with me on the 18 00:00:58,160 --> 00:00:59,920 plane. I've just brought a prototype 19 00:00:59,920 --> 00:01:03,520 that I've made just for you today. 20 00:01:03,520 --> 00:01:05,840 I'll try and show you how this works. 21 00:01:05,840 --> 00:01:08,479 So, put 22 00:01:08,479 --> 00:01:12,080 my voice. We got some piano in there. I 23 00:01:12,080 --> 00:01:14,960 can add effects and play it back. 24 00:01:14,960 --> 00:01:19,240 Hopefully making music out of it. 25 00:01:19,280 --> 00:01:24,119 Record my voice. Record my voice. 26 00:01:24,799 --> 00:01:28,040 be off. 27 00:01:28,960 --> 00:01:31,040 Record. Record my voice. Record my 28 00:01:31,040 --> 00:01:33,119 voice. Add effects. Add effects. [music] 29 00:01:33,119 --> 00:01:36,240 Record my voice. Record my voice. Record 30 00:01:36,240 --> 00:01:40,159 my voice. Record my voice. Record my 31 00:01:40,159 --> 00:01:42,400 voice. Add effects. Record my voice. 32 00:01:42,400 --> 00:01:44,640 Play it back. Record my voice. Add 33 00:01:44,640 --> 00:01:47,119 effects. Record my voice. Play it back. 34 00:01:47,119 --> 00:01:49,520 Record my voice. Add effects. Record my 35 00:01:49,520 --> 00:01:51,920 voice. Play it back. Record my voice. 36 00:01:51,920 --> 00:01:54,079 Add effects. Record my voice. Play it 37 00:01:54,079 --> 00:01:56,479 back. Record my voice. Add effects. 38 00:01:56,479 --> 00:01:58,960 Record my voice. Play it back. Record my 39 00:01:58,960 --> 00:02:01,200 voice. Add effects. Record my voice. 40 00:02:01,200 --> 00:02:04,560 Play it back. Record my voice. Record my 41 00:02:04,560 --> 00:02:08,439 voice. Play it back. 42 00:02:20,160 --> 00:02:23,160 Hey, 43 00:02:28,686 --> 00:02:31,959 [music] cut. 44 00:02:37,856 --> 00:02:39,680 [music] 45 00:02:39,680 --> 00:02:42,680 Wow. 46 00:02:51,040 --> 00:02:53,576 Yeah. 47 00:02:53,576 --> 00:02:54,800 [music] 48 00:02:54,800 --> 00:02:57,800 Yeah. 49 00:02:59,472 --> 00:03:01,492 [music] 50 00:03:07,599 --> 00:03:10,662 Heat. [music] 51 00:03:17,812 --> 00:03:19,832 [music] 52 00:03:22,397 --> 00:03:24,417 [music] 53 00:03:28,560 --> 00:03:30,967 Heat. [music] 54 00:03:32,959 --> 00:03:35,959 Heat. 55 00:03:50,640 --> 00:03:53,640 Heat. 56 00:03:53,837 --> 00:03:55,857 [music] 57 00:03:56,799 --> 00:03:59,799 Oh, 58 00:04:02,352 --> 00:04:04,372 [singing] 59 00:04:09,200 --> 00:04:12,232 heat, heat. [music] 60 00:04:16,107 --> 00:04:17,759 [music] 61 00:04:17,759 --> 00:04:20,759 Heat. Heat. N. 62 00:04:23,312 --> 00:04:25,332 [music] 63 00:04:27,759 --> 00:04:30,759 Heat. Heat. 64 00:04:32,483 --> 00:04:34,503 [music] 65 00:04:37,068 --> 00:04:37,759 [music] 66 00:04:37,759 --> 00:04:40,759 Heat. 67 00:04:42,800 --> 00:04:45,800 Heat. 68 00:04:46,238 --> 00:04:48,258 [music] 69 00:04:52,133 --> 00:04:52,800 [music] 70 00:04:52,800 --> 00:04:55,800 Heat. Heat. 71 00:05:13,280 --> 00:05:16,280 Heat. Heat. N. 72 00:05:23,280 --> 00:05:26,280 Hallelujah. 73 00:05:38,638 --> 00:05:40,658 [music] 74 00:05:49,773 --> 00:05:51,793 [music] 75 00:06:01,039 --> 00:06:04,600 Every night. 76 00:06:04,839 --> 00:06:06,859 [music] 77 00:06:14,664 --> 00:06:16,684 [music] 78 00:06:18,240 --> 00:06:21,240 Heat. Heat. 79 00:06:52,654 --> 00:06:54,674 [music] 80 00:07:03,919 --> 00:07:05,754 Can you hear me? 81 00:07:05,754 --> 00:07:07,520 [applause] 82 00:07:07,520 --> 00:07:09,599 Thank you. Can you hear this? Okay, 83 00:07:09,599 --> 00:07:11,919 cool. Well, it did break. That's how 84 00:07:11,919 --> 00:07:13,840 tech demos go, I guess. But at least you 85 00:07:13,840 --> 00:07:15,919 got to hear some of it. Does that kind 86 00:07:15,919 --> 00:07:18,880 of make sense what I'm doing? 87 00:07:18,880 --> 00:07:20,880 That's okay. We've got lots of slides to 88 00:07:20,880 --> 00:07:22,720 go through, so it's all good. You'll 89 00:07:22,720 --> 00:07:26,840 understand by the end of this hopefully. 90 00:07:29,280 --> 00:07:32,680 Is that working? 91 00:07:33,520 --> 00:07:35,440 There we go. Round of applause for 92 00:07:35,440 --> 00:07:39,080 getting slides working. 93 00:07:39,160 --> 00:07:41,180 [applause] 94 00:07:46,639 --> 00:07:50,160 Where's this gone? 95 00:07:50,160 --> 00:07:53,120 Yeah. Okay. 96 00:07:53,120 --> 00:07:57,960 So, you may be wondering, 97 00:07:58,720 --> 00:08:01,280 what the hell is that? 98 00:08:01,280 --> 00:08:03,199 Why did you make this? And what does it 99 00:08:03,199 --> 00:08:05,360 have to do with Python? 100 00:08:05,360 --> 00:08:07,360 Truth be told, it only has a little bit 101 00:08:07,360 --> 00:08:09,520 to do with Python. So, when we get to 102 00:08:09,520 --> 00:08:11,360 the Python bit, can everybody just go 103 00:08:11,360 --> 00:08:13,280 crazy? Cuz it only really gets mentioned 104 00:08:13,280 --> 00:08:15,440 once, but none of this would be possible 105 00:08:15,440 --> 00:08:17,919 without Python. Is that okay? Do you 106 00:08:17,919 --> 00:08:19,120 want to have a quick practice run? Like, 107 00:08:19,120 --> 00:08:21,280 heaps of noise, stomp your feet. 108 00:08:21,280 --> 00:08:23,280 Yeah. Okay. Stop. Stop. Cool. We got a 109 00:08:23,280 --> 00:08:24,240 lot of slides to get through. Let's 110 00:08:24,240 --> 00:08:26,479 speed this up. [laughter] 111 00:08:26,479 --> 00:08:28,400 Let's go right back to the beginning to 112 00:08:28,400 --> 00:08:32,199 understand all of this. 113 00:08:32,800 --> 00:08:35,360 You laughing at the size of my head? I 114 00:08:35,360 --> 00:08:38,110 hope not. 115 00:08:38,110 --> 00:08:39,599 [snorts] When I was little, I played the 116 00:08:39,599 --> 00:08:42,479 violin a lot. And then I started 117 00:08:42,479 --> 00:08:44,480 busking, mostly improvising with an 118 00:08:44,480 --> 00:08:46,640 electric violin and a loop station. Uh, 119 00:08:46,640 --> 00:08:48,720 you're all familiar with live looping. 120 00:08:48,720 --> 00:08:51,040 Seen it before. Okay, cool, cool, cool. 121 00:08:51,040 --> 00:08:53,200 Uh, my loop station looks like this. 122 00:08:53,200 --> 00:08:55,200 It's basically just one button that you 123 00:08:55,200 --> 00:08:57,120 press to start recording. Press it again 124 00:08:57,120 --> 00:08:59,279 to end the loop. it immediately starts 125 00:08:59,279 --> 00:09:00,959 playing that loop back and then you 126 00:09:00,959 --> 00:09:03,120 press it again to add on top of that 127 00:09:03,120 --> 00:09:06,240 loop. Double tap it to stop. I then 128 00:09:06,240 --> 00:09:08,320 added an effects pedal which allowed me 129 00:09:08,320 --> 00:09:10,720 to use standard electric guitar effects 130 00:09:10,720 --> 00:09:13,200 like uh distortion. Uh I could change 131 00:09:13,200 --> 00:09:15,760 the pitch and I had a W expression as 132 00:09:15,760 --> 00:09:16,959 well. That's the sound an electric 133 00:09:16,959 --> 00:09:19,680 guitar makes when it goes. 134 00:09:19,680 --> 00:09:21,519 What fascinated me was how much you 135 00:09:21,519 --> 00:09:23,440 could get out of so little. It was only 136 00:09:23,440 --> 00:09:25,279 a few buttons and dials, but it opened 137 00:09:25,279 --> 00:09:28,000 up so many possibilities for me. 138 00:09:28,000 --> 00:09:29,839 I could improvise so many different 139 00:09:29,839 --> 00:09:32,560 sounds and songs. And what fascinated me 140 00:09:32,560 --> 00:09:34,959 was continuing to push those buttons 141 00:09:34,959 --> 00:09:36,480 just to try and get a little bit more 142 00:09:36,480 --> 00:09:38,320 out of the gear. Definitely pushing it 143 00:09:38,320 --> 00:09:40,160 beyond what it was obviously designed to 144 00:09:40,160 --> 00:09:43,279 do. As I got older, electronic music 145 00:09:43,279 --> 00:09:45,040 production became much more important to 146 00:09:45,040 --> 00:09:47,120 me. And at some point, I realized that 147 00:09:47,120 --> 00:09:49,519 despite having most of my life spent as 148 00:09:49,519 --> 00:09:51,920 a violinist, I thought of myself more as 149 00:09:51,920 --> 00:09:54,399 a producer. And then I started to 150 00:09:54,399 --> 00:09:57,800 release music. 151 00:09:58,480 --> 00:10:00,720 I became increasingly dissatisfied with 152 00:10:00,720 --> 00:10:02,959 the idea of my music existing purely 153 00:10:02,959 --> 00:10:05,279 online. Streaming platforms are now 154 00:10:05,279 --> 00:10:07,519 incredibly saturated. The economics 155 00:10:07,519 --> 00:10:10,000 fairly bleak. Uh copyright detection has 156 00:10:10,000 --> 00:10:11,680 become increasingly difficult to 157 00:10:11,680 --> 00:10:14,240 navigate. And we're now in an era where 158 00:10:14,240 --> 00:10:16,079 quantities of music can be generated and 159 00:10:16,079 --> 00:10:18,320 uploaded automatically. Vast quantities, 160 00:10:18,320 --> 00:10:19,519 sorry. 161 00:10:19,519 --> 00:10:21,200 So, I wanted to bring my music back into 162 00:10:21,200 --> 00:10:23,200 the real world to make the act of 163 00:10:23,200 --> 00:10:24,880 creating it something that people could 164 00:10:24,880 --> 00:10:27,360 actually watch happen. So, around this 165 00:10:27,360 --> 00:10:29,279 time last year, I started investigating 166 00:10:29,279 --> 00:10:31,279 how I might build a live set around the 167 00:10:31,279 --> 00:10:33,839 music I was already producing. The 168 00:10:33,839 --> 00:10:37,200 obvious idea was a hybrid DJ and violin 169 00:10:37,200 --> 00:10:38,800 set. 170 00:10:38,800 --> 00:10:40,240 As you can see here, that's what it 171 00:10:40,240 --> 00:10:43,760 would look like exactly. 172 00:10:43,760 --> 00:10:45,360 So, I spent the day putting it together 173 00:10:45,360 --> 00:10:48,000 and uh it was really boring. Playing 174 00:10:48,000 --> 00:10:49,680 music I had already made wasn't 175 00:10:49,680 --> 00:10:51,680 satisfying me. I could play violin over 176 00:10:51,680 --> 00:10:54,640 the top, but the focus felt misplaced. 177 00:10:54,640 --> 00:10:56,320 The electronic music had become the part 178 00:10:56,320 --> 00:10:59,560 I was 179 00:11:04,720 --> 00:11:07,040 have the composition still be alive. And 180 00:11:07,040 --> 00:11:08,720 that made me think back to the way I'd 181 00:11:08,720 --> 00:11:10,399 improvised with looping when I was 182 00:11:10,399 --> 00:11:13,279 younger. What I really wanted was a 183 00:11:13,279 --> 00:11:15,519 really advanced version of that. So I 184 00:11:15,519 --> 00:11:17,760 had a bit of a wish list, something 185 00:11:17,760 --> 00:11:19,519 where I could build electronic music in 186 00:11:19,519 --> 00:11:21,760 real time, recording things, looping 187 00:11:21,760 --> 00:11:24,240 them, processing them, rearranging them, 188 00:11:24,240 --> 00:11:26,800 changing direction, manipulating effects 189 00:11:26,800 --> 00:11:28,399 with the kind of electronic freedom you 190 00:11:28,399 --> 00:11:30,320 might associate with analog modular 191 00:11:30,320 --> 00:11:32,160 synthesis. 192 00:11:32,160 --> 00:11:34,079 Uh there was one fairly obvious problem 193 00:11:34,079 --> 00:11:36,160 with that idea though. Hardware is 194 00:11:36,160 --> 00:11:40,160 expensive and heavy. 195 00:11:40,160 --> 00:11:41,760 Once you start imagining enough effects, 196 00:11:41,760 --> 00:11:44,000 pedals, synthesizers, loopers, mixers, 197 00:11:44,000 --> 00:11:45,680 and MIDI controllers to give you 198 00:11:45,680 --> 00:11:47,680 immediate physical access to everything 199 00:11:47,680 --> 00:11:49,760 that I wanted, you end up with something 200 00:11:49,760 --> 00:11:51,839 resembling the control room from Alien, 201 00:11:51,839 --> 00:11:53,839 which aesthetically I absolutely love, 202 00:11:53,839 --> 00:11:55,200 but it was going to be really 203 00:11:55,200 --> 00:11:58,200 inconvenient. 204 00:11:59,279 --> 00:12:02,000 So why do live electronic musicians uh 205 00:12:02,000 --> 00:12:04,800 still often gravitate so of sorry still 206 00:12:04,800 --> 00:12:07,680 often gravitate towards analog hardware? 207 00:12:07,680 --> 00:12:09,279 If you ask me it's because of the 208 00:12:09,279 --> 00:12:12,160 immediiacy. An analog signal can travel 209 00:12:12,160 --> 00:12:13,440 through a system essentially 210 00:12:13,440 --> 00:12:15,920 continuously while a computer has a 211 00:12:15,920 --> 00:12:18,720 processing time and therefore latency. I 212 00:12:18,720 --> 00:12:20,480 think somewhere in between 5 and 10 213 00:12:20,480 --> 00:12:22,079 milliseconds I start to notice it and 214 00:12:22,079 --> 00:12:24,560 it'll throw me off my rhythm. If you're 215 00:12:24,560 --> 00:12:25,839 performing music, you want to hear the 216 00:12:25,839 --> 00:12:27,600 sound right as you press the button. If 217 00:12:27,600 --> 00:12:30,480 you don't, you're out of time. So, I was 218 00:12:30,480 --> 00:12:32,560 going to put the entire audio setup 219 00:12:32,560 --> 00:12:34,639 inside the computer, but this was going 220 00:12:34,639 --> 00:12:38,720 to be a pretty big engineering problem. 221 00:12:38,720 --> 00:12:40,639 This is why computer science matters to 222 00:12:40,639 --> 00:12:43,600 at least me as a musician. But luckily, 223 00:12:43,600 --> 00:12:45,279 since I was a kid, I followed a 224 00:12:45,279 --> 00:12:47,440 beatboxer turned electronic musician by 225 00:12:47,440 --> 00:12:50,399 the name of Beardy Man. years ago, I'd 226 00:12:50,399 --> 00:12:52,639 seen him using touchcreens to manipulate 227 00:12:52,639 --> 00:12:55,040 his voice and improvise electronic music 228 00:12:55,040 --> 00:12:57,040 live. I didn't really understand how 229 00:12:57,040 --> 00:12:59,200 that system worked at the time, but I 230 00:12:59,200 --> 00:13:00,560 didn't need to because the important 231 00:13:00,560 --> 00:13:03,440 thing was that it existed. It showed me 232 00:13:03,440 --> 00:13:05,839 that you could plausibly build a serious 233 00:13:05,839 --> 00:13:07,920 digital live instrument without latency 234 00:13:07,920 --> 00:13:09,920 completely ruining the experience of 235 00:13:09,920 --> 00:13:12,399 playing it. By the way, I did make a 236 00:13:12,399 --> 00:13:14,000 pretty deliberate decision not to look 237 00:13:14,000 --> 00:13:16,720 too closely at what he does. I wanted to 238 00:13:16,720 --> 00:13:18,800 build this around my own preferences and 239 00:13:18,800 --> 00:13:20,959 needs. I didn't want somebody else's 240 00:13:20,959 --> 00:13:24,079 architectural biases influencing me. I 241 00:13:24,079 --> 00:13:25,279 have recently looked a little bit more 242 00:13:25,279 --> 00:13:27,360 closely and incorporated some ideas from 243 00:13:27,360 --> 00:13:29,519 him, but more on that later. [snorts] 244 00:13:29,519 --> 00:13:31,760 Anyway, this is where the idea of using 245 00:13:31,760 --> 00:13:33,680 a touchcreen became really interesting. 246 00:13:33,680 --> 00:13:35,680 A hardware controller has a fixed number 247 00:13:35,680 --> 00:13:39,200 of controls and fixed positions. A touch 248 00:13:39,200 --> 00:13:41,519 screen can become anything. The layout 249 00:13:41,519 --> 00:13:43,440 can change whenever and be built to suit 250 00:13:43,440 --> 00:13:45,920 how I want to make music. 251 00:13:45,920 --> 00:13:47,680 So, after spending that one boring day 252 00:13:47,680 --> 00:13:49,760 trying to make a DJ violin set, I 253 00:13:49,760 --> 00:13:52,639 decided, you know what? I'm a scientist 254 00:13:52,639 --> 00:13:55,120 myself. I'm a programmer. I vaguely 255 00:13:55,120 --> 00:13:58,000 understand. I've built things before. 256 00:13:58,000 --> 00:13:59,760 Whatever technical problems were between 257 00:13:59,760 --> 00:14:02,639 me and my goal, I could probably sort it 258 00:14:02,639 --> 00:14:04,240 out. So, I stopped looking for 259 00:14:04,240 --> 00:14:07,240 something. 260 00:14:07,680 --> 00:14:08,959 Buckle up. I'm going to speed this up. 261 00:14:08,959 --> 00:14:10,480 We got a lot of slides to get through. 262 00:14:10,480 --> 00:14:12,480 You're going to learn some things. 263 00:14:12,480 --> 00:14:14,639 Uh I produce most of my music in FL 264 00:14:14,639 --> 00:14:18,000 Studio which we call a DAW a door 265 00:14:18,000 --> 00:14:21,440 digital audio workstation. Uh FL does 266 00:14:21,440 --> 00:14:23,440 have live performance features but they 267 00:14:23,440 --> 00:14:25,279 felt quite secondary as a function 268 00:14:25,279 --> 00:14:28,399 whereas Ableton felt designed for live. 269 00:14:28,399 --> 00:14:30,079 So despite being completely unfamiliar 270 00:14:30,079 --> 00:14:32,470 with Ableton I picked it up about 271 00:14:32,470 --> 00:14:34,720 [snorts] 11 months ago. 272 00:14:34,720 --> 00:14:37,199 Ableton has audio tracks which take in 273 00:14:37,199 --> 00:14:39,600 audio and MIDI tracks which take in 274 00:14:39,600 --> 00:14:42,079 instructions rather than sound. If you 275 00:14:42,079 --> 00:14:43,760 haven't heard of MIDI before, it's a 276 00:14:43,760 --> 00:14:45,440 standard for musical instructions. 277 00:14:45,440 --> 00:14:46,959 That's there for your reference, but we 278 00:14:46,959 --> 00:14:49,279 don't have time. The only relevant ones 279 00:14:49,279 --> 00:14:52,160 to ask for this really are note on, note 280 00:14:52,160 --> 00:14:54,320 off, and control change. There's a bit 281 00:14:54,320 --> 00:14:56,720 more info there if you need it. Uh, MIDI 282 00:14:56,720 --> 00:14:59,199 gives you 16 channels to work with, so 283 00:14:59,199 --> 00:15:00,880 you can use a lot of different notes 284 00:15:00,880 --> 00:15:02,079 across different channels, and they 285 00:15:02,079 --> 00:15:04,639 don't interfere with each other. There's 286 00:15:04,639 --> 00:15:06,880 a simple guide. 287 00:15:06,880 --> 00:15:08,800 Our 288 00:15:08,800 --> 00:15:11,519 MIDI tracks contain an instrument plugin 289 00:15:11,519 --> 00:15:13,760 with effects plugins following it. 290 00:15:13,760 --> 00:15:15,920 Whereas audio tracks just have effects 291 00:15:15,920 --> 00:15:18,399 plugins. Most of the plugins I'm using 292 00:15:18,399 --> 00:15:20,480 use the VST standard, but there are open 293 00:15:20,480 --> 00:15:22,000 source alternatives I'd love to see 294 00:15:22,000 --> 00:15:25,839 around more. Tracks contain clips. Uh 295 00:15:25,839 --> 00:15:28,079 clips on an audio track contain some 296 00:15:28,079 --> 00:15:30,240 audio recording and a bit of automation 297 00:15:30,240 --> 00:15:33,279 data over time like control changeesque. 298 00:15:33,279 --> 00:15:35,360 And a MIDI track can contain MIDI clips 299 00:15:35,360 --> 00:15:37,040 which usually hold some kind of 300 00:15:37,040 --> 00:15:38,639 arrangement data. Kind of think of it 301 00:15:38,639 --> 00:15:42,639 like sheet music if you like. 302 00:15:42,639 --> 00:15:44,720 So you can record new clips in real time 303 00:15:44,720 --> 00:15:46,560 in Ableton. Have them play back in a 304 00:15:46,560 --> 00:15:48,240 loop, stopping and starting them as you 305 00:15:48,240 --> 00:15:49,839 wish. 306 00:15:49,839 --> 00:15:51,440 That's how I can play a musical pattern 307 00:15:51,440 --> 00:15:53,920 on my keyboard and have it kind of loop 308 00:15:53,920 --> 00:15:57,240 back through Ableton. 309 00:15:57,680 --> 00:15:59,920 Each track can send its audio to other 310 00:15:59,920 --> 00:16:01,839 tracks, allowing us to create buses 311 00:16:01,839 --> 00:16:04,399 where multiple audio streams converge. 312 00:16:04,399 --> 00:16:06,880 We can also route MIDI and even route 313 00:16:06,880 --> 00:16:09,040 MIDI directly to a plugin on an audio 314 00:16:09,040 --> 00:16:11,279 track, which is how I control the pitch 315 00:16:11,279 --> 00:16:15,360 of my voice using this keyboard. 316 00:16:15,360 --> 00:16:18,000 Here in lies, 317 00:16:18,000 --> 00:16:20,560 parallel computing. 318 00:16:20,560 --> 00:16:22,639 Ableton can process independent audio 319 00:16:22,639 --> 00:16:25,279 paths in parallel. So if I have several 320 00:16:25,279 --> 00:16:26,800 tracks doing completely unrelated 321 00:16:26,800 --> 00:16:29,120 things, those calculations can be 322 00:16:29,120 --> 00:16:30,800 potentially distributed across different 323 00:16:30,800 --> 00:16:33,519 CPU threads. But the moment one thing 324 00:16:33,519 --> 00:16:35,759 depends on another, they have to happen 325 00:16:35,759 --> 00:16:37,519 in order. 326 00:16:37,519 --> 00:16:39,360 If audio passes through some effects on 327 00:16:39,360 --> 00:16:41,120 a track and then is routed to another 328 00:16:41,120 --> 00:16:42,880 track, Ableton can't process those 329 00:16:42,880 --> 00:16:44,720 tracks at the same time. One has to wait 330 00:16:44,720 --> 00:16:46,880 for the other. So whenever multiple 331 00:16:46,880 --> 00:16:48,800 paths converge, you create a summing 332 00:16:48,800 --> 00:16:50,639 point where processing has to wait for 333 00:16:50,639 --> 00:16:53,040 all of its dependencies to finish. That 334 00:16:53,040 --> 00:16:55,040 means what really matters isn't how much 335 00:16:55,040 --> 00:16:57,759 CPU am I using? It's the longest 336 00:16:57,759 --> 00:17:00,160 critical path through the project. Can 337 00:17:00,160 --> 00:17:01,920 the computer process that chain of 338 00:17:01,920 --> 00:17:04,079 calculations before the audio needs to 339 00:17:04,079 --> 00:17:06,000 reach the speakers? 340 00:17:06,000 --> 00:17:07,679 So there's a balancing act. I want 341 00:17:07,679 --> 00:17:09,679 enough independent paths that Ableton 342 00:17:09,679 --> 00:17:11,679 can effectively make use of parallel 343 00:17:11,679 --> 00:17:13,120 processing, but I also don't want to 344 00:17:13,120 --> 00:17:15,199 duplicate computationally expensive 345 00:17:15,199 --> 00:17:17,120 processing just to keep everything 346 00:17:17,120 --> 00:17:19,679 separate. This really heavily influenced 347 00:17:19,679 --> 00:17:21,360 how I have designed the architecture of 348 00:17:21,360 --> 00:17:23,199 my rig. 349 00:17:23,199 --> 00:17:24,959 Another notable computer science problem 350 00:17:24,959 --> 00:17:26,880 is delay compensation, but we don't have 351 00:17:26,880 --> 00:17:29,760 time, so just be aware of it. So, what 352 00:17:29,760 --> 00:17:31,280 can we control with MIDI in Ableton 353 00:17:31,280 --> 00:17:32,480 Live? [gasps] 354 00:17:32,480 --> 00:17:35,200 We can uh map commands to parameters in 355 00:17:35,200 --> 00:17:38,000 Ableton pretty easily. Like a note on 356 00:17:38,000 --> 00:17:40,559 command can start a recording of a clip 357 00:17:40,559 --> 00:17:42,480 and then I can maybe press the note off 358 00:17:42,480 --> 00:17:45,120 to stop that recording. The clips are 359 00:17:45,120 --> 00:17:46,880 configurable. So, you can use the same 360 00:17:46,880 --> 00:17:49,039 button for the same stop and start 361 00:17:49,039 --> 00:17:51,360 functionality. It's a lot like that 362 00:17:51,360 --> 00:17:53,919 simple looper I mentioned earlier. But 363 00:17:53,919 --> 00:17:57,520 what if I want to delete that clip? We 364 00:17:57,520 --> 00:18:00,320 just can't with MIDI. It's very sad. I 365 00:18:00,320 --> 00:18:01,919 don't know why. If you want to know why, 366 00:18:01,919 --> 00:18:04,240 as Ableton devs, but I did find ways 367 00:18:04,240 --> 00:18:06,080 around this. 368 00:18:06,080 --> 00:18:07,919 This brings us to my first attempt at 369 00:18:07,919 --> 00:18:09,760 making a live rig, which was a Max for 370 00:18:09,760 --> 00:18:11,760 Live plugin. Uh Max [clears throat] is a 371 00:18:11,760 --> 00:18:13,039 visual programming environment 372 00:18:13,039 --> 00:18:14,559 originally designed around building 373 00:18:14,559 --> 00:18:17,919 interactive music in multimedia systems. 374 00:18:17,919 --> 00:18:20,000 Uh Ableton itself was kind of prototyped 375 00:18:20,000 --> 00:18:23,039 in Max loosely and Ableton now has 376 00:18:23,039 --> 00:18:25,200 incorporated Max inside of it. So you 377 00:18:25,200 --> 00:18:28,000 can run it all sort of together. The Max 378 00:18:28,000 --> 00:18:30,080 for Live environment has access to the 379 00:18:30,080 --> 00:18:32,880 Ableton API which means I can pro 380 00:18:32,880 --> 00:18:34,960 programmatically do things like delete 381 00:18:34,960 --> 00:18:36,640 clips. 382 00:18:36,640 --> 00:18:39,760 So, I got myself a foot controller, a 383 00:18:39,760 --> 00:18:42,320 little keyboard. I had a microphone and 384 00:18:42,320 --> 00:18:45,280 a violin as my audio inputs, and then a 385 00:18:45,280 --> 00:18:47,840 Max for Live plugin that has a pop out 386 00:18:47,840 --> 00:18:50,240 window I use on the touch screen. Uh, 387 00:18:50,240 --> 00:18:52,000 heads up to the AV team. I'm switching 388 00:18:52,000 --> 00:18:53,280 to dark mode. And I'm going to move 389 00:18:53,280 --> 00:18:56,720 through these slides really quickly. Oo. 390 00:18:56,720 --> 00:18:58,480 Ah, 391 00:18:58,480 --> 00:19:00,080 thank you. 392 00:19:00,080 --> 00:19:02,320 So here we can select uh which audio 393 00:19:02,320 --> 00:19:04,080 input we're using, violin or microphone. 394 00:19:04,080 --> 00:19:05,600 But the microphone has two tracks 395 00:19:05,600 --> 00:19:07,360 because I wanted one for acoustic and 396 00:19:07,360 --> 00:19:08,960 one for electric. Uh sorry, one for 397 00:19:08,960 --> 00:19:11,280 acoustic, one for vocals. Uh these audio 398 00:19:11,280 --> 00:19:13,120 input tracks have a rack of different 399 00:19:13,120 --> 00:19:15,520 effect chains on each one. So I can use 400 00:19:15,520 --> 00:19:18,080 a macro to quickly switch between which 401 00:19:18,080 --> 00:19:20,000 instruments or effects I want on each 402 00:19:20,000 --> 00:19:22,240 track. This is something I was usually 403 00:19:22,240 --> 00:19:24,720 controlling with the foot pedals. 404 00:19:24,720 --> 00:19:26,480 Uh five virtual instrument channels or 405 00:19:26,480 --> 00:19:28,480 MIDI tracks. So that's my instruments. 406 00:19:28,480 --> 00:19:30,320 Each of these tracks also have a whole 407 00:19:30,320 --> 00:19:32,880 rack of instruments uh with a macro 408 00:19:32,880 --> 00:19:35,120 switch to switch between them. Again, 409 00:19:35,120 --> 00:19:37,120 two drum tracks and two synth tracks 410 00:19:37,120 --> 00:19:38,640 running at the same time is possible 411 00:19:38,640 --> 00:19:40,240 through this. We just pick which ones we 412 00:19:40,240 --> 00:19:42,799 want at some given time. I can change 413 00:19:42,799 --> 00:19:44,640 out which drums or synth I want whenever 414 00:19:44,640 --> 00:19:46,559 I like it. And then the last MIDI track 415 00:19:46,559 --> 00:19:47,919 is for sampling. So, I can use the 416 00:19:47,919 --> 00:19:49,200 keyboard to play back something I've 417 00:19:49,200 --> 00:19:51,600 recorded at the pitch responding to the 418 00:19:51,600 --> 00:19:54,240 the note I've pressed on the keyboard. I 419 00:19:54,240 --> 00:19:55,760 can select which MIDI track my MIDI 420 00:19:55,760 --> 00:19:57,280 keyboard is controlling via those 421 00:19:57,280 --> 00:19:59,280 buttons or the foot controller. So I 422 00:19:59,280 --> 00:20:00,640 don't even have to take my hands off the 423 00:20:00,640 --> 00:20:02,559 keyboard to switch between piano and 424 00:20:02,559 --> 00:20:04,960 drums, for example. These sliders 425 00:20:04,960 --> 00:20:06,559 control effects on the MIDI bus, so they 426 00:20:06,559 --> 00:20:08,080 apply to all MIDI instruments at the 427 00:20:08,080 --> 00:20:10,960 same time. Five loopers, they take in 428 00:20:10,960 --> 00:20:13,919 violin and microphone audio. My Max 429 00:20:13,919 --> 00:20:16,400 plugin has listeners set up to manage 430 00:20:16,400 --> 00:20:18,160 the state of the loopers, so I can see 431 00:20:18,160 --> 00:20:20,640 that feedback in real time. I control 432 00:20:20,640 --> 00:20:22,080 the loopers, again, mostly from the foot 433 00:20:22,080 --> 00:20:23,919 pedal. Uh, but the effects are all 434 00:20:23,919 --> 00:20:25,760 touchscreen controlled. Then the looper 435 00:20:25,760 --> 00:20:28,080 effect bus. So those effects for all the 436 00:20:28,080 --> 00:20:31,280 loopers. These buttons change the audio 437 00:20:31,280 --> 00:20:33,520 routing. So I can, for example, ch 438 00:20:33,520 --> 00:20:35,840 channel ch, excuse me, channel any audio 439 00:20:35,840 --> 00:20:38,240 back into a vocoder, which kind of like 440 00:20:38,240 --> 00:20:40,400 lets me combine my voice with that audio 441 00:20:40,400 --> 00:20:42,080 to change the texture while keeping the 442 00:20:42,080 --> 00:20:43,600 pitch. 443 00:20:43,600 --> 00:20:44,799 That's where I control the parameters 444 00:20:44,799 --> 00:20:46,720 with the vocoder. And then loop is for 445 00:20:46,720 --> 00:20:48,480 relooping. So this one takes in audio 446 00:20:48,480 --> 00:20:49,840 from the MIDI bus, this one from the 447 00:20:49,840 --> 00:20:52,080 looper bus, these from the vocoder. And 448 00:20:52,080 --> 00:20:54,400 then we have group effects. Again, uh 449 00:20:54,400 --> 00:20:55,679 there's some effect sliders for the main 450 00:20:55,679 --> 00:20:57,120 channel. They apply to everything and 451 00:20:57,120 --> 00:20:59,039 buttons that trigger large scale 452 00:20:59,039 --> 00:21:01,200 functionality. So cool fancy transitions 453 00:21:01,200 --> 00:21:04,559 and things like that. Those sliders 454 00:21:04,559 --> 00:21:05,760 uh control the rows and columns 455 00:21:05,760 --> 00:21:07,440 corresponding to where they are. So I 456 00:21:07,440 --> 00:21:09,200 can adjust a whole row or column at the 457 00:21:09,200 --> 00:21:11,200 same time. And then the little buttons 458 00:21:11,200 --> 00:21:12,960 bring up an interface that allow me to 459 00:21:12,960 --> 00:21:15,039 reprogram all of my sliders without 460 00:21:15,039 --> 00:21:17,919 having to go back to the Max editor. 461 00:21:17,919 --> 00:21:20,880 [gasps and sighs] Okay, relax. AV. 462 00:21:20,880 --> 00:21:22,400 Remember when I showed you what Max look 463 00:21:22,400 --> 00:21:25,280 like looked like earlier? It's quite 464 00:21:25,280 --> 00:21:27,919 neat, isn't it? In my Max project, I 465 00:21:27,919 --> 00:21:29,360 packed most things into their own 466 00:21:29,360 --> 00:21:31,039 objects. So, they only took up a little 467 00:21:31,039 --> 00:21:33,600 block on the screen like this. Uh, but 468 00:21:33,600 --> 00:21:35,440 here's the visual programming just for 469 00:21:35,440 --> 00:21:38,080 the front end of my Max interface. This 470 00:21:38,080 --> 00:21:39,840 was getting out of hand. It starting it 471 00:21:39,840 --> 00:21:41,760 was starting to lag. Uh, it took more 472 00:21:41,760 --> 00:21:43,280 than 2 minutes just to load into the 473 00:21:43,280 --> 00:21:45,200 editor, which was actually way less 474 00:21:45,200 --> 00:21:47,200 problematic than how much CPU it was 475 00:21:47,200 --> 00:21:49,919 chewing up inside Ableton. 476 00:21:49,919 --> 00:21:51,760 So problem was I was only just getting 477 00:21:51,760 --> 00:21:53,280 started. There was so much more I wanted 478 00:21:53,280 --> 00:21:54,960 to do. I wanted to be able to for 479 00:21:54,960 --> 00:21:56,880 example record everything I do on the 480 00:21:56,880 --> 00:21:58,559 touch screen and then have that play 481 00:21:58,559 --> 00:22:00,559 back as a loop and have that feedback 482 00:22:00,559 --> 00:22:02,880 animated on the screen. 483 00:22:02,880 --> 00:22:04,960 But if I wasn't using Max, how would I 484 00:22:04,960 --> 00:22:07,679 access those API calls? 485 00:22:07,679 --> 00:22:11,320 That's when I discovered 486 00:22:14,000 --> 00:22:17,525 Ableton's Python. [applause] 487 00:22:17,525 --> 00:22:19,545 [laughter] 488 00:22:20,320 --> 00:22:23,120 So, we can use this open source uh open 489 00:22:23,120 --> 00:22:24,880 source Python project to make Ableton 490 00:22:24,880 --> 00:22:27,120 accept OSC commands, which is kind of 491 00:22:27,120 --> 00:22:29,840 like a competitor to MIDI, put simply. I 492 00:22:29,840 --> 00:22:32,080 stole some of Beyman's ideas and began 493 00:22:32,080 --> 00:22:33,840 using touch OC. That's what this 494 00:22:33,840 --> 00:22:36,080 interface is running on. Uh it's a 495 00:22:36,080 --> 00:22:37,200 program that allows you to quickly 496 00:22:37,200 --> 00:22:38,799 sketch out these interfaces and it can 497 00:22:38,799 --> 00:22:41,600 output OSC and MIDI. There are multiple 498 00:22:41,600 --> 00:22:43,200 programs that do similar things. Uh so, 499 00:22:43,200 --> 00:22:45,120 the world is your oyster, but this is 500 00:22:45,120 --> 00:22:47,600 just the choice that I made. 501 00:22:47,600 --> 00:22:49,039 Uh, not going to talk about Apple. I 502 00:22:49,039 --> 00:22:51,585 don't have time. 503 00:22:51,585 --> 00:22:53,520 [clears throat] Uh, Touch OC can also 504 00:22:53,520 --> 00:22:55,679 send messages multiple places at a time, 505 00:22:55,679 --> 00:22:57,440 which is great because I can control my 506 00:22:57,440 --> 00:22:59,280 streaming software using this open 507 00:22:59,280 --> 00:23:01,520 source project. My controls on here 508 00:23:01,520 --> 00:23:03,360 control visual effects in streaming 509 00:23:03,360 --> 00:23:05,440 software on a webcam. 510 00:23:05,440 --> 00:23:07,840 Inside touch OC, you can write lure. So 511 00:23:07,840 --> 00:23:09,520 I have scripts here for convenient 512 00:23:09,520 --> 00:23:12,000 things like when a relooping looper is 513 00:23:12,000 --> 00:23:13,840 recording audio from another channel. 514 00:23:13,840 --> 00:23:15,919 Once it changes its state from recording 515 00:23:15,919 --> 00:23:17,919 to playing, it automatically turns off 516 00:23:17,919 --> 00:23:20,080 the looper that's giving it information. 517 00:23:20,080 --> 00:23:21,280 That means you don't hear both at the 518 00:23:21,280 --> 00:23:24,720 same time. I am building a big new rig 519 00:23:24,720 --> 00:23:26,400 which is of course based around violin, 520 00:23:26,400 --> 00:23:28,080 but it's still under construction. So 521 00:23:28,080 --> 00:23:29,360 that's why I've brought this prototype 522 00:23:29,360 --> 00:23:31,600 for you today. 523 00:23:31,600 --> 00:23:36,400 Here's the new prototype. Oo. Ah, 524 00:23:36,400 --> 00:23:37,679 I've taken a bit of a different approach 525 00:23:37,679 --> 00:23:39,840 to the UI. I rely really heavily on 526 00:23:39,840 --> 00:23:41,919 color to find the controls quickly when 527 00:23:41,919 --> 00:23:44,000 I'm performing. Uh, I also noticed that 528 00:23:44,000 --> 00:23:46,880 my finger moves more stably on the 529 00:23:46,880 --> 00:23:48,880 x-axis than the y-axis. So, I have 530 00:23:48,880 --> 00:23:51,200 important controls on x-axis of these 531 00:23:51,200 --> 00:23:53,679 squares, but also some other controls on 532 00:23:53,679 --> 00:23:56,960 the y. Within the x-axis itself, I can 533 00:23:56,960 --> 00:23:59,360 have up to eight effects controlled at 534 00:23:59,360 --> 00:24:01,280 once using this plugin, which I use a 535 00:24:01,280 --> 00:24:03,360 lot, tornado. You can see on the left 536 00:24:03,360 --> 00:24:05,520 here, I've got different weights applied 537 00:24:05,520 --> 00:24:07,120 to each effect depending on where that 538 00:24:07,120 --> 00:24:09,280 one slider is. You can see on the left. 539 00:24:09,280 --> 00:24:11,200 So, when I'm moving across the screen, 540 00:24:11,200 --> 00:24:13,440 it's changing a lot of things at once. 541 00:24:13,440 --> 00:24:15,279 This is getting me a lot closer to the 542 00:24:15,279 --> 00:24:16,720 ultimate goal, which is being able to 543 00:24:16,720 --> 00:24:18,960 play this more as an instrument rather 544 00:24:18,960 --> 00:24:21,120 than a control surface. I can kind of 545 00:24:21,120 --> 00:24:23,120 muscle memory what different effects 546 00:24:23,120 --> 00:24:25,360 sound like at different points and get 547 00:24:25,360 --> 00:24:27,200 fine motor control to give me a lot of 548 00:24:27,200 --> 00:24:29,200 expression. 549 00:24:29,200 --> 00:24:31,919 uh MIDI tracks for controls, 550 00:24:31,919 --> 00:24:35,200 MIDI buses, audio input, 551 00:24:35,200 --> 00:24:36,400 uh some funky resampling 552 00:24:36,400 --> 00:24:37,919 instrumentation, 553 00:24:37,919 --> 00:24:40,320 vocs, audio loopers. It's kind of 554 00:24:40,320 --> 00:24:42,720 similar. You'll see some similarities. 555 00:24:42,720 --> 00:24:44,000 These are the buttons that let me do 556 00:24:44,000 --> 00:24:45,520 that thing I wanted to do. I can make 557 00:24:45,520 --> 00:24:47,120 clips recording my inputs and have them 558 00:24:47,120 --> 00:24:48,880 play back. 559 00:24:48,880 --> 00:24:51,440 Uh, we've got bus effects, reloopers for 560 00:24:51,440 --> 00:24:54,080 the MIDI bus, looper bus, and vocoder, 561 00:24:54,080 --> 00:24:56,799 relooper bus, and whole program controls 562 00:24:56,799 --> 00:24:59,200 with main audio track effects that 563 00:24:59,200 --> 00:25:01,200 things that apply to everything. Uh, 564 00:25:01,200 --> 00:25:03,919 that's a very funky special looper which 565 00:25:03,919 --> 00:25:06,400 allows me to hand audio to it, bring it 566 00:25:06,400 --> 00:25:07,760 back to the start, and feed it back 567 00:25:07,760 --> 00:25:09,760 through, which means I can use all of my 568 00:25:09,760 --> 00:25:12,640 loops cycllically infinitely. It's very, 569 00:25:12,640 --> 00:25:15,679 very cool to me at least. Okay, we're 570 00:25:15,679 --> 00:25:17,919 almost there. 571 00:25:17,919 --> 00:25:19,200 You know what this project made me 572 00:25:19,200 --> 00:25:21,200 realize? 573 00:25:21,200 --> 00:25:23,200 I'm really glad that I know how to make 574 00:25:23,200 --> 00:25:26,167 music. 575 00:25:26,167 --> 00:25:27,440 [clears throat] I felt like when I was 576 00:25:27,440 --> 00:25:29,679 working on this, I had kind of like 3D 577 00:25:29,679 --> 00:25:32,720 glasses on where one eye was, 578 00:25:32,720 --> 00:25:36,240 the other eye was making. I'm not sure 579 00:25:36,240 --> 00:25:37,840 that I could have built this without 580 00:25:37,840 --> 00:25:39,760 having both of those things working in 581 00:25:39,760 --> 00:25:42,640 tandem. So, if you take one thing away 582 00:25:42,640 --> 00:25:44,799 from this talk, it's that actually this 583 00:25:44,799 --> 00:25:47,840 is me. No, just kidding. Uh, for those 584 00:25:47,840 --> 00:25:49,360 of you out there that might be feeling 585 00:25:49,360 --> 00:25:51,600 pulled in different directions due to 586 00:25:51,600 --> 00:25:53,600 your varied interests, just keep in mind 587 00:25:53,600 --> 00:25:55,200 it might actually really pay off one day 588 00:25:55,200 --> 00:25:57,200 to be multi-skilled. 589 00:25:57,200 --> 00:25:58,880 Um, you just might have to find your 590 00:25:58,880 --> 00:26:01,520 niche. Might take a while. That's all. 591 00:26:01,520 --> 00:26:05,523 Thank you very much. [applause] 592 00:26:10,880 --> 00:26:12,720 Thanks, Jesse. And here is your 593 00:26:12,720 --> 00:26:14,880 customary gift of a speaker mug. Thank 594 00:26:14,880 --> 00:26:17,968 you. [applause]