Thanks for the elaborate answer.

I know that some apps (e.g. pedalboard) implement such a feature but it seems that you are referring to a global param?

If that’s the case, where can it be found ?

sorry, i guess i just meant that it is possible (and very easy) in the abstract to add digital gain at the system level.

i didn’t remember whether the system input level parameter went to 0db or higher. it does in fact max out at 0db. this can easily be modified by changing these lines, in ~/norns/lua/core/mix.lua:

the ADC and DAC levels presently use the same parameter scale. it might be a good idea overall to use a different scale for ADC level, allowing more gain by default.

if you want to try this out, replace those lines with something like this:

local cs_MAIN_LEVEL = cs.new(-math.huge,0,'db',0,0,"dB")
local cs_INPUT_LEVEL = cs.new(-math.huge,12,'db',0,0,"dB")
mix:add_control("output", "output", cs_MAIN_LEVEL)
mix:set_action("output",
  function(x) audio.level_dac(util.dbamp(x)) end)
mix:add_control("input", "input", cs_INPUT_LEVEL)
mix:set_action("input",
  function(x) audio.level_adc(util.dbamp(x)) end)

the “12” in the second line will give you +12db gain on the input.

if this seems like a good idea we can change it upstream. but i’d want opinions from @tehn and others.

4 Likes

while we’re at it there’s probably not a huge reason not to provide more output gain as well?

mostly the upper limits were convenient to prevent presumed clipping.

we’d still want clear graphic demarcation on the levels screen to show where unity gain lives

8 Likes

this would be v helpful especially for shield + headphones

2 Likes

are you talking about a situation where the maximum output level of the shield is not sufficiently loud in headphones? raising the limit of output level digitally will not help with that, it will just clip more.

(e.g., we already have compressor post-gain, which you can use as a final boost - up to +60db! you can even do this with no compression by minimizing ratio or maximizing threshold.)

i’d acquire or construct a little headphone preamp. i have a non-name rechargeable one that cost $25 and sounds pretty good. (i use it with norns shield.) i think it’s based on one of these cheap TI parts like TPA6138A2.

but no, i don’t think there’s a reason not to provide more output gain, as long as it’s easy to dial in 0db.

i wonder if it makes sense to apply higher dB limit to all mix paths to maintain consistency. on the other hand its kinda good to just be able to spin the encoder and know that it will end on a neutral setting.

also, just bear in mind that these limits only apply to the controls on the mix page. in the lua API, you can apply as much gain as you want (or apply negative gain to invert the signal.)

I’m occasionally loading quiet-ish samples and the script doesn’t always get me to unity gain w/ those - compressor post gain is a good tip though !

1 Like

how about an option to normalize when reading a file to a softcut buffer? (i mean… if you don’t want to just run sox on your samples…)

4 Likes

now THAT is a better idea

I’ll play with this value, thanks.

Yes, akin to what compact cameras display for optical VS digital zoom.

1 Like

as you mention, digital gain will not make headphones louder without clipping.

and normalizing tape files makes sense.

but i mentioned extra digital gain more just as general symmetry for gain flexibility within the chain. for example, i can imagine live-sampling some small loop into softcut, and then focusing in on some quiet tail of that recording, and then wanting to amp/emphasize this moment— yes, i could specifically go to softcut gain (which is also capped at 0db as it happens) but say this similar occurrence happened with a quiet moment in an engine— i’d separately need to reach for the engine gain. my suggestion was just that perhaps it’s interesting/enabling to just revisit the gain params everywhere and provide +12db capability and trust the the user knows what they’re doing.

1 Like

Maybe non-realtime ops for applying gain or normalizing a region are a good way to accomplish this goal in particular. You can get up to +6dB at a time using
softcut.buffer_copy_region_mono(1, 1, start, start, dur, 0, preserve) – copy the region onto itself with preserve determining how much of the original content is mixed in – and you can attenuate a region using the new preserve argument to buffer_clear_region_channel.

3 Likes

yeah i was actually thinking a separate operation for normalize / gain would be more flexible / clean.

There is only one NRT buffer work thread and an ordered queue for jobs. So it should work fine to request a read to region, and immediately follow with a request to gain / normalize same region.

So it’s sounding like adding, say, 12db to all paths would be good? Including monitor? Including softcut input? Output? Matrix?

I’ve noticed that my shield sometimes has SuperCollider Fail on start up. Restarting (either with sleep > power cycle, or using ;restart in maiden) seems to load it properly. Should I try to reinstall everything?

where is the shield from? has it always been that way?

i got it second hand from someone here on lines, prebuilt & already set up by the time it got to me. it’s happened as long as i’ve had it but it’s pretty infrequent and easy enough to restart.

do you know if it was hand-soldered or the PCB came from monome assembled?

definitely try flashing the sd card as a first step.

2 Likes

i unfortunately don’t know. i guess i could ask the person i got it from. i’ll try and flash the sd card. thanks!

1 Like

Does anybody around Europe have a spare CS4270? Seems like it’s going to stay out of stock at Mouser / Digikey for the next few months :pensive:

Try

Or

Seems like Avnet is business only. However I did not know you could order as a private customer from rs-online, thanks!

1 Like