[linux-audio-dev] Simple Jack mixing problem

florentberthaut at no-log.org florentberthaut at no-log.org
Fri Jan 5 09:21:08 UTC 2007


Hi thanks for answering,

Ok i think i'll leave it to the user, because the goal is to make a simple
sampler with kit/instrument creation and control.


Flo






David Olofson a écrit :
> On Friday 05 January 2007 01:44, florentberthaut at no-log.org wrote:
>> Hi everyone,
>>
>> I'm working on a sampler and i have a really silly problem.
>>
>> I simply want to mix sounds in a stereo buffer within the
>> jack "process" function.
>> So for each frame i sum the samples from each sound but then the
>> values go above 1 and i get clipping.
>> So my first thought was to divide by the number of samples playing,
>> but it ends up with a decrease in volume.
>> I tried to limit the values between -1 and 1 but it 's also
>> clipping -> distortion.
>
> Well, that's what JACK is doing anyway - or there would be wrapping in
> the float -> int conversion, which sounds a lot worse than clipping.
> It's just not possible to represent larger amplitudes than [-1, 1] in
> the integer domain (that is, [-32768, 32767] or whatever, depending
> on resolution), which is what DACs deal with.
>
>> I looked into some sources and it seems i would actually just have
>> to sum the samples.
>
> Yep, that's all there is to it, really - and it's the user's
> responsibility to keep volumes low enough to avoid driving the output
> into clipping.
>
> This is true on hardware synths and samplers too. The only reason some
> of them appears not to have this problem is that they use various
> tricks to hide it.
>
> For example, the old Roland JV-1080 had 18 bit DACs, where the two
> extra bits were pretty much used for extra headroom above
> the "normal" max amplitude of a single voice. Even so, it was pretty
> easy to drive it into clipping by using resonant filters and/or lots
> of loud voices.
>
> I wouldn't be surprised if some synths and samplers use 20 och 24 bit
> DACs for even more headroom, waveshaping to make the last 12 dB or so
> non-linear (soft saturation, sort of), dynamic output gain control
> and stuff like that.
>
> Now, if you're dealing in digital, extra DAC bits and dynamic output
> gain control is out, obviously. (Goes for plugins and JACK clients as
> well as hardware devices with digital outputs.) So, either you set
> your sampler's 0 dB level at -12 dB or something (allows mixing four
> maximized samples at maximum volume without clipping), or you leave
> that to the user.
>
> If you really want to make the impression sqeezing in more than
> there's room for, you'll have to add some dynamics processing. There
> is of course no way of doing this without some sort of distortion,
> but even a simple waveshaper to "flatten out" peaks above 12 dB below
> clipping sounds a great deal better than hard clipping.
>
> However, I'd rather see that kind of stuff left to the user. Those of
> us who use 20+ bit sound cards would rather have it all linear and
> undistorted right into the amplifier. There is always the option of
> inserting some serious multiband compressor last thing in the JACK
> chain. Might actually be a good idea anyway, if you like playing loud
> and don't want to ruin your ears if some synth or effect freaks out.
>
>
> //David Olofson - Programmer, Composer, Open Source Advocate
>
> .-------  http://olofson.net - Games, SDL examples  -------.
> |        http://zeespace.net - 2.5D rendering engine       |
> |       http://audiality.org - Music/audio engine          |
> |     http://eel.olofson.net - Real time scripting         |
> '--  http://www.reologica.se - Rheology instrumentation  --'
>





More information about the Linux-audio-dev mailing list