 John Park, it's time for JP's, not JP's Prada Picco Week, for John Park's workshop. I'm over here fiddling with my audio mixer because it looked a little hot, but I would, again, love, I did this on Tuesday, but I would love if anyone has feedback on the audio levels, just because I switched some gear out on my setup and I wanna make sure, especially because I've got HVAC running, I wanna make sure that you're not getting weird sounds, echoes, hums, buzzes, things like that. And if the levels seem good. So let me know. In fact, I'm gonna turn down, I have a second microphone input over on the workbench that we're gonna use to listen to a little speaker later. So I wanted to turn that down for now since I'm not using it. Dave Odessa in the YouTube chat, hello. And he says the audio is good. Great, hi, Mark Nord, Howdy from Colorado and Marie Meyer from Pasadena. Welcome, one and all. And also, if you're wondering, where is the chat? Where's the chat happening? Maybe you're over on Twitch and who's that guy talking to? I'm talking to these people too. That's the wrong way. That right there is our Discord server. It's atifrew.it slash discord. You can jump onto the server and then just look for the live broadcast chat channel. You can see it right there. We've got a bunch of different channels and it scrolls on and on. But these shows, these live streams we do, we like to hang out and chat with people over in our Discord live broadcast chat channel. So that's where that's happening. Thanks, Jonathan Rosenberg and Connor McCarter says, maybe a tad low. How about a goose the channel level just a little bit? How's that? Let me know if I go too far if it gets too loud. All right, let's see. So thanks for having me back. I was off for a couple of weeks, but I am back in fighting trim. What's the word for that? Fighting weight? Fighting condition? I'm not fighting. I'm a lover. I'm not a fighter. I'm here and feeling well. So that's the best I can do. Things that we have going on today. I've got a fresh coupon code for you so that you can buy some cool stuff in the Adafruit store and help us keep our lights on and our HVAC running and our microphones loud. I've got, let's see, a product pick of the week excerpt or recap to share with you from Tuesday. I've got a Circuit Python Parsec continuing in our Circuit Playground series that we've been doing. Let's see, what else did I say I've got going on? I have a slightly clickbaity named project here today. I called it Minimum Viable Synthesizer. I am sure there are much, much, much more minimal ones, but this is, for Synth.io, a pretty minimal synthesizer setup. It's one I'm using for my examples for the Synth.io Fundamentals Learn Guide that I'm working on right now. And I've started making little audio, actually little videos to show off the different functions of how the setup of Synth.io works. So I'll share with you that setup as well as some in progress behind the scenes work on that guide, since it's the main thing I've been working on for the last couple of weeks. What else? I've also got a little gear report, retro gear report thing I wanted to show you. And maybe that's it, we'll see. So first off, the much, much promised coupon code. So if you wanna head over to the Adafruit store and get some stuff at 10% off, then Larsenheimer is your coupon code for today. That's right, I hope I spelled it right, otherwise Lars will be mad. Right, Lars? Look there he is, he has no mushroom cloud or anything like that to show off. But Larsenheimer, Lars, you got a little fleck of something on your forehead there. Larsenheimer will get you 10% off in the store today, so head on over to Adafruit and look for some stuff, look for some new things, some old things. If you go to the products dropdown and click view all next to new products, you'll see some stuff that's new. Look, here's this 2.8 inch TFT touchscreen that's a shield, an Arduino shaped shield that's actually perfect for things like this Metro M7 down here and Metro RP2040 that came out recently, Metro ESP32 S3, whole slew of new metros, which is really cool. Hopefully I'll start doing some of those on product picks, so you can pick some up at a discount. There's, these guys are not out yet. I can't wait for these, these cool round TFT displays, this very nice looking square TFT display. Looks like we'll be able to do some neat stuff with those as well as the driver board for that. Those are in stock, the RA8875. So that's just some new stuff, but you can also always go to products categories and pick something by category and you'll get 10% off if you use the coupon code Larsenheimer in your basket on the way out, so just throw stuff in your cart and then right at the end where it says coupon code, type that in, Larsenheimer, that'll get you 10% off in the store today. Hi Gary T, Gary T over in the YouTube chat says, I love the pattern of the LCD behind you. Thank you, this is a Feather DVI, has a DVI output, Feather with a, it's actually a HDMI shaped output, but it's DVI and it's a RP2040 Feather. I am running a nice little bit of sample code that our good friend Todd Bot, Todd Bot whose name will come up later when we talk about synthesizer stuff, Todd Bot posted some nice studies in his GitHub repo that include this really nice little simple elegant, not too attention getting, just right, I think it's just right. So I've been running that for a while now because I just like the look of it. Other question from the chat, David Esso said, are you done with the ambient machine? Yes, I finished the ambient machine. I showed the final version of it off about a month ago, maybe three weeks ago, and I have a learn guide up for it. So actually, let me go show that off right now. Learned at a4.com and ambient machine, this is it right here. So there's a learn guide for it and we've got, I put up a couple of demos, got your parts list there for what you'll need, including the, and I wonder if you were just saying this to make me say it, but it's the moppe. We've got the moppe, Ikea mini storage chest there, Baltic Birch plywood storage chest. We use two drawers, a medium and a small drawer, embedded in each other. Put the ambient machine in my other workspace. It is not here unfortunately, so I can't show it to you, show it to you. But the circuit is outlined here both on the fritzing and a fritzing schematic, so fritzing breadboard view and fritzing schematic view, so that you can look at that and understand what's going on. It's essentially what I use, 20 switches. I used a couple of IO expanders for that over I squared C to make it straightforward and consistent. I've got a Metro M7 in there, which has got a lot of horsepower and it's running a set of 10 wave files concurrently, and I'm using mixer and the switches to turn the sounds on and off and change their volume. Then we've got the code section of the guide here, including the project bundle. So in case you're not familiar with these, if you're doing circuit Python stuff, if you're following along on learn guides on Adafruit, you can click this download project bundle. These are automatically generated from the code that we put up on our GitHub repo and any asset files such as the wave files that are used in this and the libraries that you need for your version of circuit Python. So click that, you'll get a zip file and you can throw that on your board and then including the code.py file that you'll need. And then I got a code explainer here that tells you how all the little pieces of the code work. And then here's the fabrication and assembly. I used a laser cutter, I cheated, but I did include a template that you can print out and use to make your drill holes, consistent drill holes for the switches there. Wiring it up, soldering it together, put it on one of our little swirly grids there so that you can get all the parts mounted into a single surface. Drill another hole for our USB-C connector that's used to power the device. I did not include a battery in this. You could, if you wanted to, you could certainly add a battery to this. Since it's a metro, it doesn't have a battery plug in it, but it does have the barrel connector so you could simply throw a four AA battery pack right into the barrel connector there if you wanted to. But the way I have it here, it's just running off of USB-C. And close it up. I threw a little paper, construction paper, on the front there rather than painting it because it looked good enough and I was feeling a little lazy, but you could certainly paint your case if you wanted to. You could stain it. This Baltic birch doesn't stain that well. I think it looks better painted or raw. And then use it, enjoy it. So that is that learn guide. It is out, thanks for the question. Dave Odessa. Let's see, what else? So, yeah, thanks, Todd included a gist for, over in the, throw it up here, over in the Discord he threw up a link to this. This is the code that's running on my, this little visualizer back here. 28 lines of code, including three that are comments. So pretty, pretty efficient, a bit of code there. It's the picoTVITest.py. Yeah, I think that's it. I think that's the one I'm running. So, next up, there's this, good grief. This is my show that happens on Tuesdays. It is JP's product pick of the week. I picked something new from the store, sometimes old, but this week a pretty new one. Put it through its paces, build a little demo, create a terrifying thumbnail image to bait all sorts of people on YouTube to come and watch a thing that'll possibly frighten them, and also to entertain myself. The show's about 15 minutes long, but I like to make a little one minute version that you can enjoy right here and right now. So here it is. The ESP32S3 reverse TFT feather. This is a feather board, but it's also a display. This is an IoT clock. So this is using a time server and Wi-Fi to keep itself in sync. So this should be exactly 112, if I look at any of my other sort of internet clock connected devices, just turned to 113. And this one just shows off the TFT with an adorable little couple of pictures of Lars there. You can also mount these vertically for your Iraq. You can see I have it kind of doing random, little random stuff there. And when I press these buttons, I'm changing the colors of the different elements there. That right there is my product pick of the week this week. It is the ESP32S3 reverse TFT feather. Hey, thank you, I have my sound off. All right, I'm just getting back to the swing of things here. What else did I say? I just said, hey, hello to ZZGavin. Thanks for stopping by. I looked at the chat and nothing all that important other than that was said. I just wagged my jaw for a moment. But I think we're back. Thank you, check, got it, good. So let me let that settle down for a moment and I'm gonna get set up here for a circuit Python parsec. Share with you. Second, oh, okay. Here we are, let's do this. All right, I think I've got my audio and everything. So let's do it. For the circuit Python parsec today, I wanted to show you how to use the circuit playground library to easily access the capacitive touch sensors that are on the circuit playground blue fruit or the circuit playground express. So the circuit playground library is a high level library that lives inside of circuit Python but it makes the commands really easy to use on these two particular boards. So what you can see here, we have a bunch of these capacitive touch pads, seven of these in fact are capacitive touch pads. And I'm just gonna use the brightness here because this is a little low. Flip my exposure, it's a little better. How about like that? So what I'm gonna do is touch one of these, it's this A1 pad right here. And when I touch it, you can see over in my serial readout here. I'll reset this so that we can see it changing actually. When I touch this pad, it just prints out touched pad A1. And the way this works, I have time imported just to help with sort of debouncing. And then I just have this one library from Adafruit Circuit Playground Import CP. That's the circuit playground library. Then my main loop, while true, if CP.touch underscore A1, that's that A1 pad has been touched, then we're gonna print and we're gonna put a little delay in there. Now this can get much more interesting if we go ahead and check out this example I've got below. Whoops, not like that. Whoa. There, like that. So, let's set that up. I'm gonna go ahead and save this so I've updated the code. And now what I can do is touch any pad and you'll see, oh, I've, hold on. Got, that was the Facebook thing. Let's try that. There we go. Okay. So now what's gonna happen is any of these capacitive touch pads when I touch them are going to light up one of the NeoPixels next to them and then turn off any previous ones that I had lit. So there is the A4, the A5, the RX, the TX, A1, A2, and A3. So those are all seven of the touch pads on there and it works just the same as the simple example. I'm importing time, I'm importing Adafruit Circuit Playground. Then CP pixels brightness, I'm setting to 0.05, keep it low. And then in my main loop, each of these pads works the same way. If CP touch A1, A2, A3, and so on, then we'll go ahead and fill a particular pixel with the color that is chosen for that pixel. And actually, first before that, we go ahead and turn all the other pixels off. In fact, we turn off all the pixels across the board. Then we just light up the single one that we want and we use a little time there for debouncing. So one of the neat things here is that you can get little patterns going because it is running through, has little 0.1 second delay, and then checks for the next pad. So we can, in fact, get them all going at once if we want. That should be all seven of them there, which is a lot of fun. You can see I'm also printing out to the display there. And so that is how you can use the capacitive touch sensors on Circuit Playground Blue Fruit and Circuit Playground Express inside of Circuit Python using the Circuit Playground Library. And that is your Circuit Python Parsec. Yes, Circuit Python. All right. There we are. Sorry, I bet there was an echo there on that song because I left the mic running. Now I'm scared to switch the mic off when I do things. Okay, let's see. Ham asked, do you have any files for that Eurorack mount? That's a great question. I do have them. I don't think I've published them anywhere, but I can publish just a SVG file if you want to use that as a fabrication file to cut these out, or you could use it to build a 3D printed. Where did I put them? I have one right here. Where did I put the actual? Oh, here's the laser cut one. Yeah, so there's the little board, the feather, with the reverse mount TFT. And there's my little cutout there. It just gives you the holes, the four holes for mounting, and a window that includes all four of the buttons there. So yeah, you could 3D printed cases. I think there may be some Ruiz Brothers 3D printed cases for these because we have both the S2 and S3 version of this. So this has been out in a couple of versions here long enough, I think, to generate some projects. But yeah, I will post up a file. Remind me on the Discord if you don't see it soon after the show. All right, so let's see. Next up, I wanted to show you a little retro gizmo preview. We're going to do another of Jepler's famous keyboard projects. And this is the next keyboard to get the Circuit Python keyboard adapter treatment. Look at that, right there. That is a Dreamcast keyboard for the Sega Dreamcast that has, as you can see here, clear plastic for the top of the case and all of the keys. A little wipe back there. This was the HKT-4000. You can find them for about $40 on eBay. This one is super clean. I'm so impressed. I'm not even sure. I think this is the original. I don't think this is even yellowed. It looks really good for something that probably came out in 99. Somewhere around that, I think, if I remember. I was in line to get the Dreamcast on day one. So I think it was 99 or 2000, maybe. So this is meant for a couple of uses on the Dreamcast. So the Dreamcast came with a modem. I think you could also get an ethernet adapter for it instead if you wanted to and browse the web. So this could be used along with a mouse, I believe, or maybe it was the controller and keyboard in that instance to surf the web. And then there were some games like Fantasy Star Online, which I played networked on the Dreamcast that you used a keyboard for. Now, I didn't have this beautiful little mini keyboard. I had the one that was released in the US, which is a big full-size Honkin Beige keyboard. That just looks like all of your big battle tank keyboards. Unfortunately, it's rubber dome switches. These are not nice mechanical switches. But I played a lot of Typing of the Dead with this. So Typing of the Dead was one of the three or four games that came out in the original called Dawn It was a shooting game. It was a light gun game. It was in the arcades as well. And I can't even remember what it was called. But I had this. My brother-in-law and I had had a Dreamcast, the game. He has the game still. I don't have it. And two of these keyboards so you could go head to head and battle in essentially, no, it was co-op. As zombies came towards the screen, they would pop up a word over them. It would say like milk. And you had to type in milk as fast as possible. And with each letter, you'd hit them. And when you typed the word in, they would go down. I can't remember how it penalized you for mistakes. It might have just been the wasted time. So it was a touch typing trainer, which was great. And you could use that keyboard for it. But in Japan, they came out with this gorgeous little keyboard. Let me put this under my down shooter here so you can get a little better view of it. If you'll bear with me. And Phil PT, Phil Tyrone, saw that this existed and told me and Jepler to each get one so we could do some projects with it. Let me set this camera view here for you. OK, there we go. I mean, gorgeous, huh? Look at that. You can get some angles where you can see the letters better. So we've got English and Japanese on there. It's fairly standard at the top as far as function keys go. You can see, obviously, some of them are aligned vertically. Some of them, it omits. I don't think we have home and end, do we? Oh, no, they're down here at the bottom, OK. S2, S3, I don't know how those were used. I don't know what those are at all. So there'll be some discovery here as we figure out how to adapt this to use in circuit Python, probably on a little QDPI. The connectors on these are a, I think it's a five pin connector. And I could not find, even on Ali Express, any connector straight up like PC mount connectors. So I did what I always do, which is pick up an extension cable because these always have both the male and female side or socket and plug side of it. So I'll be able to plug the keyboard into this, cut that off, and then wire this directly to a little proto board. So that should plug in like that. So that is going to then be USB. So we'll have USB, HID, and we'll have the fun time figuring out what some of these should do, could do. I don't think it has LEDs in it. I have not gotten my Dreamcast out. It's up here somewhere to plug it in and try it out. But I will at some point and see if maybe I can pick up a copy of Typing of the Dead. Yeah, that's about it. I don't know when we're going to actually get to this because I believe Jephler is on vacation for a little bit. But once he's back and gets a keyboard, we can cry. Toddba says it doesn't have LEDs yet. That's right. Yeah, this thing would be ripe for some LEDs. There's a bit of a nice strip of them back here. That'd be kind of fun. There it is, the Dreamcast see-through keyboard. So let's see, what else have we got going on? Minimum viable synthesizer. So to introduce this, let me bring back my web browser and give you a little update on my progress, a little behind the scenes on this learn guide. So this is in progress. It's not up yet. You can't access it. But this is the Audio Synthesis with Circuit Python SynthIO guide. And the two main sections that I've fleshed out so far are the synthesizer fundamentals. And so what I'm doing is talking about the building blocks of synthesis that are relevant to how SynthIO works so that we can make sense of the parameters that we have to deal with. So I explain what the oscillator is with different wave shapes. And then I have little examples here. You might even be able to hear this. Let me see. So there's an example where I've got just an audio oscillator playing one pitch and I'm adjusting the wave shape so we can hear what a pitch with varying wave shapes going from square to triangle to saw and sign will sound like. And I've got examples that I built in VCV rack of those just so we can see them visually. That's what these little movies are here. And then I've also got these symbols that come from the Patch and Tweak book. They are available, Creative Common licensed symbols for use in describing synthesizer patches. I have a little link here that says where you can get them. And so I'm using these to show how the different filters work, examples of how the filters sound, what is amplification slash attenuation, how an envelope generator works to modulate that amplification or attenuation, examples of those. And then the subtractive Synth flow, signal flow, if you were here on Circuit Python Day, I did an example using a little EuroRack synth of how this goes together. This is pretty much the signal path that Synth I O uses. Synth I O can take an input of some kind for what pitch it's going to play. And that's often something like a MIDI keyboard. And it will be in the example I show here. Going into your oscillator, oscillator can be different wave shapes. That goes into a filter, which can cut off certain frequencies, emphasize certain frequencies. That goes through an amplification slash attenuation with an envelope to shape it. So fast attack, slow decay, and release, et cetera. You can make things sound plucky, make things sound like they have a long sustain and release on them. And then Synth, Synth, Synth, this is Circuit Python. And we're using the audio I O. We can use the audio mixer, which is fantastic. The mixer allows us to wire up a whole bunch of sounds, let's say a big chord of up to about 12 notes in Circuit Python Synth I O. Those can all be running into a mixer. And then we can use the mixer to do other effects to the emphasis on different sounds. It's a way to attenuate all those sounds in one place. And so that is, then I give a little example of that in VCV Rack, as well as a couple extras, the low frequency oscillator that we have in Synth I O, which can be used to modulate sounds. And ring modulation, which is a sort of effect, an interesting sounding effect, which also is available in Synth I O. I'm discussing polyphony. We can do multiple sounds. In fact, every note in Synth I O has its own full signal path, its own filter, its own VCA, its own envelope, and so on. I then have a section on getting started, how to get it up and running on your board. And so for this example, that is it. That's the minimum viable synth right there. In fact, there's an extra bit we don't even need. I've got the SD card version of the QT Pi BFF, little best friend forever that bolts onto the back. That BFF can either be the I2S amplifier just on its own, or the one I happen to have available was the one that has the SD card, which if you want to go get fancy later and also play back samples, play back waves, you can do. You could also potentially store wavetables on there if you wanted to, I think. So that's it though. The minimum viable synth is a QT Pi, a amplifier plugged into the back of it, I2S amplifier, and a little speaker. Now I'm going to use a slightly bigger speaker than that. I'm using the enclosed speaker, which is just since it's got its own enclosure with a little port for the bass sounds to come out. It's just richer sounding and louder. And then this is the part I'm working on now. These are these synth IO examples. So these will show you a little code snippet. Based on, I said earlier, I would mention Todd Bot again, Todd Bot has an excellent synth IO tips and tricks page on his GitHub repo that maybe he'll post over in the Discord or someone else will beat him to it. I'm using a lot of those as the foundations for these little code snippets. So here's a simple example that just shows how to set up your amplifier, your I2S amplifier, on the correct pins for the QT Pi. Set up an audio bus IO I2S output. Set up a synth object. I went very luxurious 44 kilohertz sample rate on this one. I'm not sure why I'll probably lower that. And then we play, set the synth playing. And then we're using the sort of old school, original synth IO methods of it's a default square wave. So a pretty buzzy sounding sound until we get into giving it different waveforms later. And I'm sending it midi note numbers, even though I'm doing it in code. I'm not actually sending it from another device. But internally, it can think in terms of midi note numbers and it can think in terms of frequency in hertz. So an example like this is just gonna play this note and the key is F on the keyboard for half a second and then release and then wait two seconds to play again. So it's like one quarter note in a measure. See a little speaker moving there in the video. So whoops, let me pause that. So then we've got setting up a very similar thing but just playing chords, then using the mixer so that we can alter the sound on each note or chord that plays. I'm adjusting the mixer volume. And we start adding the envelopes in. So you can see here's filter. This is mimicking the first section which explained this in broader terms and used VCV rack. Now I'm replicating all of that stuff with the little minimum viable cutie pie synth. And then we're adding midi note input into it. And I just filmed a section I haven't posted yet which is gonna be the adding midi CC which is all the knobs, all the knobs and sliders and things if we wanna adjust the many parameters that we have to deal with inside a synth IO we can use knobs and things. So that is the state of the guide there. And what I wanted to do is show you a little setup that I put together here to demonstrate some of this stuff. Let me explain what I've got going on here for a second. So you can see over on the right there is the little, and you know what, right now I'm gonna turn up the volume on that mic. Let me know if you're getting a lot of extra noise just from me turning on, there's a microphone and a little guitar amp style microphone that actually was a gift from C Grover. So thank you again for that. The thing has become super useful. So I've got the speaker, which is this right here. That's that little enclosed three watt forum speaker. That is connected to the little BFF. In fact, let me disconnect this and bring it over here. So you can see there's my QT Pi BFF on the back. Why don't I switch to the down shooter? There we go. QT Pi BFF has this little picoblade connector, which I've grafted onto one of these speakers here. And then these I happened to use headers to connect these socket and pin header so you can pull them apart. You can also just bolt them right together and solder them back to back if you're just planning on using it for this and get it a little smaller that way. So what I'm feeding this is power and MIDI. So the USB-C cable that you see going into the QT Pi there, that's giving it the five volts of power to power the board. And then it's also able to send USB MIDI messages over to the thing. And then the rest is all synth IO. And I'll show you the code in a second. Yeah, Pete Curry says, of course there's a key step. These are super useful for these demos. So that keyboard is actually sending out a MIDI over serial MIDI, sort of traditional MIDI. And then I have a little gizmo that can act as a USB MIDI host so that that thing is taken care of. You can use a computer for this. You can use a Raspberry Pi for this. I happen to be using a RetroKits RK006 for this. And I'm hosting also this guy right here. So you may recognize this one. I've got a project guide about building this as a Lightroom controller for doing color correction, color grading in Lightroom. It's four of our Stema QT seesaw sliders there. And this is actually one board that has four mechanical key switches on it. So let me know, right now, before I go back behind there to the other side, how that mix sounds between the synthesizer and my voice. I'll just hang out for a minute and wait for the stream to catch up with the real world so that I can get to your feedback on how well you can hear that. And oh, Cryptnip is typing. Hey, Cryptnip, nice to see you over in our chat. Yeah, Todd Bot said in the chat, those are nice low profile headers on the QT Pi. I tend to buy the itsy bitsy low profile header kits because it's got like a lot of them for a good price. Let's see, synth could be a bit louder. Okay, so I'm gonna go quite a bit louder. Now tell me how that level is. These will also be higher pitched over here. And that mixed with the voice, still low, but we can hear it. All right, let me get that stuck there. I don't have a MIDI panic button on this thing yet. That's maybe what one of these should be for. Cryptnip has asked, is the code for the QT MIDI type A or type B? Okay, so I'm sorry, that part of the thing is actually not what it seems. I'm actually coming out of the key step with I think that's type A going into the RK006 there. I'm not using the QT Pi with MIDI directly in this case, only because I'm trying to keep the set up in the guide really simple. So I'm not soldering to it, so I didn't wanna solder a little MIDI circuit to this. I'll include some guidance on that or a little separate thing, but in this case, I'm just getting my MIDI over USB on there. I built something recently in an Altoid 10 that I showed and that was USB A, is the way I set it up. Okay, so seems like maybe thumbs up on the sound there, hoping crank it even a little higher. Tell me when to stop. You know what I should probably do is also get this closer. Probably make a huge difference. There's a last sound check and then I'll go back there and demo a couple things. Let's see, two bench cam there. Okay, so what I wanna show here is there are actually a few different of the parameters for synth IO that we're controlling. So first of all, just note that we're playing. So we'll just play one note at a time. I won't play chords. We will hear some overlapping notes though because we have not only sustain, but release, we have a long release going right now. So you can. Release tail is actually one of the parameters that I have also controllable for MIDI. So reconnect this. I don't think that was sending signals anymore. Sorry about that. So. Okay, so this is a really short release on the envelope. So I'll press it. And when I release, it just drops right off. So as I increase this slider right here, we got the maximum that's set in code. And that's something you could change if you want it to be a much, much longer release. You could overlap really nicely with each other. Okay, this first slider here is the, I'm checking the chat there. Hold on. I just wanna make sure again that you can actually hear this. Go to my Discord. Thanks for your patience. Synth is way too loud compared to VoiceMic. Oh, sorry. I went too far, huh? I did it. I finally went too far with this. Turning down the synth. Okay. Let me know how that works, you know. I can also try to not talk at the same time in school. And just give examples. I'll do that for a moment. Be quiet while I'm showing stuff. So this first knob will change the filter cutoff. So what that means is do we let all the frequencies through that we're playing, or do we start to remove frequencies that are higher than the fundamental, the note that's being played? So if I'm playing this F, that are higher than that, and I can, because of the shape of the wave, the wave has a square wave, in this case, I think. It has a lot of harmonics. So here you can hear that we get all the harmonics through, all the frequencies. And we get that kind of muffled sound on this, which is a low pass filter in this case. The next one that I have, so I mentioned filter, envelope, the envelope release time. This is the detuning of two oscillators. So there's two oscillators, I think, playing simultaneously that are either in tune with each other, or start to get out of tune with each other, which gives us this nice phasing effect, chorusing phasing effect. You can hear them kind of peeing against each other. They're quite out of phase. If we make it subtler. It gives this kind of cool movement to it, which kind of keeps it alive. And then the last parameter that I hooked up here is this, a sort of a vibrato, or a, yeah, it's like a vibrato effect. It's going to be the pitch wavering above and below the center of the note. You get rid of the chorusing. That one's actually the tremolo. So that is not changing the pitch, but is sort of wobbling the level. I think that's what that one's doing. Okay, so that's like a vibrato. Same as the mod, this little pad on the keyboard sends the same midi CC 18, I think it is. And that's what it does. So let's take a look. I'll show you that. I'm going to grab it actually and show you the code for this and how it's working. This is Todd's monosynth patch, I think with no changes in this case because I'm using the same CC numbers and everything. So let's get set up here like this. Get set up here like so. Get that extra me out of there and let's find a USB-C cable. Where'd you go? How about you? All right, let's see if this one works. So let's go over to here. Let me close that. Oops, now I've done it. Hold on. Let's fix. Is that actually, I think I need to relink. Give me one second. I think I got the code view out of sync. There we go. So here we go. This is monosynth one, synthio.py from Todd Bot. It's partial port of his monosynth one from the MOSI experiments. And here you can see these are these midi notes that were used or midi CCs that were used. So midi CC number 74 was the filter cut off. I wasn't using the resonance. I left it at some default 0.5 or something. Envelope release time was the next one, the detune amount and then the pitch vibrato. So those were the CCs that I was using on the little slider box. The code here you can see the kind of key things is we're importing synthio and we're also using the numpy in microlab to generate our wave tables for different wave shapes. And I'll explain that more and that's a part of the guide that I haven't gotten to yet so I don't have an explanation ready to go on that yet. This is for setting up my BFF little i2s output here on the pins that it's connected to. Then setting up audio bassios i2s outputs. This is a nice digital output signal to the amplifier and the amplifier then converts that to wave electricity basically to send to the speaker proper output. The MIDI channel one we're receiving on and that's both if you're using sort of classic MIDI connection or USB MIDI both are actually enabled in this. Then we have three oscillators for note so that's the multiple oscillators that are just slightly out of tune with each other it gives us that fat sound. Here's the detune amount and then we have low and highs for the sliders what they get mapped to so low and high frequency for the low pass filter the resonance which I wasn't changing the low frequency oscillator that's modulating that vibrato how fast that goes and the frequency of that to begin with. There's some setup here for my little, for neopixels as well as for my mixer so that's bringing in the channel and adjusting it if you want to mix in samples at the same time you'd be doing that in the mixer or multiple voices. We set up the synth in this case with just a single channel and the sample rate is 28 kHz for some reason. The mixer starts and we set the voice level to 0.75 so this can be lowered and raised with another knob if you wanted to as well. Nice convenient place in the code to have a volume knob. Then the waves are set up so we have a sawtooth wave and this is generated it's turned into essentially a lookup table a table of points with this command so this numpy linspace with these values gives us the plot of the shape of this waveform and that's what synthio uses it's just a single cycle of in this case a saw it's a saw, yeah so it'll be straight up and a ramp down and that gets stored as a buffer which is then looped and played over and over again and shifted for different pitch values and then the LFO for vibrato is set up with a synthio LFO call I think it's essentially always a triangle wave the LFO unless you go and give it a wave table as well so by default it's a up down, up down, up down same slope on both sides the oscillator list holds the current sounding oscillator so this is to keep track of what notes are being played setting up the filter here's the little range mapper that's used to essentially turn MIDI cc numbers and other values from one range into a different range that's useful to you here is our MIDI note on function here and that is where all of the parameters are set up for our note that's going to get played so one note in synthio is essentially its own synthio voice that has everything from its level which is based I think on this case how hard you press the note so that's a velocity sensitive keyboard so it knows how hard you press it or actually how fast you pressed it but that gets mapped to a thing called velocity so it's a different volume level depending on soft or hard presses and then the envelope is set up and this is based on the knob that I was adjusting at least this release time here was based on that knob that I was adjusting and the others are based on that velocity press of the MIDI keyboard those note values are turned from MIDI numbers into frequencies and I think that's used because of the detuning of the oscillators we wanted to get that turned from these MIDI numbers into actual frequencies so this could be masked on there Dexter asks can it play street chicken yeah I should probably feed street chicken into it sometime or learn how to play it I programmed that on a Nintendo DS with the core DS10 app that I made the street chicken song then this is the MIDI note off command when you release a key what it sends and then in the main loop of the program here we have this iteration of whatever the filter is doing to all of the notes that are being pressed in all the different oscillators we handle our MIDI incoming MIDI either over UART or over USB then if the message is a note on message and it has actual velocity then we're going to be playing a note and then if we're getting a note off or the velocity is zero then we're going to play the note off message and then everything else is MIDI CC controls so those are mapping things from their MIDI 0 to 127 values into whatever is the useful for that parameter in SynthIO so I hope that's somewhat useful now or maybe come back to this explanation when you start playing around with SynthIO and looking at some of these examples but I am as I'm building that guide I'm building it up to some of these examples that are a little more fully featured that will have some CCs and some notes that you can play and again like I say you don't have to play it with a keyboard you can send MIDI from your computer you can send MIDI from another microcontroller you can write generative programs that are just doing it all internally either with MIDI notes or with frequencies we have a lot of ways to tell SynthIO to do stuff you can build little nice little scales that will always sound good and have it randomly pick from them kind of like the this example here and the Tyrell building Synth if you go back and look at that learn guide that's doing no user input other than changing some playing variables but it will just play forever and do its own cool stuff so I think that covers what's going on on the little minimum viable synth and I called it that I think I may try we were discussing doing a version of this where it's just a plug that goes like a MIDI plug that goes into the back of a keyboard and is all self-contained and has an audio output on it or speaker on it so we may for now my purpose is to write the guide and make it accessible without a big outlay of money or effort to build the little thing that you're then getting to code but we may try to do one that's like do a small of a nub as possible that just shanks into the back of a MIDI keyboard and a sequencer and plays all right let me know if you got any other questions in the chat before we go I will mention again that if you want to go and buy some of this stuff a QDPIE and a BFF will get you started and a speaker and you want to get 10% off then use this coupon code today Larsenheimer throw your stuff in your cart and on the way out type Larsenheimer if you want to get some discounts additionally or freebies I should say you can go to adafruit.com slash free and see the deals that we've got running so right now you can get that PCB coaster for any order that's $99 or more we'll throw in the PCB coaster with the gold Adafruit logo $149 or more you'll get a KB2040 and the coaster if you're $199 or more you get free EPS ground shipping in the continental U.S. and the KB2040 and the coaster and this is the new one right here this is a brand spanking new board and a brand spanking new offer if your order is $299 or more you will get an Adafruit Metro M7 this is the one with the SD card on it the co-lab one with NXP and Digikey so that's the exclusive red version of the Metro M7 there you'll get that and the free ground shipping in the continental U.S. states and the free KB2040 and the coaster with the gold Adafruit logo so go buy some stuff get yourself a discount by typing in Larsenheimer at the end I think that is going to do it for today thank you everyone so much for stopping by thanks for hanging out in the chat audio level shenanigans I appreciate your feedback on that it's really helpful I will see you next time don't forget to stop by tomorrow for a I was just going to sorry I just got distracted because I thought hey maybe I should type in showtimes here do you know this trick if you go into our discord and do showtimes question mark showtimes you'll see we've got we'll see you next time with foamy guy or scott not sure who probably scott on friday foamy guy circuit python stream on saturday and then it'll be desk of lady aida sunday evening I'll be back with a product pick of the week on tuesday we'll have a 3d hangouts on wednesday show until on wednesday ask an engineer on wednesday and then this show again on thursday alright thanks everyone for stopping by for Adafruit Industries on john park this has been john park's workshop