• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

Introducing DSPi | A powerful, user friendly and open source DSP for less than a cup of coffee

Not even back to the host via current USB connection? So audio data would go both ways?
Four audio channels in every direction (to the same host) would be perfect for my use case.
Remember we're stuck with 12Mbps 'Full speed' with this hardware. That limits the possible combinations of channel count, sample rate and bit depth that are possible.
 
It operates in the opposite direction to that of a standard compressor. Rather than attenuating content above the threshold and applying makeup gain against a limiter, it amplifies content below the threshold and leaves content above it untouched.

In this case, the limiter is present only to ensure that content just below the threshold is never amplified above 0dB and doesn’t interact with audio that was originally above that level.

Amount controls both the ratio and the intensity multiplier of the module’s output. Max Gain is the maximum amount of amplification that the module will perform under any circumstances. Gate Threshold defines the quietest content that will be amplified, effectively giving the user the ability to reject some of the noise floor if desired. Gate operates against a second internal upward compression threshold which sits at -20dBFS.
Thanks, yes, I read the intention behind it, probably very useful for content with fluctuating volume or for late-night listening. The compressor/limiter issue is still a possibility, is it on the to-do list?
 
it will eventually support 8-channel input from the host
Hi Troy - Happy Easter, or happy festival of chocolate if you prefer! :)

I have a technical question for you - what are the restrictions on pinouts for the I2S outputs? The reason i ask is that it would make physical routing on a PCB much easier if you could assign one bitclock output per data output so you can avoid crossing tracks with vias. The LR clock is slow enough that splitting and routing it via vias it shouldn't cause a problem and I am assuming that the MCLK output is not used. Having read the I2S standard I was a bit surprised to find that the MCLK signal is not specified and is optional!

No hurry with the answer, hope you have a good weekend.
 
Hi Troy - Happy Easter, or happy festival of chocolate if you prefer! :)

I have a technical question for you - what are the restrictions on pinouts for the I2S outputs? The reason i ask is that it would make physical routing on a PCB much easier if you could assign one bitclock output per data output so you can avoid crossing tracks with vias. The LR clock is slow enough that splitting and routing it via vias it shouldn't cause a problem and I am assuming that the MCLK output is not used. Having read the I2S standard I was a bit surprised to find that the MCLK signal is not specified and is optional!

No hurry with the answer, hope you have a good weekend.
Hello, Happy Easter and thank you very much for the Ko-Fi contribution! I'll be making use of that to purchase some I2S DAC boards for testing. :)

There are no inherent restrictions on the I2S pin assignments. By default, each I2S state machine outputs clocks in addition to data (inhibited for the current implementation), so it would simply be a matter of wiring those parameters to vendor commands.
 
Remember we're stuck with 12Mbps 'Full speed' with this hardware. That limits the possible combinations of channel count, sample rate and bit depth that are possible.
Exactly why, for say a 12- channel set up, I want to use multiple DSPi as nodes, each handling say 3- or 4-way crossovers on one input channel, or both sides of a L/R pair...
 
I have ordered a set of six PCM5102A modules, which should be very helpful for comprehensive testing until I have time to design the custom DSPi prototype board with TAC5212s. This is the direct result of users' contributions to the project, so thanks again everybody.

1775419113110.png


Exactly why, for say a 12- channel set up, I want to use multiple DSPi as nodes, each handling say 3- or 4-way crossovers on one input channel, or both sides of a L/R pair...
16-channel output is possible on the RP2350, incidentally. I will be experimenting with this shortly.
 
until I have time to design the custom DSPi prototype board with TAC5212s.
A few years ago, I was very interested in FDA (full digital amplifier) chips, including those in the TAS family (from Texas Instruments). I'm used to their documentation, but this time, with the TAC5212 documentation, I get the feeling they're deliberately muddying the waters! There's so much information that it's easy to get lost...
 
16-channel output is possible on the RP2350, incidentally. I will be experimenting with this shortly.
But only from a single stereo input, right?

Also, I was a bit harsh with "john61c" recently (not really intentionally)... But if you can output 16 channels from a stereo input, he can either put his rather peculiar preamp (Schiit SYN) away or sell it. Because simulating 5.1 from a stereo source shouldn't be too complicated, digitally speaking, no !?
 
Last edited:
But only from a single stereo input, right?
Not necessarily. This functionality is more of a long term plan but each I2S state machine can run in full duplex mode, providing as many inputs as outputs. Likewise, USB input is expandable to 4,6 or 8 channels. Such a large number of channels will either dynamically reduce the per-channel maximum delay or necessitate some PSRAM on the custom board.

The current architecture assumes a single stereo input but once the bulk of the roadmap has been achieved over the next couple of months, there will be a refactor to modularize the input path. As it stands, I have written a working ADAT input module but there's not a straightforward way to wire it in yet.
 
I have written a working ADAT input module but there's not a straightforward way to wire it in yet.
Yes, I'm aware of that! And it's absolutely brilliant, especially for studio use (but I see the potential opportunities for other applications).
Not necessarily. This functionality is more of a long term plan but each I2S state machine can run in full duplex mode, providing as many inputs as outputs. Likewise, USB input is expandable to 4,6 or 8 channels. Such a large number of channels will either dynamically reduce the per-channel maximum delay or necessitate some PSRAM on the custom board.
I understand, it's technically feasible but with certain limitations.

I mentioned "john61c's" case earlier because his preamp is quite interesting. Although analog, it simulates 5.1 from stereo inputs. From what I understand, he also wants to filter active speakers...

In short, 16 output channels (filterable? with EQ and crossover???) would be absolutely insane.
 
Only one USB input is possible but it will eventually support 8-channel input from the host. USB output from DSPi is not possible. I2S, SPDIF and ADAT input are all planned, though. :)


Loudness compensation is currently controlled exclusively via the USB host volume control. It is unaffected by DSPi's input channel preamp or output channel gain controls. This will soon be configurable, as external control is being implemented.

It doesn't perform any kind of level detection, as this would not produce accurate compensation.
Does this mean that as the host volume is increased, the loudness compensation is reduced? If yes, then at host volume = max then loudness comp = 0?
 
Well, in any case, the best thing to do is wait and see what Troy will come up with next.

At the same time, I wonder if he's taking on a bit too much. Besides, I'm not sure he even considered so many possibilities at the start... right? You'll have to tell us, Troy.
 
Does this mean that as the host volume is increased, the loudness compensation is reduced? If yes, then at host volume = max then loudness comp = 0?
I'm not entirely sure about that, but it seems to me that any dynamic range compensation must occur within a limited input volume range. If the input is 0dB (100%), then nothing is possible unless the volume is adjustable via the DSPI... I admit I'm also having a little trouble understanding this as long as there's no independent volume control at the DSPI level...
 
Yes, I'm aware of that! And it's absolutely brilliant, especially for studio use (but I see the potential opportunities for other applications).

I understand, it's technically feasible but with certain limitations.

I mentioned "john61c's" case earlier because his preamp is quite interesting. Although analog, it simulates 5.1 from stereo inputs. From what I understand, he also wants to filter active speakers...

In short, 16 output channels (filterable? with EQ and crossover???) would be absolutely insane.
Upmixing (initially three channel stereo but eventually N channel) is another planned function that will be fairly straightforward to implement.

The 16 output channels would have all of the same DSP available as our current 8 output channels.

One important change that I mentioned at the release of v1.1.3 but perhaps did not sufficiently emphasize is the migration of the DSP engine from USB IRQ context to the main loop. This has effectively tripled the number of DSP cycles available, as we now have 4ms of processing time available between packet transmission rather than the 1ms limit imposed when the DSP was being called between USB packets.

Does this mean that as the host volume is increased, the loudness compensation is reduced? If yes, then at host volume = max then loudness comp = 0?
That is correct. At full host volume, there is no loudness compensation. This is expected behavior, as accurate Fletcher-Munson loudness compensation requires the user to specify a reference SPL via the corresponding Console window. Otherwise the computed compensation would not be valid.

I'm not entirely sure about that, but it seems to me that any dynamic range compensation must occur within a limited input volume range. If the input is 0dB (100%), then nothing is possible unless the volume is adjustable via the DSPI... I admit I'm also having a little trouble understanding this as long as there's no independent volume control at the DSPI level...
It's important to understand that the host-side USB volume control setting is not a host-side digital gain control. No matter the level that you set, the USB audio output is always full scale. What it actually does is drive a float variable in DSPi that controls a multiplier for all output channel gains. That float variable simultaneously selects between numerous responses in the loudness compensation lookup table.

Well, in any case, the best thing to do is wait and see what Troy will come up with next.

At the same time, I wonder if he's taking on a bit too much. Besides, I'm not sure he even considered so many possibilities at the start... right? You'll have to tell us, Troy.
From the moment that I became aware of the existence of the RP2040/RP2350 and learned of their PIO capabilities, thousands of possibilities sprang to mind. The current DSPi roadmap (and little additions along the way) is my attempt to produce a somewhat sane distillation of those possibilities. :D

I can not overstate just how invaluable Opus 4.6 and Codex 5.3 have been not only to this project but to half a dozen unrelated and semi-related others that I have been developing in parallel. For a lone indie developer, this type of work within these timeframes would previously have been utterly impossible alongside my full time occupation.
 
At full host volume, there is no loudness compensation. This is expected behavior, as accurate Fletcher-Munson loudness compensation requires the user to specify a reference SPL via the corresponding Console window. Otherwise the computed compensation would not be valid.
So the user can actually calibrate and set the highest-level zero-compensation point, lower than full host volume?
 
So the user can actually calibrate and set the highest-level zero-compensation point, lower than full host volume?
Not exactly (yet). Take a look at the loudness compensation controls below and see the effect of different settings upon the compensation curve chart.

1775428520921.png
1775428547397.png

The reference SPL determines the amount of compensation per decibel of host volume reduction, as the Fletcher-Munson equal loudness contour is SPL dependent.

1775428781682.png


Adjusting the input preamp control effectively accomplishes what you have asked but there will soon be a "Master Volume" control that serves to scale the maximum device volume and would more elegantly do what you need.
 
It's important to understand that the host-side USB volume control setting is not a host-side digital gain control. No matter the level that you set, the USB audio output is always full scale. What it actually does is drive a float variable in DSPi that controls a multiplier for all output channel gains. That float variable simultaneously selects between numerous responses in the loudness compensation lookup table.
That's something I'm having trouble picturing here.
Basically, with the DSPs I'm used to (personally, two different mini-DSPs, but also a Behringer and a friend's Hypex), it's always the same: independent volume control at the DSP level allows for compression, loudness, or whatever else I don't use. In other words, whatever the input volume level, everything is still possible at the DSP level because it has its own volume control. What you call "preamp" (and which we - myself and some others - interpreted as volume control at the DSP level) is perhaps similar here to what we were used to experiencing... Basically, the independent volume at the DSP level allows lowering the "level" of the source volume without altering the signal (on the minidps the range is 0 to -128 dB...) but in order to be able to apply various and varied effects that are beyond me, except for the limiter/carrier/compressor for a tweeter, but above all to protect any output speakers that might be powered by dacs and amps without volume control).
When you talk about "digital gain control" it bothers me... And when you say, "No matter the level that you set, the USB audio output is always full scale," that confuses me even more. Because that's not at all (or at least not how I perceive it) how my DSPs work... Regarding your story about special compression imitating "Magic Boost", no problem, but for the rest it leaves me doubtful (only because I need more clarification).
 
there will soon be a "Master Volume" control that serves to scale the maximum device volume and would more elegantly do what you need.
I would think it would be possible to have a "calibration setpoint" set by the user at which the F-M comp is zero

And the DSPi can DETECT the volume/gain level relative to that setpoint, no matter where that level is controlled, so long of course as that control is somewhere upstream.

Is there something I'm ignorant of, that makes that difficult?
 
Back
Top Bottom