0 00:00:00,000 --> 00:00:30,000 Dear viewer, these subtitles were generated by a machine via the service Trint and therefore are (very) buggy. If you are capable, please help us to create good quality subtitles: https://c3subtitles.de/talk/420 Thanks! 1 00:00:12,590 --> 00:00:14,869 Now, thanks for showing up here. 2 00:00:14,870 --> 00:00:18,169 And I'd like to present to 3 00:00:18,170 --> 00:00:20,419 a project that 4 00:00:20,420 --> 00:00:22,519 came out after doing many one 5 00:00:22,520 --> 00:00:24,679 off projects, so in a way, 6 00:00:24,680 --> 00:00:27,109 it's like an attempt to 7 00:00:27,110 --> 00:00:29,329 make the ultimate framework 8 00:00:29,330 --> 00:00:31,669 the first. Let's let's have a look 9 00:00:31,670 --> 00:00:33,829 what people in the audience are 10 00:00:33,830 --> 00:00:34,830 doing. 11 00:00:35,870 --> 00:00:37,929 When you look around you and people do or 12 00:00:37,930 --> 00:00:40,219 do they 13 00:00:40,220 --> 00:00:42,319 make you circuits or they 14 00:00:42,320 --> 00:00:44,449 modify existing circuits 15 00:00:44,450 --> 00:00:46,459 called circuit bending, like you have to 16 00:00:46,460 --> 00:00:48,589 speak and spell and modify it and 17 00:00:48,590 --> 00:00:50,089 two different things. 18 00:00:50,090 --> 00:00:52,279 Or they make 19 00:00:52,280 --> 00:00:54,349 MIDI controllers as an extension of 20 00:00:54,350 --> 00:00:56,569 their laptop to have a new 21 00:00:56,570 --> 00:00:57,570 way to control it. 22 00:00:58,580 --> 00:01:01,189 That's a really nice one we didn't 23 00:01:01,190 --> 00:01:03,079 control yesterday around here. 24 00:01:03,080 --> 00:01:04,080 And 25 00:01:05,489 --> 00:01:07,729 and then there is people 26 00:01:07,730 --> 00:01:09,979 doing sound to it a 27 00:01:09,980 --> 00:01:12,799 bit. Microcontrollers, I mean, like 28 00:01:12,800 --> 00:01:14,869 going like a sort of hybrid 29 00:01:14,870 --> 00:01:17,119 topology making like 30 00:01:17,120 --> 00:01:19,849 digital pulses from software 31 00:01:19,850 --> 00:01:21,949 and using the pulses 32 00:01:21,950 --> 00:01:23,599 as sound. 33 00:01:26,420 --> 00:01:27,420 And 34 00:01:29,780 --> 00:01:31,969 and then there is a real 35 00:01:31,970 --> 00:01:34,580 embedded digital signal processing 36 00:01:36,560 --> 00:01:38,419 that means you're not dealing with just 37 00:01:38,420 --> 00:01:40,549 pulses, but accurate measurements 38 00:01:40,550 --> 00:01:42,769 and time time 39 00:01:42,770 --> 00:01:45,379 domain processing, 40 00:01:45,380 --> 00:01:48,109 a digital world that could create just 41 00:01:48,110 --> 00:01:49,430 any waveform 42 00:01:50,870 --> 00:01:52,220 not limited to to 43 00:01:53,300 --> 00:01:55,700 square waves or chip tunes. 44 00:01:58,250 --> 00:02:00,379 And there's 45 00:02:00,380 --> 00:02:02,629 very few digital 46 00:02:02,630 --> 00:02:04,879 single processing DIY happening 47 00:02:07,010 --> 00:02:08,419 because it needs quite a set of. 48 00:02:11,920 --> 00:02:13,419 This is what digital signal processing is 49 00:02:13,420 --> 00:02:14,319 about. 50 00:02:14,320 --> 00:02:16,549 So you have sound inputs, you convert 51 00:02:16,550 --> 00:02:18,009 converted from analog, from a continuous 52 00:02:18,010 --> 00:02:20,259 waveform to digital 53 00:02:20,260 --> 00:02:22,449 numbers at certain at 54 00:02:22,450 --> 00:02:23,979 regular intervals. 55 00:02:23,980 --> 00:02:26,039 And then you have a processor which 56 00:02:26,040 --> 00:02:28,149 runs some sort of software 57 00:02:28,150 --> 00:02:30,219 and can be controlled from 58 00:02:30,220 --> 00:02:32,649 MIDI or from the full panel 59 00:02:32,650 --> 00:02:34,929 with knobs and dials. 60 00:02:34,930 --> 00:02:37,689 And at some point you can go back to 61 00:02:37,690 --> 00:02:38,690 analog sound. 62 00:02:41,690 --> 00:02:42,690 And 63 00:02:43,790 --> 00:02:46,009 the computer can do this actually very 64 00:02:46,010 --> 00:02:47,509 well and 65 00:02:48,950 --> 00:02:51,049 just lots of software 66 00:02:51,050 --> 00:02:53,449 around open source clotheshorse 67 00:02:53,450 --> 00:02:55,849 for every taste and 68 00:02:55,850 --> 00:02:58,489 it's sort of crowded in this field, 69 00:02:58,490 --> 00:03:00,829 Sirtris software, since I started 70 00:03:00,830 --> 00:03:03,169 it all down, like machines or 71 00:03:04,700 --> 00:03:06,229 new things that are impossible to 72 00:03:06,230 --> 00:03:08,319 recreate, to create with 73 00:03:08,320 --> 00:03:09,469 analog machines. 74 00:03:11,600 --> 00:03:12,600 It's very crowded. 75 00:03:16,010 --> 00:03:18,079 Apparently, if you if you go to a 76 00:03:18,080 --> 00:03:20,089 music instrument store is still a lot of 77 00:03:20,090 --> 00:03:21,199 dedicated hardware. 78 00:03:22,280 --> 00:03:24,049 People like to play a dedicated 79 00:03:24,050 --> 00:03:26,149 instrument because it's 80 00:03:26,150 --> 00:03:28,189 plug and play. You just turn it on and it 81 00:03:28,190 --> 00:03:29,749 always works. 82 00:03:29,750 --> 00:03:32,779 It's not designed to for office work 83 00:03:32,780 --> 00:03:34,999 and it will not show you an email 84 00:03:35,000 --> 00:03:36,000 notifications 85 00:03:38,670 --> 00:03:40,099 as quite distracting. 86 00:03:40,100 --> 00:03:42,169 If you if you jam do a 87 00:03:42,170 --> 00:03:43,949 jam session with friends and you work, 88 00:03:43,950 --> 00:03:46,099 your laptop is often something 89 00:03:46,100 --> 00:03:48,319 that sort of pops up pop ups 90 00:03:48,320 --> 00:03:50,689 and or you updated 91 00:03:50,690 --> 00:03:52,819 something, you start like testing 92 00:03:52,820 --> 00:03:54,289 things rather than playing. 93 00:04:01,170 --> 00:04:03,419 So I designed some hard to know 94 00:04:03,420 --> 00:04:05,489 exactly this, like analog to digital 95 00:04:05,490 --> 00:04:06,490 conversion 96 00:04:07,830 --> 00:04:10,619 and digital to and look in a processor. 97 00:04:10,620 --> 00:04:11,700 So you see 98 00:04:13,080 --> 00:04:15,269 like stereo input, stereo 99 00:04:15,270 --> 00:04:18,328 output, a headphone jack, 100 00:04:18,329 --> 00:04:20,909 a USB port for a computer connection 101 00:04:20,910 --> 00:04:22,529 and slot for SD card 102 00:04:24,270 --> 00:04:26,549 and midi 103 00:04:26,550 --> 00:04:28,149 inputs, midi output. 104 00:04:30,330 --> 00:04:32,399 And it's like it's very 105 00:04:32,400 --> 00:04:34,739 similar as what is inside the 106 00:04:34,740 --> 00:04:36,029 the things you can buy in the music 107 00:04:36,030 --> 00:04:38,559 instrument store and 108 00:04:39,750 --> 00:04:41,429 goods. If you would take these things 109 00:04:41,430 --> 00:04:44,099 apart, you would see that the inside is 110 00:04:44,100 --> 00:04:46,829 sort of similar and 111 00:04:46,830 --> 00:04:49,049 it's just now make a lot of products 112 00:04:49,050 --> 00:04:51,329 differentiated by the shape, the number 113 00:04:51,330 --> 00:04:53,639 of knobs and the color of the plastic. 114 00:04:57,400 --> 00:04:59,350 And Ifeoma running on. 115 00:05:01,810 --> 00:05:03,879 Um, and 116 00:05:03,880 --> 00:05:06,259 I didn't do the the 117 00:05:06,260 --> 00:05:08,709 and not and then 118 00:05:08,710 --> 00:05:09,730 the plastic 119 00:05:11,230 --> 00:05:13,779 surgery just frontside Connector's 120 00:05:13,780 --> 00:05:15,879 and then the back entrance 121 00:05:15,880 --> 00:05:18,129 like general-purpose inputs and outputs 122 00:05:18,130 --> 00:05:20,319 that allow you to connect almost 123 00:05:20,320 --> 00:05:22,389 anything but similar, 124 00:05:22,390 --> 00:05:23,709 like Arduino. 125 00:05:24,990 --> 00:05:27,179 And it's no, it's 126 00:05:27,180 --> 00:05:29,249 really not limited to to not 127 00:05:29,250 --> 00:05:31,619 sundials, you can also do servo motors 128 00:05:31,620 --> 00:05:32,939 or accelerometers or 129 00:05:34,920 --> 00:05:36,989 light sensors, whatever you can 130 00:05:36,990 --> 00:05:39,329 think of. It's more like circuit bending 131 00:05:39,330 --> 00:05:41,339 as a as a 132 00:05:42,450 --> 00:05:44,579 as a golden and as an afterthought or is 133 00:05:44,580 --> 00:05:45,580 it not? 134 00:05:47,340 --> 00:05:48,340 And 135 00:05:49,890 --> 00:05:52,109 so to get this thing talking, we need 136 00:05:52,110 --> 00:05:54,419 to develop some digital 137 00:05:54,420 --> 00:05:55,860 signal processing firmware 138 00:05:57,360 --> 00:05:59,549 that breaks apart sort 139 00:05:59,550 --> 00:06:02,100 of in the audio input output driver 140 00:06:03,210 --> 00:06:06,359 and media input output driver 141 00:06:06,360 --> 00:06:08,549 or the input outputs for front panel 142 00:06:08,550 --> 00:06:10,559 notes and dials. 143 00:06:10,560 --> 00:06:13,649 And then you make any combination of 144 00:06:13,650 --> 00:06:15,719 digital signal processing algorithms like 145 00:06:15,720 --> 00:06:18,719 oscillators, filters, envelopes, 146 00:06:18,720 --> 00:06:21,089 and then you have to map the 147 00:06:21,090 --> 00:06:23,399 parameters to 148 00:06:23,400 --> 00:06:24,400 control it somehow 149 00:06:25,860 --> 00:06:28,529 and some bookkeeping to load new presets 150 00:06:28,530 --> 00:06:29,530 or things 151 00:06:30,820 --> 00:06:31,820 and. 152 00:06:36,810 --> 00:06:39,059 It's not the first time that open 153 00:06:39,060 --> 00:06:41,339 source and military solutions have been 154 00:06:41,340 --> 00:06:42,340 developed 155 00:06:43,950 --> 00:06:44,950 and 156 00:06:46,320 --> 00:06:48,449 but they didn't really reach 157 00:06:48,450 --> 00:06:49,450 critical mass. 158 00:06:50,970 --> 00:06:51,970 Um. 159 00:06:53,410 --> 00:06:54,410 I think. 160 00:06:55,720 --> 00:06:57,819 And Programing DSP can 161 00:06:57,820 --> 00:07:00,219 be sort of complex to smart 162 00:07:00,220 --> 00:07:02,199 mathematics involved. 163 00:07:02,200 --> 00:07:04,179 For example, you have to make tradeoffs 164 00:07:04,180 --> 00:07:06,579 between execution, speed and 165 00:07:06,580 --> 00:07:07,779 quality. 166 00:07:07,780 --> 00:07:10,089 For instance, the the 167 00:07:10,090 --> 00:07:11,230 and 168 00:07:12,430 --> 00:07:14,799 the standard math 169 00:07:14,800 --> 00:07:16,869 library is full of sort 170 00:07:16,870 --> 00:07:18,219 of limited use. 171 00:07:18,220 --> 00:07:20,229 It's made for a mathematical precision. 172 00:07:20,230 --> 00:07:22,059 And sometimes you really want to go much 173 00:07:22,060 --> 00:07:23,060 faster than that. 174 00:07:26,250 --> 00:07:28,399 And it's not because you could 175 00:07:28,400 --> 00:07:30,649 edit or add DSB organs 176 00:07:30,650 --> 00:07:32,749 to to further that someone 177 00:07:32,750 --> 00:07:33,750 will do so. 178 00:07:38,010 --> 00:07:40,169 Now, I'm going to make a little switch 179 00:07:40,170 --> 00:07:42,359 to what's that what's out 180 00:07:42,360 --> 00:07:44,519 there in software and 181 00:07:44,520 --> 00:07:46,799 pure software without going to hardware, 182 00:07:46,800 --> 00:07:49,049 and there there's several 183 00:07:49,050 --> 00:07:51,989 data flow oriented programing languages. 184 00:07:51,990 --> 00:07:54,119 And the open source, the main 185 00:07:54,120 --> 00:07:56,549 open source, one is pure data. 186 00:07:56,550 --> 00:07:57,550 And 187 00:07:59,760 --> 00:08:02,279 so there's a program where you can 188 00:08:02,280 --> 00:08:03,209 select objects. 189 00:08:03,210 --> 00:08:05,399 You put them on the screen, you 190 00:08:05,400 --> 00:08:07,410 configure them and you you 191 00:08:08,430 --> 00:08:11,189 bitwise between inputs and outputs 192 00:08:11,190 --> 00:08:13,319 and you can and 193 00:08:13,320 --> 00:08:15,149 this turns into a program 194 00:08:16,170 --> 00:08:17,459 and you document is a program. 195 00:08:17,460 --> 00:08:19,529 So it's a sort of programing language. 196 00:08:21,120 --> 00:08:23,669 Um, there's a commercial, um, 197 00:08:23,670 --> 00:08:25,410 front called Max 198 00:08:26,580 --> 00:08:29,039 and they have a similar syntax 199 00:08:29,040 --> 00:08:31,139 and, um, 200 00:08:31,140 --> 00:08:32,140 grammar. 201 00:08:33,730 --> 00:08:35,379 The nice thing about, um, graphical 202 00:08:35,380 --> 00:08:37,029 programing is that you don't need to 203 00:08:38,409 --> 00:08:40,719 you can't make errors against syntax 204 00:08:40,720 --> 00:08:43,389 or grammar, and 205 00:08:43,390 --> 00:08:45,519 because your you choose your 206 00:08:45,520 --> 00:08:47,979 objects, you have to 207 00:08:47,980 --> 00:08:49,080 really type code. 208 00:08:50,170 --> 00:08:52,449 So it's, um, you 209 00:08:52,450 --> 00:08:54,549 can only make errors against the logic. 210 00:08:54,550 --> 00:08:56,619 So the punishment of 211 00:08:56,620 --> 00:08:59,139 making an error is much smaller. 212 00:08:59,140 --> 00:09:01,359 You don't get a compiler saying, like, 213 00:09:01,360 --> 00:09:03,519 I don't understand that 214 00:09:03,520 --> 00:09:05,589 it will just do something 215 00:09:05,590 --> 00:09:07,179 and it's up to you to make it to the 216 00:09:07,180 --> 00:09:08,180 writing. 217 00:09:10,440 --> 00:09:12,509 And so with this 218 00:09:12,510 --> 00:09:13,980 low punishment of of 219 00:09:15,300 --> 00:09:17,759 experiments, it's very accessible to 220 00:09:17,760 --> 00:09:20,219 artists and and 221 00:09:20,220 --> 00:09:22,499 musicians and and 222 00:09:22,500 --> 00:09:24,749 so around both languages, 223 00:09:24,750 --> 00:09:27,089 there is quite a field of 224 00:09:27,090 --> 00:09:29,729 quite a community of of artists, um, 225 00:09:29,730 --> 00:09:31,469 developing all sorts of things. 226 00:09:35,520 --> 00:09:37,839 It's a graphic, 227 00:09:37,840 --> 00:09:39,599 a programing language, it's not I 228 00:09:39,600 --> 00:09:42,029 wouldn't say it's a complete graphic, 229 00:09:42,030 --> 00:09:43,979 it's not a complete programing language. 230 00:09:43,980 --> 00:09:46,259 I wouldn't implement a quicksort in any 231 00:09:46,260 --> 00:09:48,419 of these by 232 00:09:48,420 --> 00:09:50,839 patching things around that 233 00:09:50,840 --> 00:09:52,739 that really gets awkward. 234 00:09:52,740 --> 00:09:54,689 But signal processing is really about 235 00:09:54,690 --> 00:09:56,429 regular data at regular intervals. 236 00:09:56,430 --> 00:09:59,249 And then the execution 237 00:09:59,250 --> 00:10:02,519 part of the code is really boring. 238 00:10:02,520 --> 00:10:03,520 That's really linear. 239 00:10:08,320 --> 00:10:10,629 Um, both environmentally 240 00:10:10,630 --> 00:10:12,699 paignton objects 241 00:10:12,700 --> 00:10:14,620 are loaded as dynamic 242 00:10:15,970 --> 00:10:17,380 dynamically with libraries, 243 00:10:18,820 --> 00:10:20,889 so at runtime it needs to 244 00:10:20,890 --> 00:10:23,049 dispatch function calls from 245 00:10:23,050 --> 00:10:24,050 two DL's, 246 00:10:25,510 --> 00:10:27,519 which implies a huge overhead if an 247 00:10:27,520 --> 00:10:29,739 object just needs to add to 248 00:10:29,740 --> 00:10:31,459 and puts together. 249 00:10:31,460 --> 00:10:33,429 So it needs to the process needs to make 250 00:10:33,430 --> 00:10:35,709 an indirect jump, save 251 00:10:35,710 --> 00:10:38,109 the context at 252 00:10:38,110 --> 00:10:39,620 and then restore the context. 253 00:10:41,170 --> 00:10:43,329 While this probably could have been 254 00:10:43,330 --> 00:10:45,489 one instruction and 255 00:10:45,490 --> 00:10:47,710 an optimal covid. 256 00:10:52,140 --> 00:10:54,150 So let's try to make 257 00:10:55,200 --> 00:10:57,809 editing further, similarly 258 00:10:57,810 --> 00:10:59,909 as easy as possible 259 00:10:59,910 --> 00:11:00,910 and. 260 00:11:03,670 --> 00:11:06,279 So, uh, wants to make a graphical 261 00:11:06,280 --> 00:11:08,289 dataflow programing environment for 262 00:11:08,290 --> 00:11:10,569 firmware that does not 263 00:11:10,570 --> 00:11:12,669 expose command 264 00:11:12,670 --> 00:11:15,279 line tools, does not expose 265 00:11:15,280 --> 00:11:17,439 C++ code unless you would 266 00:11:17,440 --> 00:11:19,899 want to, and even 267 00:11:19,900 --> 00:11:22,239 the compiler upload and run 268 00:11:22,240 --> 00:11:23,240 cycle. 269 00:11:26,790 --> 00:11:28,919 So that was the first version 270 00:11:28,920 --> 00:11:31,919 of the sort of the architecture. 271 00:11:31,920 --> 00:11:33,460 So on your computer, you would run a 272 00:11:34,470 --> 00:11:36,119 program, the actual departure. 273 00:11:37,890 --> 00:11:39,959 This one is like a library of objects 274 00:11:39,960 --> 00:11:42,089 you could put on the screen. 275 00:11:42,090 --> 00:11:44,039 Right. And up and up. 276 00:11:44,040 --> 00:11:45,770 That software would generate code to 277 00:11:47,490 --> 00:11:49,469 compile it and upload it. 278 00:11:52,760 --> 00:11:55,269 And then this is the actual 279 00:11:55,270 --> 00:11:58,259 ticker, that's the that's the board, 280 00:11:58,260 --> 00:12:00,379 um, yeah, yeah, we have 281 00:12:00,380 --> 00:12:01,919 to come here to run place. 282 00:12:01,920 --> 00:12:04,099 Could someone put a camera over 283 00:12:04,100 --> 00:12:05,100 here? 284 00:12:07,260 --> 00:12:08,260 And 285 00:12:11,000 --> 00:12:13,139 so after uploading, you have 286 00:12:13,140 --> 00:12:15,119 the actual ticker program to the right 287 00:12:15,120 --> 00:12:17,339 firmware, you can do something you 288 00:12:17,340 --> 00:12:20,069 medio and to not purposely 289 00:12:20,070 --> 00:12:22,499 and after flash and you just turn it on 290 00:12:22,500 --> 00:12:23,759 and you can play 291 00:12:25,890 --> 00:12:26,890 and. 292 00:12:30,950 --> 00:12:31,950 I'll give a little. 293 00:12:33,410 --> 00:12:35,699 Of that, and 294 00:12:35,700 --> 00:12:37,919 just so it is the patcher 295 00:12:37,920 --> 00:12:38,920 environment, 296 00:12:40,500 --> 00:12:42,659 so 297 00:12:42,660 --> 00:12:45,059 this and to document and 298 00:12:45,060 --> 00:12:47,219 I double click, I get the object 299 00:12:47,220 --> 00:12:49,349 library, I 300 00:12:49,350 --> 00:12:51,419 have like a linear catalog or an 301 00:12:51,420 --> 00:12:53,429 AlphaBeta catalog of objects. 302 00:12:53,430 --> 00:12:55,559 We also have like a hierarchy 303 00:12:55,560 --> 00:12:57,779 of categories, which 304 00:12:57,780 --> 00:12:59,489 makes it easier to search. 305 00:12:59,490 --> 00:13:02,189 You can also start typing a name until, 306 00:13:02,190 --> 00:13:03,659 like, find the best match. 307 00:13:05,910 --> 00:13:08,099 And so 308 00:13:08,100 --> 00:13:10,259 I start with as an example 309 00:13:10,260 --> 00:13:12,419 of how to solve two 12. 310 00:13:13,890 --> 00:13:15,580 So this 311 00:13:16,770 --> 00:13:18,909 selecter, so to 12 hours 312 00:13:18,910 --> 00:13:21,449 later, so to trace like a linear 313 00:13:21,450 --> 00:13:23,819 ramp periodically, 314 00:13:23,820 --> 00:13:25,379 repeat it. 315 00:13:25,380 --> 00:13:27,989 So let's have a look at the anatomy 316 00:13:27,990 --> 00:13:29,129 of this object. 317 00:13:29,130 --> 00:13:31,199 It has like an input and 318 00:13:31,200 --> 00:13:32,200 left. 319 00:13:32,910 --> 00:13:35,190 The blue color is a it's a data type. 320 00:13:36,570 --> 00:13:38,579 This means it's from modulation control 321 00:13:38,580 --> 00:13:41,639 voltage, like it's for 322 00:13:41,640 --> 00:13:44,189 for slow changes, not suitable 323 00:13:44,190 --> 00:13:46,349 for audio quality, 324 00:13:46,350 --> 00:13:48,689 but good enough for 325 00:13:48,690 --> 00:13:49,830 changes over time. 326 00:13:51,810 --> 00:13:54,239 And then there is Rhett's 327 00:13:54,240 --> 00:13:56,949 data type and output on the right. 328 00:13:56,950 --> 00:13:59,099 Um, positive indication plus minus 329 00:13:59,100 --> 00:14:01,429 means that they're like bipolar. 330 00:14:02,640 --> 00:14:04,889 Um, and then there is a dial 331 00:14:04,890 --> 00:14:06,749 where you can adjust the frequency. 332 00:14:09,290 --> 00:14:11,359 And I tried to make it as 333 00:14:11,360 --> 00:14:13,459 user friendly as possible, so 334 00:14:13,460 --> 00:14:14,960 at zero position, 335 00:14:16,160 --> 00:14:18,379 it would give a certain value 336 00:14:18,380 --> 00:14:19,429 in Hertz. 337 00:14:19,430 --> 00:14:21,229 Musicians want to reach the note. 338 00:14:21,230 --> 00:14:23,409 The name of the note is that 339 00:14:23,410 --> 00:14:25,489 that's one click away and you also 340 00:14:25,490 --> 00:14:27,559 get to factor compared 341 00:14:27,560 --> 00:14:29,029 to the middle value. 342 00:14:29,030 --> 00:14:31,459 So if I were to if I were 343 00:14:31,460 --> 00:14:33,649 to dial them at twelve, I can just 344 00:14:33,650 --> 00:14:34,819 type 12. 345 00:14:34,820 --> 00:14:37,279 You see that the ratio is times two to 12 346 00:14:37,280 --> 00:14:39,349 semitones and music corresponds with a 347 00:14:39,350 --> 00:14:40,879 double frequency. 348 00:14:40,880 --> 00:14:42,980 And that same time you can also wonder if 349 00:14:44,240 --> 00:14:46,549 that seven semitones 350 00:14:46,550 --> 00:14:48,619 corresponds with the almost one 351 00:14:48,620 --> 00:14:51,029 and a half, which are 352 00:14:51,030 --> 00:14:53,419 almost directly shows then 353 00:14:53,420 --> 00:14:55,009 how harmony works in music. 354 00:14:57,110 --> 00:14:58,110 And 355 00:14:59,330 --> 00:15:01,669 so to listen to the oscillator, I have 356 00:15:01,670 --> 00:15:04,279 to add to I 357 00:15:04,280 --> 00:15:06,559 take a volume control just for you 358 00:15:06,560 --> 00:15:08,719 to be safe. Return with the sound 359 00:15:08,720 --> 00:15:09,679 system. 360 00:15:09,680 --> 00:15:11,179 Well, I have a multiply object. 361 00:15:11,180 --> 00:15:13,969 You multiply with a constant, so it is a 362 00:15:13,970 --> 00:15:15,799 dial to adjust to constant. 363 00:15:15,800 --> 00:15:18,439 But I created the blue object. 364 00:15:18,440 --> 00:15:20,360 I mean blue input, blue output 365 00:15:21,440 --> 00:15:23,539 but similar like you have like function 366 00:15:23,540 --> 00:15:25,009 overloading in C++. 367 00:15:25,010 --> 00:15:26,839 This object will upgrade to a red one 368 00:15:28,280 --> 00:15:30,409 because it sees oh you give me 369 00:15:30,410 --> 00:15:32,629 red input and there is a red 370 00:15:32,630 --> 00:15:35,029 um implementation 371 00:15:35,030 --> 00:15:36,030 of this object as well. 372 00:15:37,160 --> 00:15:39,349 And then I can wire 373 00:15:39,350 --> 00:15:41,959 that to the outputs 374 00:15:41,960 --> 00:15:44,629 or two out 375 00:15:44,630 --> 00:15:45,630 stereo 376 00:15:47,900 --> 00:15:48,900 or 377 00:15:50,210 --> 00:15:51,289 dial it up. 378 00:15:51,290 --> 00:15:53,629 So the first version was this, 379 00:15:53,630 --> 00:15:55,759 you press the button and it will generate 380 00:15:55,760 --> 00:15:58,669 C++ code and 381 00:15:58,670 --> 00:16:00,739 it would be uploaded 382 00:16:00,740 --> 00:16:01,909 to the target. 383 00:16:01,910 --> 00:16:04,009 And if everything works, can 384 00:16:04,010 --> 00:16:06,139 you can you turn the volume up 385 00:16:06,140 --> 00:16:07,219 a bit? 386 00:16:07,220 --> 00:16:09,949 Oh, I unplugged something 387 00:16:09,950 --> 00:16:11,539 and 388 00:16:13,760 --> 00:16:15,889 turn it down first place the external 389 00:16:15,890 --> 00:16:16,890 input. 390 00:16:27,070 --> 00:16:29,159 You already get to working 391 00:16:29,160 --> 00:16:30,160 system. 392 00:16:31,540 --> 00:16:33,599 And 393 00:16:33,600 --> 00:16:35,739 I'm actually jumping in my presentation 394 00:16:35,740 --> 00:16:37,799 and because for 395 00:16:37,800 --> 00:16:40,259 one was just you 396 00:16:40,260 --> 00:16:42,449 make a chart with 397 00:16:42,450 --> 00:16:44,549 your program and it would run that 398 00:16:46,770 --> 00:16:47,909 version to was about 399 00:16:49,020 --> 00:16:50,579 making the changes interactive. 400 00:16:50,580 --> 00:16:53,099 So after and generating 401 00:16:53,100 --> 00:16:55,349 C++ code, 402 00:16:55,350 --> 00:16:57,120 compiling it, doing the upload 403 00:16:58,140 --> 00:17:00,329 and make it also instrumental 404 00:17:00,330 --> 00:17:01,889 that you can change 405 00:17:02,970 --> 00:17:04,289 parameters on the fly 406 00:17:05,640 --> 00:17:08,189 so that you don't need to go to recompile 407 00:17:08,190 --> 00:17:10,259 and um re upload 408 00:17:10,260 --> 00:17:12,559 cycle for just I just think 409 00:17:12,560 --> 00:17:13,560 a no. 410 00:17:14,760 --> 00:17:15,760 Um. 411 00:17:20,230 --> 00:17:21,230 And. 412 00:17:26,030 --> 00:17:28,039 And it also goes the other way round. 413 00:17:28,040 --> 00:17:30,109 So you see two level meetings 414 00:17:30,110 --> 00:17:32,299 here that will also 415 00:17:32,300 --> 00:17:33,300 read back from. 416 00:17:35,550 --> 00:17:37,919 And show you the actual volume 417 00:17:37,920 --> 00:17:40,139 level, so no computational 418 00:17:40,140 --> 00:17:41,939 no critical order computation is going on 419 00:17:41,940 --> 00:17:43,469 on my laptop. 420 00:17:43,470 --> 00:17:45,779 It's the fermenters 421 00:17:45,780 --> 00:17:48,239 compiled and upload it now 422 00:17:48,240 --> 00:17:49,589 and starting with the 423 00:17:50,730 --> 00:17:51,730 user interface 424 00:17:52,860 --> 00:17:53,860 and 425 00:17:54,930 --> 00:17:55,930 after it's running 426 00:17:58,170 --> 00:17:59,279 and. 427 00:18:03,560 --> 00:18:04,579 So, 428 00:18:06,050 --> 00:18:08,209 OK, we have a little oscillator and, 429 00:18:08,210 --> 00:18:10,969 uh, and and 430 00:18:10,970 --> 00:18:13,039 if we can turn this very easily 431 00:18:13,040 --> 00:18:15,869 into a music keyboard, 432 00:18:15,870 --> 00:18:18,409 if I take a keyboard object 433 00:18:20,150 --> 00:18:22,429 and keyboard object has the 434 00:18:22,430 --> 00:18:24,589 output for the notes 435 00:18:24,590 --> 00:18:25,590 that's being played 436 00:18:27,480 --> 00:18:29,749 and there's a great output 437 00:18:29,750 --> 00:18:31,309 will indicate when a kid's pressed or 438 00:18:31,310 --> 00:18:32,209 not. 439 00:18:32,210 --> 00:18:34,849 It's very similar in, um, 440 00:18:34,850 --> 00:18:37,129 reasoning as, uh, as 441 00:18:37,130 --> 00:18:38,279 old. 442 00:18:38,280 --> 00:18:40,729 Well, they're still they're still an 443 00:18:40,730 --> 00:18:42,799 analog synthesizer analog. 444 00:18:42,800 --> 00:18:43,909 Melyssa Devices. Yes. 445 00:18:43,910 --> 00:18:46,039 Like machines where you have like it 446 00:18:46,040 --> 00:18:48,079 is a bit similar to this, but every every 447 00:18:48,080 --> 00:18:51,439 object is like a circuit 448 00:18:51,440 --> 00:18:53,510 and you interconnect with cables, 449 00:18:55,580 --> 00:18:57,799 um, to grow up to a playable 450 00:18:57,800 --> 00:19:00,619 thing. I have to modify 451 00:19:00,620 --> 00:19:02,779 the volume depending on 452 00:19:02,780 --> 00:19:03,780 the gate. 453 00:19:04,550 --> 00:19:07,279 The yellow cable type is a billion 454 00:19:07,280 --> 00:19:08,419 on or off. 455 00:19:08,420 --> 00:19:10,549 But I also can convert into 456 00:19:10,550 --> 00:19:12,619 a blue one that doesn't 457 00:19:12,620 --> 00:19:14,929 need to be a substitution object 458 00:19:14,930 --> 00:19:16,999 that has that has 459 00:19:18,170 --> 00:19:19,170 a yellow input 460 00:19:20,510 --> 00:19:22,039 because there is a conversion rate from 461 00:19:22,040 --> 00:19:23,040 yellow to blue. 462 00:19:26,680 --> 00:19:27,880 So I went to the UN 463 00:19:29,410 --> 00:19:32,039 and I take a virtual keyboard 464 00:19:33,220 --> 00:19:35,980 for you, Mr. Tetsuro, and. 465 00:19:42,120 --> 00:19:44,440 So we have a playable system. 466 00:19:54,130 --> 00:19:55,809 I thought five objects would be a bare 467 00:19:55,810 --> 00:19:58,089 minimum to get a playable system, but 468 00:20:00,280 --> 00:20:01,420 it can grow quite a bit 469 00:20:03,580 --> 00:20:05,890 and it's 470 00:20:07,870 --> 00:20:09,339 going to 471 00:20:11,620 --> 00:20:12,790 take a little organ patch 472 00:20:15,460 --> 00:20:18,189 and organ organ 473 00:20:18,190 --> 00:20:20,409 organ. OK, uh, 474 00:20:20,410 --> 00:20:21,410 so, 475 00:20:24,100 --> 00:20:26,169 um, there's like 476 00:20:26,170 --> 00:20:27,170 a sort of a. 477 00:20:30,850 --> 00:20:32,949 And so one 478 00:20:32,950 --> 00:20:34,569 of the problems, if you want to play 479 00:20:34,570 --> 00:20:36,249 music, you don't you don't want to be 480 00:20:36,250 --> 00:20:38,919 limited to one key because, 481 00:20:38,920 --> 00:20:40,539 well, some instruments do for some 482 00:20:40,540 --> 00:20:42,189 instruments, it's reasonable. 483 00:20:42,190 --> 00:20:44,289 For an organ, it's not reasonable. 484 00:20:44,290 --> 00:20:46,389 But if you want to express 485 00:20:46,390 --> 00:20:48,729 that in a in a patch, it's sort of 486 00:20:48,730 --> 00:20:51,369 awkward if you would have to 487 00:20:51,370 --> 00:20:53,649 line up 12 or 16 488 00:20:53,650 --> 00:20:56,409 different oscillators and 489 00:20:56,410 --> 00:20:57,730 parts for if you want to play 490 00:20:59,020 --> 00:21:00,020 different keys 491 00:21:01,180 --> 00:21:02,180 and. 492 00:21:04,930 --> 00:21:07,019 So I made a 493 00:21:07,020 --> 00:21:09,189 way to use 494 00:21:09,190 --> 00:21:11,289 one document as an object 495 00:21:11,290 --> 00:21:12,429 into another one. 496 00:21:12,430 --> 00:21:13,869 So actually this object 497 00:21:15,070 --> 00:21:17,559 comes from dispatch. 498 00:21:19,400 --> 00:21:22,309 This this document is like magic 499 00:21:22,310 --> 00:21:24,679 objects, it's called an outlet 500 00:21:24,680 --> 00:21:26,359 object that represents 501 00:21:27,770 --> 00:21:30,049 an output on the generated 502 00:21:30,050 --> 00:21:31,390 object that corresponds with it 503 00:21:33,230 --> 00:21:35,869 also has little direct output. 504 00:21:35,870 --> 00:21:37,969 And an insider just 505 00:21:37,970 --> 00:21:40,549 uses a keyboard object like I showed in 506 00:21:40,550 --> 00:21:41,550 the beginning 507 00:21:43,310 --> 00:21:44,450 and. 508 00:21:47,200 --> 00:21:49,600 So that's the the child patch 509 00:21:50,950 --> 00:21:53,439 and then on top, I ask 510 00:21:53,440 --> 00:21:55,959 now give me 12 voices up 511 00:21:55,960 --> 00:21:57,339 and just arrange it. 512 00:22:00,190 --> 00:22:02,319 But I also wanted to show the inside the 513 00:22:02,320 --> 00:22:04,690 subject some parameters, 514 00:22:05,890 --> 00:22:08,469 um, have like attributes. 515 00:22:10,470 --> 00:22:13,259 It's called Parmeter on parent, 516 00:22:13,260 --> 00:22:16,229 so the parameters with this flag set 517 00:22:16,230 --> 00:22:18,419 there are promoted to 518 00:22:18,420 --> 00:22:21,059 the objects corresponding with the 519 00:22:21,060 --> 00:22:22,109 inside object. 520 00:22:25,280 --> 00:22:27,439 And 521 00:22:27,440 --> 00:22:30,229 so that's 12 quarters of 522 00:22:30,230 --> 00:22:31,999 a certain architecture to play one 523 00:22:33,440 --> 00:22:35,420 organ pipe or something. 524 00:22:36,430 --> 00:22:37,430 And. 525 00:22:42,370 --> 00:22:43,370 So. 526 00:23:13,270 --> 00:23:14,270 So. 527 00:23:22,700 --> 00:23:23,700 And 528 00:23:24,950 --> 00:23:27,499 so it's just a matter of combining 529 00:23:27,500 --> 00:23:29,839 elements and adding objects library 530 00:23:30,950 --> 00:23:31,950 up to. 531 00:23:34,210 --> 00:23:36,909 Uh, currently, I think there's 532 00:23:36,910 --> 00:23:39,159 over 400 objects serving 533 00:23:39,160 --> 00:23:41,709 different purposes, and 534 00:23:41,710 --> 00:23:43,599 that seems to be that selected the 535 00:23:43,600 --> 00:23:46,329 critical minimum critical minimum sort of 536 00:23:46,330 --> 00:23:48,399 thing, reached that you can start 537 00:23:48,400 --> 00:23:50,289 doing stuff without having to write 538 00:23:50,290 --> 00:23:52,719 another object for 539 00:23:52,720 --> 00:23:53,740 a certain purpose. 540 00:23:56,350 --> 00:23:57,760 Let me show you something that 541 00:23:59,020 --> 00:24:01,209 if you're used to Arduino 542 00:24:01,210 --> 00:24:03,819 or things, and 543 00:24:03,820 --> 00:24:06,220 that might give it a different look, 544 00:24:07,990 --> 00:24:10,449 what I did on this set up is 545 00:24:10,450 --> 00:24:12,579 via potential meeta to analog 546 00:24:12,580 --> 00:24:14,859 input. So it's just a 547 00:24:14,860 --> 00:24:16,180 regular Foldit divider. 548 00:24:17,620 --> 00:24:18,620 Um, 549 00:24:20,200 --> 00:24:22,509 so, uh, yeah, uh, 550 00:24:22,510 --> 00:24:24,609 this so the power 551 00:24:24,610 --> 00:24:26,559 supply ground and, 552 00:24:27,850 --> 00:24:30,429 uh, fit that into the potentiator. 553 00:24:30,430 --> 00:24:33,009 It gets back to analog input. 554 00:24:33,010 --> 00:24:35,139 So instead of we know people 555 00:24:35,140 --> 00:24:37,389 learn to write like a 556 00:24:37,390 --> 00:24:40,539 function call old analog read. 557 00:24:40,540 --> 00:24:42,819 Um, in my home 558 00:24:42,820 --> 00:24:44,949 environment is called Chip Guiyu 559 00:24:44,950 --> 00:24:47,050 in Senesh Analog. 560 00:24:48,700 --> 00:24:50,679 And I select a channel where it is 561 00:24:50,680 --> 00:24:52,869 connected to an in and 562 00:24:52,870 --> 00:24:55,089 out. We know people learn how to 563 00:24:55,090 --> 00:24:57,279 to print numbers to a console 564 00:24:57,280 --> 00:24:59,349 and return numbers that fly 565 00:24:59,350 --> 00:25:00,350 over there. 566 00:25:01,880 --> 00:25:03,550 Here I can have 567 00:25:06,160 --> 00:25:07,359 a little chart plotter 568 00:25:08,530 --> 00:25:09,530 or. 569 00:25:12,200 --> 00:25:13,200 Uh, 570 00:25:14,570 --> 00:25:16,580 Adile or. 571 00:25:24,220 --> 00:25:25,760 Or a numerical readout? 572 00:25:26,810 --> 00:25:29,080 No, it's already in the dial up, 573 00:25:31,540 --> 00:25:34,419 so I turned it up, you see, 574 00:25:34,420 --> 00:25:36,519 and it's instrument, 575 00:25:37,990 --> 00:25:40,779 you can you don't have to 576 00:25:40,780 --> 00:25:42,639 watch the flying numbers. 577 00:25:42,640 --> 00:25:43,829 You can just 578 00:25:44,950 --> 00:25:47,349 use like the oscilloscope and on 579 00:25:47,350 --> 00:25:48,350 screen 580 00:25:49,990 --> 00:25:50,990 and. 581 00:25:55,530 --> 00:25:56,530 So. 582 00:26:00,330 --> 00:26:02,579 I think that's more that's quite 583 00:26:02,580 --> 00:26:04,739 a bit more learnable then 584 00:26:04,740 --> 00:26:06,809 than writing the same thing in 585 00:26:06,810 --> 00:26:08,939 C and getting a terminal with numbers 586 00:26:08,940 --> 00:26:11,129 flying by in 587 00:26:11,130 --> 00:26:12,749 the same world. You can also do 588 00:26:14,280 --> 00:26:16,409 to drive a step a motor or demand 589 00:26:16,410 --> 00:26:18,809 the melodies or an. 590 00:26:21,580 --> 00:26:23,829 To S.P.I or 591 00:26:23,830 --> 00:26:24,830 Chrissy. 592 00:26:27,130 --> 00:26:28,130 And. 593 00:26:33,700 --> 00:26:35,240 I'll assume. 594 00:26:38,180 --> 00:26:40,519 The final demo take a 595 00:26:40,520 --> 00:26:41,520 bit of. 596 00:26:43,220 --> 00:26:45,289 Well, I'm not really I'm not 597 00:26:45,290 --> 00:26:47,509 really a musician, although 598 00:26:47,510 --> 00:26:49,579 I sometimes enjoy 599 00:26:49,580 --> 00:26:50,580 playing something. 600 00:26:51,550 --> 00:26:52,550 Uh. 601 00:26:59,040 --> 00:27:00,040 So, 602 00:27:02,790 --> 00:27:05,379 sir, on top to it's like a little, 603 00:27:05,380 --> 00:27:07,529 um, there's a metronome, a square wave 604 00:27:07,530 --> 00:27:09,929 generated at one at five 605 00:27:09,930 --> 00:27:11,670 hertz that means 606 00:27:12,690 --> 00:27:15,089 and turn 40 607 00:27:15,090 --> 00:27:17,399 bpm and it's divided in steps. 608 00:27:17,400 --> 00:27:20,679 So it's not really turning 40 BPM. 609 00:27:20,680 --> 00:27:21,699 And 610 00:27:23,370 --> 00:27:25,499 and then like a counter that comes to 611 00:27:25,500 --> 00:27:27,569 16, if the 612 00:27:27,570 --> 00:27:29,909 counter does carry, it 613 00:27:29,910 --> 00:27:32,579 does not come to that will count to four. 614 00:27:32,580 --> 00:27:35,009 And when that 615 00:27:35,010 --> 00:27:36,010 does it carry, 616 00:27:37,830 --> 00:27:40,159 also something else will happen. 617 00:27:40,160 --> 00:27:41,160 And 618 00:27:42,260 --> 00:27:44,489 and then real steps and patterns 619 00:27:44,490 --> 00:27:46,799 and oscillators and generators 620 00:27:46,800 --> 00:27:47,800 and stuff. 621 00:27:49,530 --> 00:27:51,099 So and 622 00:27:52,250 --> 00:27:53,939 that's all I would like make a 623 00:27:53,940 --> 00:27:56,609 modification to this document 624 00:27:56,610 --> 00:27:57,610 and 625 00:27:58,710 --> 00:28:00,779 know that it's boring. 626 00:28:00,780 --> 00:28:03,089 And I take this 627 00:28:03,090 --> 00:28:05,369 and I 628 00:28:05,370 --> 00:28:08,189 go in and look 629 00:28:08,190 --> 00:28:09,209 object 630 00:28:12,000 --> 00:28:14,199 and I, 631 00:28:14,200 --> 00:28:16,229 I have like this little two channel mixer 632 00:28:16,230 --> 00:28:18,419 tube to recombine 633 00:28:18,420 --> 00:28:19,719 influences. 634 00:28:19,720 --> 00:28:20,720 OK, 635 00:28:22,170 --> 00:28:23,579 quickly 636 00:28:24,720 --> 00:28:26,969 now I just skip the analog just 637 00:28:26,970 --> 00:28:29,489 a bit of time and I press five. 638 00:28:31,010 --> 00:28:32,010 And 639 00:28:34,710 --> 00:28:37,319 so it's like a drum machine. 640 00:28:37,320 --> 00:28:38,320 I had 641 00:28:40,720 --> 00:28:41,910 and the baseline. 642 00:28:45,000 --> 00:28:46,000 And 643 00:28:49,360 --> 00:28:50,940 I can and 644 00:28:52,860 --> 00:28:55,009 it does are no samples, no samples of all 645 00:28:55,010 --> 00:28:56,520 of this, just all algorithms, 646 00:28:58,290 --> 00:28:59,290 that means you have a lot of. 647 00:29:03,630 --> 00:29:05,920 So it's a very nice with. 648 00:29:17,970 --> 00:29:19,259 Thank you very much. 649 00:29:19,260 --> 00:29:20,729 I'm afraid we don't have time for 650 00:29:20,730 --> 00:29:22,859 questions and answers right now, but if 651 00:29:22,860 --> 00:29:25,199 you're interested in your honest work, 652 00:29:25,200 --> 00:29:26,879 then just come up to him right after the 653 00:29:26,880 --> 00:29:29,099 talk and maybe find a place to meet 654 00:29:29,100 --> 00:29:30,989 somewhere. So please give them a.