In working with the current platform tonight, I found that the USB audio interface is a limiting factor for signal processing - on the same processor. The buffer size is set at 48 bytes, due to the sample rate of USB FS and the audio sample rate. This is great for the USB audio interface, as the fairly latency is low, but between this and the short cycles between ADC transfers, effects processing is not ideal. So, the way forward now is...back to Linux, mostly.
Well, this is how development should/can run - start over early enough to not get into a bind. So, I have decided to take a sledge hammer to my current "issues" in using the STM32F407VG as the basis for a "simple" audio effects USB device. With this, I am seeing why these devices run up in cost. Getting to the crux of my issue(s): I can either upgrade the STM32 and still sacrifice a few features...or jump to an old reliable...the IMX6 running Linux!
Distortion! Learning a bit more about creating distortion with simple DSP routines. I have been wrestling with an issue where too few samples (as in none) were being skipped to compute whatever it takes to provide sine/cosine/modulo, etc. Other DSP algorithms I had used in AnaddrSynth - running on the iPad - even had some skips. So, this was a great lesson!
So, I got into making up a very, very simple module - a saturation module - requiring one parameter. However, the thought occurred to me that I really need a packetization system in order to differentiate between modules and which ones need what settings, etc. So, this afternoon has been dedicated to that - which is still fun! I love it when I can take IEEE standards and use those to get things done.
A nice stint today as I made the initial audio chain and update to the effects box work. There is no audio, yet, but I could probably try some of that soon. The QT app can now create an audio effects pipeline, basically, in the effects box. The plus side is that the Mac can be used to create and control the audio effects pipeline. The downside is that only the Mac and a connection to effects box lets everything work. More work to do!
As it turns out, the Qt app did not have a bad start on organizing the modules. There are two lists to go by, and it takes a cross reference to obtain both the order of modules and module type. I'll have to optimize this a bit soon; but, for now, I have a workable solution to returning the correct device manifest for the effects box.
This is a big test of the platform, I guess. I am attempting to port an effect from the iPad/iOS synth I released in 2014 and 2019. It's called "alien wah" and it was a hit with users on the App Store. I have around 512Kbytes of memory to work with, so I think the effect can fit in an effects chain. I may have to limit the number of instances - but it may only make sense to use it once in a chain, anyway. This gets tricky if the platform goes stereo, and a memory expansion is needed..
Well, I completely cracked the composite USB driver deal! I now have a serial USB interface transmitting/receiving while an audio interface works as an audio input to macOS / Logic. Very happy, indeed! There's a little work to be done on the packet code/decode, but not much, really. This opens up the ability to configure/reconfigure DSP modules on the fly which is insanely cool. You might say I on the way to creating a software-defined DSP system.
Well, I have this much figured out, with some still to go. I have managed to place the audio portion of the USB driver, successfully, underneath an overriding composite USB class. Logic Pro appears to even register the audio in as a live signal, which is a great sign! More to come.....combining this with the CDC part.
Born: Radford, Va. USA 1973
Lives in Charlotte, NC
Occupation: Software Engineer
#nobot