On the one hand, I do projects like #muvco to learn new things. On the other hand, that means I spend a l o t of time on sidequests.
Finally learning #python #asyncio so my #multisynth[1] concept has a fighting chance to work right in #micropython (still not willing to go to C for this...)
[1]There's surely already a name for this pretty obvious #synth concept, but I haven't come across it yet. "chordal synth" might be more descriptive but also less accurate, at least how I'm doing it.
#muvco #python #asyncio #multisynth #micropython #synth
Was laying out the #kicad #schematic for #muvco and it started to seem too pedestrian.
Went back and realized I had been using the #pcm5102 wrong and it does indeed do exactly what I originally wanted.
Now making a waveform generator instead of using the dds #ad9833. Much more flexible in shape and can be semi-polysynth ("chordal #synth"?) #synthdiy
Can now generate a perfect 5th in 260us! In mostly-unoptimized #micropython! Just dyads still--need to generalize to larger chords + diff shapes.
#kicad #schematic #muvco #pcm5102 #ad9833 #synth #synthdiy #micropython
Welp. I dunno.
Low pass filter didn't work. Not 100% clear why, but I guess click isn't so far above tri or square after all.
Can't set the amplitude from here.
Using reset or freq = 0 to mute didn't work. Not 100% clear why.
Trying to ramp the phase worked fine, but only at low modulation frequencies. The process is too slow at high ones.
Ugh, there's a problem with the through-zero linear fm "just flip the phase 180" idea for #muvco.
#AD9833 works with a phase accumulator. Meaning it just counts up in a ramp at a rate given by the freq. Then it adds the phase register.
When I flip to the other phase register, it's a discontinuous jump = an audio pop.
Can't count backwards. Don't know where I am in the phase (I think) so I can't just add 180 to that (the #math way)
Maybe just a low-pass #filter to drop the pop?
#muvco #ad9833 #math #Filter #synthdiy
Also, it's a combination #hardware #software project that involves a lot of the same concepts I do actually use every day at work (obvs, since I'll be an engineering user) but also at home on the #muvco (in a microscopically tiny way).
So it's just really fun that we are all playing together (except it's just me at home watching slides on Teams and typing chat comments to my work-spouse).
For some dimwitted reason I didn't put my FM controls on the newer #muvco prototype breadboards when I reworked the input/output chains.
I think I'm ready to implement through-zero linear FM, but I don't have a hardware interface to attach it to!
Gotta figure out another way to test. Or rebuild Yet Again?
And if I'm doing that, should I add an exponential FM switch? The software side would be trivial to handle and the hardware just takes an extra toggle. Maybe even just use a pushpot for lvl
I threw an FM knob on the #muvco just b/c I thought I oughtta. Getting to that part now, it looks like I'd prefer linear FM with "through-zero"
Conceptually, that's really simple to add purely in software with the #esp32 + #ad9833 b/c it has two phase registers. Init them to 0 and 180 and flip when the frequency sign toggles.
Hopefully takes just an hour or two today. Then I could hook the VCO into existing VCF/VCA #eurorack modules and retry Bach a little more musically.
#muvco #esp32 #ad9833 #eurorack
OKILY DOKILY!
#midi is finally working well enough in the #micropython #synthdiy #muvco that I can tell how it sounds. And that sound is: Like a video game.
Which makes sense, since this is a bare squarewave (barewave) quantized to 1/16th notes and no variation in velocity.
I'm not making the #midi2cv module yet, so beautiful #music will have to wait. I can proceed on whatever-the-fuck I was doing before I started this #sidequest
#midi #micropython #synthdiy #muvco #midi2cv #music #SideQuest
So the #midi sounds pretty good on the #muvco now. It sounds fine on either vco.
But if I play two *different* tracks (from the same song, I mean) I get a timing problem (haven't timed it, but less than a second). Playing the same track on both vcos simul sounds fine. (using #uasynchio #micropython)
Really seems like I must be parsing the midi consistently wrong, but I don't see how.
#midi #muvco #uasynchio #micropython #python #programming #synthdiy
Spent most of the evening watching #Taskmaster clips and then only when I was supposed to be heading up to bed did I even begin to look at this problem (#adhd).
Obviously narrowing the problem down as far as possible I found it within about 10 seconds. I didn't have one of the output audio jacks grounded.
Tomorrow's task: Figure out how to do #thread s on #micropython on the #esp32 #microcontroller (#synthdiy #muvco). Or maybe some other easy way to play two tracks at once without a huge chain
#taskmaster #adhd #thread #micropython #esp32 #microcontroller #synthdiy #muvco
The tuning and buzzing on the #muvco left me dejected. I've recovered.
The processing chain is too long to debug and the midi2cv stand-in isn't what I want in the end anyway.
I should read the #midi directly on the #esp32 #microcontroller and go directly to a frequency. That will debug just the output #audio.
When/if that's clean, map the midi to a simulated voltage input to check math and some of the input noise. Later feed it out via DAC to the real ADC.
Painful #debugging is ineffective.
#muvco #midi #esp32 #microcontroller #audio #debugging
#muvco milestone.
Sounds came out that were recognizably music!
There's a terrible buzz in one voice (wiring problem?) and a slight buzz in the other (mixed grounds?). and the tuning is truly awful, but that might be my hacked-together #midi-to-cv code/hardware.
I'll mess with it for a bit and see if a video is warranted.
#muvco #midi #synthdiy #eurorack #microcontroller #micropython
Two voices on the VCO combined in the mixer I also designed and had printed to a #pcb.
Again, keep in mind that the amazing thing here is that the bear dances at all.
https://diode.zone/w/gtpiPg4rvzm2AQaNGzUPvj
#synthdiy #electronics #microcontroller #micropython #esp32 #python #muvco
#pcb #synthdiy #electronics #microcontroller #micropython #esp32 #python #muvco
Scratch "assemble mixer pcb" off the list--it works as designed! Which isn't much, but I'm a n00b!
Also scratch "two #muvco voices" off the list--they work as intended! Which isn't amazing (only square really makes an impact...?), but I'm a n00b!
Also also scratch #GeometricAlgebra off the list--I did a bunch of problems! I got semi-stuck, but I'm still a n00b!
Video of some of this later.
#bivector (what tags are my geomalg buds hanging out...at?) #math #synthdiy #esp32 #micropython #python
#muvco #geometricalgebra #bivector #math #synthdiy #esp32 #micropython #python
Well, #adhd did it again. Right now my Interest List is:
- #muvco
- assemble mixer pcb that came back last week
- read #midi files
- two voices
- think about low-part-count implementation idea for #polysynth #synthdiy
- work on #geometricalgebra problem sets (from good-so-far book: https://geometricalgebra.org/)
- take birthday present manim course (https://www.manim.community/, but more than basics)
- read Empire of the #Ants and #DawnOfEverything
That on top of a real job and a #honeydew
#adhd #muvco #midi #polysynth #synthdiy #geometricalgebra #ants #DawnOfEverything #honeydew
#muvco is tuned. already had a #raspberrypi with a #python #midi to cv converter I wrote/built so hooked it up for a listen.
Next hardware step: A second voice on the same #esp32
Next software step: Reading midi file to play existing multi-part music.
#muvco #raspberrypi #python #midi #esp32 #synthdiy #micropython
#muvco #eurorack #synthdiy update. Clamped the input with some zeners and tweaked the output stage to max at a safe 5Vpp.
Then tuning.
As close as scope shows, the V/octave is accurate over -5 to +4V. The very top end has a problem probably related to poor #esp32 ADC. Maybe rescale to avoid?
I can cleanly set the base freq across 12 octaves. For LFO use, this goes from ~1/4Hz to ~1.5kHz.
Pretty good. Maybe next pipe it through the rest of the (n00b-level) rack and listen.
#muvco #eurorack #synthdiy #esp32
#muvco #eurorack #synthdiy module. Clamped the input with some zeners and tweaked the output stage to max at a safe 5Vpp.
Then tuning.
As close as scope shows, the V/octave input is accurate over -5 to +4+V. The very top end has a problem probably related to poor #esp32 ADC. Maybe rescale to avoid?
I can cleanly set the base freq across 12 octaves. For LFO use, this goes from ~1/4Hz to ~1.5kHz.
Pretty good. Maybe next pipe it through the rest of the (n00b-level) rack and listen.
#muvco #eurorack #synthdiy #esp32
Fixed ramping on #synthdiy #microcontroller #micropython (#python) #muvco by eliminating high-pass input on CV. Had a mess on the front end and now have a theoretically correct and practically simple setup
Now to fix #ad9833 output--still a mess of ideas. One problem is it outputs <1V for sine and triangle but 5V for square. Fortunately you can't really clip a square, so I can slam everything to 12V and then scale down
One opamp to scale and bias, another to reinvert and unslam...?
#synthdiy #microcontroller #micropython #python #muvco #ad9833