(gentle music)
- Welcome to the CircuitPython Show.
I'm your host, Paul Cutler.
This episode, I welcome Cooper Dalrymple.
Cooper is a web developer and musician
and has been contributing to the new audio effects
available in CircuitPython.
Cooper, welcome to the show.
- Hey, Paul, how's it going?
- It's going great.
Thanks for making time today.
- It's always a pleasure.
I mean, hey, this is only my second time,
but I'm excited each time, so it's great.
- How did you first get
started
with computers and electronics?
- Well, I've actually been working in this field,
I guess, for a really long time.
I started when I was a young kid, probably like 10 or so.
But really, the first big thing that happened,
I guess, in this field,
if anyone out there maybe has heard of Science Fair,
right, Intel, ISEF, it's like the International Science Fair.
I kind of got into that, roped into it.
And I actually started experimenting
with electronics back then, with like Arduino,
even some like Atom computers and stuff like that,
doing a lot of computer vision.
And it's really funny 'cause I look at what I did back then
And it seems so primitive now.
I was literally using Game Boy cameras.
I would strip out the sensor from it
and plug some wires in and use an Arduino library, et cetera.
But now we've come so far.
In fact, I know with Adafruit and stuff,
they recently gave some support to the OpenMV project, which
seems super cool and leagues beyond what I was doing back
in, what, 2012 or so.
So that's kind of what got me started really getting
into hardware and programming.
And I kind of followed along some
of the companies around that time, like SparkFun,
stuff like that.
- How did you discover CircuitPython?
- Well, I'd known about it for a while,
though I hadn't really dived into it.
I was definitely, for a long time, I was hardcore.
If it's not C or C++, what are you doing?
But I think a lot of that mindset came from,
I think that early era, I say early,
really, you go back to Intel 8080, et cetera,
but really that early era of MCUs in the 2000s
and early 2010s.
I'm talking about like the ATmega328.
Well, I mostly dealt with the ATmega stuff.
And those processors, you're going at like eight megahertz
or something with an eight bit core or maybe 16 bit.
It's not really possible to do the kind of stuff
you can do now with CircuitPython.
That overhead of Python and all these awesome libraries
was just too much to even consider.
And then I think that started to shift.
We started to go implementing all the ARM Cortex cores.
In fact, I remember my first chip
that was kind of in this realm was the ARM Embed,
the original, I think it was blue or something like that.
Pretty cool chip, I didn't get that deep into it,
it was a little above my level at the time.
But all of a sudden, you started being able
to have all this power, you know,
we're talking about dual core,
hundreds of megahertz practically,
and a 32-bit instruction set.
And then you can start not worrying about it, right?
you can start abstracting all of that
and starting to work with something like CircuitPython
and MicroPython.
What did I learn about it?
Well, I knew about Adafruit
from purchasing just Raspberry Pi stuff back in the day,
especially I really used to love the Pi Zero quite a bit.
I still do, I really do.
If you need Linux and everything in a small form factor,
inexpensive, et cetera, it's a great board.
And they have the Zero Two now, I believe,
which I haven't really played around with much,
but I really like that form factor.
And I used to purchase some parts and stuff,
but I didn't really get into CircuitPython
until I discovered SynthIO, right?
Thank you, Jeff.
I feel like every time I talk about SynthIO,
I have to give him some kudos.
- Absolutely.
- Yeah, Jepler on Discord and so on.
So I had some experience,
'cause I was always into synthesizers and stuff,
and I had some experience with Mozzie on the Arduino,
which I think is still around, still supported,
but that was definitely kind of designed
for those eight-bit microcontrollers
where it's like you're really constrained within that space.
And on top of that, like adding in control logic,
driving displays, stuff like that,
like you start getting really limited.
And then when synthio came out,
I don't know, it was just really exciting.
Be like, hey, I can just build a synthesizer,
I can give it my notes,
I can control some basic parameters,
I don't really have to think about it,
it all works in the background,
and I can focus on what actually makes my project cool.
So I started working on some projects back then,
but it was just kind of slow moving.
That is until I think about 2019 or 2020 or so.
Well, actually not 2020, that'd be COVID,
but somewhere in that time span,
I'm from Pensacola, Florida,
which is this little Navy town, you know,
on the coast of the panhandle of Florida.
We don't have a whole lot of tech going on here.
There's not a ton of maker spaces or anything like that.
It's pretty sparse.
But all of a sudden, somebody roped in,
I think it was UWF, our local college here,
roped in Maker Faire and started a Pensacool Mini Maker Faire.
All of a sudden, the lights are flashing,
I'm all excited, I got to do something with this.
They were inviting community members because I
wasn't a part of the university at the time.
They're inviting community members to contribute to this.
I was like, well,
let's make some music and make it approachable.
Because I know with a lot of these Maker Faires,
there's a lot of younger students,
people that don't know this whole world that we know,
and they just want to see something fun and cool, whatever.
And CircuitPython seemed like a great avenue for that.
So I started a project called the PicoSynth Sandbox,
which was supposed to be kind of like a do-it-all synthesizer
with microphones, touchpads, MIDI, a display, et cetera,
that utilized CircuitPython.
So I put it on the back burner for a while,
but that's something I'm hoping to revisit in the future.
But it was a total success.
A ton of kids had fun at that.
I actually did two years in a row and I kind of expanded upon it.
And I wish I had like some numbers here, like the number of students that came and interacted,
but I don't.
But it was a really good time.
You were part of the panel discussion in the recent episode
about audio effects, and shared
that you have a background in music, which you've also touched on.
What is your musical background?
Good question.
So I don't do as much as I used to do now.
But back in the day, I used to play in a bunch of bands in high school and stuff, always
kind of loaning myself out to whoever needed help as well as doing my own music and writing and
recording. You know, especially being kind of tech literate, I guess. If you're into music,
you usually get really into the weeds and all the recording and the hardware and, I don't know,
tweaking up guitars, things like that. So I did that for a while. I had a pretty good band for a
while called Crystal Coast. You know, we have a few music videos, that kind of thing. But we didn't
really go too far. But since COVID happened, it kind of shut everything down for me with that.
I kind of had to reevaluate and I found some other hobbies I was really interested in that were a
little bit more, I guess, independent in nature. And so for music, what I ended up doing is I
tried to go with this Relic idea that I had, which you might notice by my tag on GitHub and all that
kind of stuff, Relic SE or just Relic depending. But basically, I wanted to focus more on the
I wanted to create some electronic songs.
I had all these ideas.
Once again, I put everything on the back burner.
I put this on the back burner a bit.
I'm going a little slower now,
whereas I was really putting out songs for a while.
And that was on SoundCloud, nothing big.
I only played one show so far.
I ask people every now and then
if they need an electronic band,
but that's not very popular where I'm from.
There's not a whole lot of this kind of shows.
- Sure.
- And fun fact here,
the reason I came up with the name Relic,
It's not because I'm 100,000 years old.
It's actually for resistor, limiter, or inductor, sorry,
capacitor, right?
I was like, I had this cool idea about like, hey,
the essential components of a passive filter.
But now, right now, I mostly play drums.
One thing I always like to say is,
once you learn how to play something like drums or bass,
you will always play drums and bass.
Because every band doesn't have a drummer or bass.
Everybody plays guitar.
So as
soon as you pick up those skills,
That's the only thing you're going to be doing for a while.
So I mostly play in metal bands and stuff like that on the side.
You recently started designing hardware to use with your music.
How has the learning process been in designing hardware?
It's been a steep one.
I feel like with every design I do, I learn a new skill,
which is really scary.
Because when you create one of these designs in KiCad or Eagle or whatever,
you're like, yeah, everything works.
This is great.
My schematic's good.
My hardware is good.
so on, send it out to a PCB manufacturer,
and it comes back, and there's problems.
There's almost always problems.
And I wish I could know where the problems were
right from the beginning, but I don't.
So I've kind of been leveling up.
Honestly, I only learned how to do SMD,
like reflow soldering and stuff,
probably like two or three years ago.
So for a while, I was only designing through-hole stuff,
even then, very limited, 'cause I'd always be scared.
The whole process is scary.
And when you're doing something as a one-off,
I usually just perf board or do crazy wire jobs
and it's a mess.
I've since learned it's typically better
to get a PCB manufactured if you can.
It's so inexpensive nowadays.
It's really worth it.
It's just scary, that's it.
So lately I've been getting more,
my components have been shrinking
and shrinking and shrinking to the point
I'm finally starting to design stuff
with the RP2040 and 2350 in mind,
that small QFN size with very specific capacitor placement,
et cetera, and I can solder some of that stuff,
I will admit, I have some experience with it,
but I'm finally trying to do the assembly stuff
with these PCB manufacturers.
A, to save time, probably save cost,
'cause it's always hard to source
some of these components by yourself.
And I don't know, just be better,
'cause I feel bad for the people I've sold boards for
and stuff in the past, there's probably flux on them
and
like this other
job is just inadequate,
but as long as it works, right?
- So tell me about one of the boards that you've designed.
- So I've done a couple,
probably my most popular is what I call the PicoProm.
It was actually a project started by George Foot
on GitHub, right?
And he just breadboarded Raspberry Pi Pico,
and you're gonna hear me mention that a lot.
It's one of my favorites,
but it just a breadboarded a Raspberry Pi Pico
to program EE proms, which are electrically erasable,
programmable, read-only memory, which are commonly
used in old computers, like the Apple II, things like that,
as well as game cartridges and so on,
like the NES and SNES and so on.
So at the time, I was actually really into the Atari 2600.
I'm a little bit of a masochist when it
comes to programming sometimes.
And I really like assembly code, like something about that.
It's just so raw.
and you're in control of everything.
You're the one that has to write
every single little instruction that that CPU processes.
It's just really exciting.
And the Atari was a great platform for that.
So I actually made one game, it's called Spider Web.
Nothing special, it's kind of goofy, a little arcade game.
But I wanted to actually create physical cartridges, right?
And so I needed to figure out a way
to program these cartridges.
And so I found that project, which is super simple.
You know, the Pico has a ton of GPIO,
and they're bidirectional, you can really control them
how you want, and so they literally just plug straight
to this chip to program it, which is great
for if you're programming one or two chips
and you're in a rush or something,
but if you're like, I need to make 30, 40 cartridges,
I gotta program a lot of chips for that,
you need something a little bit more durable.
So I took that design and I expanded it
and added a few features, rewrote a lot of the software
to be a little bit more dependable,
and create a PCB for it and a case and everything,
the whole shebang.
And that did pretty well.
I was pretty excited about that.
Other than that, I've done a few smaller little boards,
like little chip adapters, things like that.
I've been working on two other projects.
My synthesizer I mentioned earlier, the little sandbox,
which at some point you have to decide when to stop.
And so far I've done like four different revisions
before even releasing anything.
And I'm still not done.
So, and then the other one is, I've been working a lot,
like you mentioned the guitar, audio, say guitar,
the audio effects stuff with CircuitPython.
I've been working on a guitar pedal design.
That's kind of been my dream, right,
is to have a guitar pedal that you can just
program how you want, you know?
I probably have a shelf of like 50 pedals over here
that all do very different, very weird bespoke things,
which are really cool, but I feel like
if I was starting out from scratch,
I would, and you know, I like tinkering with this stuff, et cetera.
I'd really like a pedal that, okay, when you get it, maybe it's a delay,
something simple, but Hey, I want to play around with distortion.
I'm playing, you know, some Metallica or something.
You want something a little different.
And instead of having to go off and get another pedal, Hey, why don't we
just upload this Python script to it?
Boom, totally different belt, that kind of thing.
So I've been experimenting with that and, um, I'm on to my second revision.
So hopefully it's the last, but we will see.
Nice.
>> You've contributed to both CircuitPython and Arduino.
What are the advantages to each that you see?
>> Both environments are a bit of a means to an end.
With Arduino, to me,
I really see that as bare metal programming.
Sure, you have a lot of libraries,
there's a uniform framework,
and that helps you get started with certain chips,
and you can port things between chips,
where you can't necessarily do if you program specifically for one chip, you know, bare metal,
whatever, within their SDK. So that's nice. And you know, Arduino has been around forever,
you know, back in 2012, when I was doing some of this stuff, I was coding an Arduino and here in
2025, 13 years later, it's still around. And so there's a lot of information out there. However,
I do find that the documentation, there's no standardized format, right? And the documentation
and get a little hairy, even, I'm sorry to say this,
even with some of the Adafruit libraries,
I find it a little bit hard to follow.
And so what I end up doing,
and thankfully I have the knowledge to do this,
I end up going to the library's GitHub
or whatever source code they're using
and looking directly at the header files
and just reading the C++ itself or C.
And that's good, I can use that in a lot of cases,
but I would definitely say for a beginner,
that's pretty daunting.
Doing basic stuff, Blink and stuff like that,
Not a problem, but when you get in the weeds,
you might as well be writing in the SDK for the hardware
platform itself sometimes.
However, I don't want to really poo-poo on Arduino too much,
except I will poo-poo--
poo-poo, sorry, I don't know if that's the right word--
on its IDE.
I really am not a fan of the IDE.
I feel like it has a lot of growing pains,
and hopefully they make a better one these days.
I know there's V2 out already, and it's OK,
but it's not my style.
On the other hand, CircuitPython,
anytime I wanna just make something happen,
I wanna prototype something really quick,
it is the way to go.
There's so many libraries built into it
that are at your fingertips that are dependable,
have very good documentation.
I think that's one great thing they did
like with read the docs,
making that the format across the board,
everything's written out exactly as you need it.
Now, there's still room for more learn guides,
more examples, you know, it's when do you know when a circuit
Python came out? 2017? Wow. Okay. Okay. Yeah, yeah. So I
mean, there's still room for more examples more than great.
It's but that'll always be the case, especially as new
hardware comes out. But that the the art out of fruit supplied
libraries, and even better the community libraries, just
fantastic. Everything's I like what Scott does the he has a
name for it where you're like the property based API APIs,
where like, hey, you're using a temperature sensor
instead of, hey,.getTemperature,
you're actually just, what's the temperature, right?
And that's really nice.
I like that approach.
I know when I wrote my first libraries,
it was hard for me to get a feel for that,
but now that I really understand how all that works,
it's very cool, and I like working in it quite a bit.
And also, on top of that, Circup,
and I just learned about CircFirm, that tool.
In fact, it was in the last, and I'm sorry to date this,
but it was in the last weekly meeting they mentioned it.
I was like, I didn't even know that exists.
And it's just a quick command line
to just install the firmware
and upload any libraries, et cetera.
It's awesome.
Honestly, the device even being used as a USB drive,
super cool.
So I'm actually taking some classes right now
in a community college of mine,
just furthering education, et cetera.
There's a student there that I've grown pretty fond of
and they're a little bit newer,
they're a little younger than me
and they have no experience.
in this and I started introducing like telling him about like how all this
works and we were in like a robotics class, right?
So they were just getting a hand of some of this and anyway, I ended up giving
him an extra Pico I had laying around and I was like, I'm gonna load this
thing up with CircuitPython, put some, you know, a little blink script on
there, just get them familiar with it.
And it kind of blew his mind that he could just plug it in and just shows up
as a flash drive and the code's right there.
There's no compilation, no nothing.
And in fact, in the robotics class, we were using Arduino.
And I remember it was so confusing.
When we first did it, he was like, wait, so I have to--
it doesn't just upload to the board and compile there.
It was new to that whole workflow
of having to compile things for a different platform
beforehand, and then uploading that firmware
through the bootloader, all that.
It was too complicated, et cetera.
Now, I think there are still some growing pains.
I've probably said that a couple of times now
with CircuitPython.
I know we're making the switch to Zephyr eventually,
but I would really love to be able to use multiple cores.
A lot of my programs, they typically have a core
that's like for real-time processing,
you know, audio, stuff like that.
And then another core for updating displays,
handling controls.
I'd love to be able to use that in CircuitPython,
especially because you do have a little bit of overhead,
and I think that would drastically improve on boards
that can support those multiple cores.
- Yeah, it'll be pretty interesting to see
what Zephyr brings to the table once that's integrated.
- For sure,
I'm excited.
I know right now it's mostly focused on Nordic chips
and some other stuff that I've never heard of before,
but I'm excited to see what the process is gonna be like
when it moves to SAMD21,
ESP32, Pico, et cetera.
That'd be great.
- So we've mentioned the audio effects a couple of times.
What are you working on next as far as audio effects go?
I have to admit, I'm a little bit stale right now.
I've mostly just been providing tweaks
as we work towards the 10.x, alpha and beta,
just improving things on existing effects.
However, I still have some long-term features
I've been working on, but they're hurdles for sure.
One thing that is incredibly important is bi-directional I2S.
In case viewers aren't familiar, I2S is pretty much the standard, I guess, for audio data
transmitting real-time DACs and ADCs and so on.
There are other standards, PDM, or you could always just do PWM out, et cetera.
But for a lot of the projects that I want to do, I want to have audio input.
And right now, that's very difficult within CircuitPython, just with the way that the
framework is constructed.
I've begun the process of introducing some actual audio input that goes into the whole
audio stream.
So just like it is now where you can bring up a wave file or synthesizer and play that
out through an audio output, you can do the same with real-time audio.
But it's not great.
There needs to be some core changes.
And I've done some of those changes, but I'm still dealing with some intermittent issues.
So right now there's a PR on CircuitPython with some of my work on that.
That's just a draft.
I haven't touched it in a while, but I really need to, especially if I want to realize some
of these projects I've been working on.
And I think it's just cool.
It's just really cool.
I agree.
I've also been playing around with a lot of different audio effects in Arduino.
In fact, the pitch shift effect I recently added to the core, that was kind of one of
the foundations of what I was working on there.
And there's a couple other effects that we've been working on--
flanging, things like that--
which aren't quite ready, that I've
been playing around with in Arduino,
that hopefully should be pretty easy to go in.
I've also been wanting to streamline the entire effects
system.
Right now, there's a lot of duplicate code.
And I'm sure some of the other contributors
aren't a huge fan of that, because we're
reducing that flash size little by little.
So I think there's a lot of room to streamline that and save
a lot of flash and make it easier for other people
to add effects in the future, where you don't have to worry
about all the framework so much.
You can just be like, hey, here's my effect.
Here's the properties I need.
And here's the process.
That would be great.
If anyone wants to learn more
about your work,
where should they go?
So if you want to support my work,
right now I do have a Tindy store.
I kind of took some notes from some other contributors
to CircuitPython and put up some of my products on there.
And so far it's been cool.
But I've kind of slowed down a bit.
Some stock is you know I'm out of stock on a couple of my big products which I I need to increase on but there's still a few things on there if you want to check it out.
But on top of that for my music I do have SoundCloud which I'm sure will be shared in the description on this.
And then for my just general stuff I'm doing I do have a blog.
I have. It's weird.
There's like four different blogs on it for you know different projects I'm working on my music and then also just some old stuff I have up there.
It's probably not great, but better there
than the Wayback Machine.
That's generally how you want to get in touch with me.
I have contact forms, email, et cetera.
- I'll link to all of those in the show notes.
- Oh, I forgot to mention,
I do have a YouTube channel as well.
I'm not as prolific now, but every now and then
when I have a big product update,
or if I have CircuitPython libraries,
I've been working on little projects.
I do my own little show and tells on there sometimes,
and deep dives.
I'm taking a lot of keys from out of fruit on this one, but if you're interested in some
of the
work I do, that's where you can find it.
Last question I ask each guest, if starting a new project or prototype,
what board do
you reach for?
So I am a glutton for the Pico.
I got to say, you know, there's a lot of boards out there, but the Raspberry Pi Foundation
has done a great job and they always have providing documentation.
I was going to say supply, but I know there was a big shortage on pies a couple of years
ago, reasonably so.
It's just such a cool little fun, inexpensive.
That's another thing.
I'm very cost driven, you know,
'cause anything I work on,
I wanna make sure that I could take something like that
to market at some point if I really wanted to.
And when you're working with a platform where it's like,
well, it's 30, 40 bucks for this dev board,
it makes it a little bit harder to recommend, you know,
and potentially sell at some point.
So the Pico is great for that.
And I love the cast lead pads
where you can just plop it on a board and solder it down,
make it pretty permanent.
It's just awesome.
And I use some other Pico-based boards, you know, some of the Adafruit ones,
some of the smaller form factors,
but I just, I love that
platform.
That's a great pick.
Cooper, thanks so much for coming on
the show.
No problem.
Thank you so much for inviting me, Paul.
I really appreciate it.
I love what you do here and I love listening to the podcast.
So I'm
looking forward to it.
Thank you for listening to the CircuitPython show.
You can find links to Cooper's blog, YouTube channel, and
Tindy store in the show notes.
And if you'd like to learn more about the new audio effects in CircuitPython that Cooper
has contributed to, check out the panel discussion in episode 43.
Until next time,
stay positive.