Show more

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!

I finished the serial port management, as far as reconnection is concerned. This makes debugging and restarting the audio device much simpler. I also verified the distortion effects' gain setting and adding the module to the effects chain. Good session.

Getting into packets agains this afternoon, finding a way to embedded module type, command type, command end/begin, etc. At the moment, I am getting a gain value across, encoded as uint32, which takes some work. I will have to work on the decode on the STM32 side, as well.

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!

I had to work with the data structures and serial interface a little more, and mainly to ensure that the QT framework's primary serial library would work ok. Everything looks good and I think I can start planning / implementing the settings data structures.

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.

A bit of work today to integrate the QT application with the USB audio device. I also worked on module process / type setting, and adding. I can now add a reverb module on the QT application graph and have the effect added to the USB audio device's "effects array". More to come....👍

It's nice to be creating stuff again! The day job is fine, but there is not much room to reinvent the "framework" at the moment. So, here I am in C, inventing a way to pass along settings from the Qt app to this effects box.

Ha - well, that went well! It looks like alien wah works very reasonably within the STM32 realm! A couple of videos here!

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..

First bit of DSP in effect! This is a simple notch filter to get things going. It works well, except that I need to get rid of any blips between switching filters/effects on and off.

Yeah, now I have the serial ack/nack verified and working. The initial setup doesn’t quite work the way it should, but I can look into that part later. I did manage to test the audio working alongside transmit/receive, and it seems pretty decent.

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.

A little more progress on building the USB stack, after getting a rough composite and then audio stack going. The USB descriptor is the tricky part.

Part of the audio out / serial interface completed today! I had an issue where the firmware would freeze, but I found that it was simply device config pin conflicts. Once I removed the unused devices from the "main" function, all was good. On the to-do list is to set up the Mac oscilloscope....

Starting on the integration of the composite USB project with the microphone USB project. I worked through one problem this morning, and I want to complete the integration today and then move on.

Show more
Librem Social

Librem Social is an opt-in public network. Messages are shared under Creative Commons BY-SA 4.0 license terms. Policy.

Stay safe. Please abide by our code of conduct.

(Source code)

image/svg+xml Librem Chat image/svg+xml