INTERACT FORUM

Please login or register.

Login with username, password and session length
Advanced search  
Pages: [1]   Go Down

Author Topic: Gain and level structure of JRiver  (Read 5017 times)

pschelbert

  • Galactic Citizen
  • ****
  • Posts: 459
Gain and level structure of JRiver
« on: November 29, 2015, 05:10:02 pm »

Hi

I have some strange issue with convolution inside JRiver with volume and levels.
I am wondering how the gain structure is inside and how the DSP-chain is working on that.
Also where the volumes, the 4 different ways are working?
1) application volume
2) internal
3) system volume
4) disabled volume: this one is the only one which is clear, so just no volume adjust.

I there an automated inside ajustement of the gain?

Logged

mattkhan

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 3981
Re: Gain and level structure of JRiver
« Reply #1 on: November 30, 2015, 02:33:21 am »

Have you read https://wiki.jriver.com/index.php/Volume ? It looks accurate I think.

The "normalise" check box in the convolution DSP window takes 6dB off. I am not aware of another level adjustment done by jriver exc things you would choose to turn on.

If you post details of your specific problem then it will be easier to comment, it is a bit abstract atm
Logged

pschelbert

  • Galactic Citizen
  • ****
  • Posts: 459
Re: Gain and level structure of JRiver
« Reply #2 on: November 30, 2015, 02:59:03 pm »

Hi

I got what the volumes are, thanks for the tip where to look at.
This means I need only:
-internal volume
and
-disabled volume

I intend to do speaker and room correction with (and use some VST-Plug-in additionally):
-JRiver convolution engine (use internal volume)
-acourateconvolver (se disabled volume)

so far its clear.

Now I noticed the normalized file *.wav (for JRiver) and *.cpv (for acourateconvolver) designed for no clipping push the level down around -10dB.
However I can put a +10dB gain into the filter-files (*.wav) and *.cpv). If I do that, then JRiver sounds not good anymore looks at is does clip. How to see what the In and Out levels are? Sounds not like clipping, more art of slighly dull sound.
If I do the same with acourateconvolver, it occasionnally clips as seen in the acourateconvolver monitor, sound is still crisp and clear.

I am wondering how the gain structure works. If you have 64bit floating point it would make no difference even 40 dB gain or 40 dB attenuation.
If you have fixed integer 64bit, it matters very much what gains you have in your chain, better you go to the max, i.e. 0dBfs at each stage.

Lets say you push with one equalizer +20dB, then attenuate with the second equalizer -20dB, Adam Riese says you have 0dB gain. What says JRiver: you get clipping and have 20dB more noise probably?
Probably it matters how to distribute the gain, and probably its good to be at the highest possible level just before clipping.
Now to see the levels in JRiver may be not simple. A way may be to use a VST-Plug in and just do a wire (in-to-out). this can be monitored. However, only at one point in the DSP-chain.

Now with a signal-flow diagram including the gain structure you see this immediately, no guessing and endless trials.
Important also where the "internal volume" or "disabled volume" kicks in in that diagram.

I can monitor the software output and the hardware output to any level of detail I need (RME Fireface UFX).

Logged

mattkhan

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 3981
Re: Gain and level structure of JRiver
« Reply #3 on: November 30, 2015, 03:12:02 pm »

do you mean you do the following?

go into acourate
load your filter(s)
TD-Functions/Gain and apply +10dB
save your new filters (with the gain added)
load into jriver and play
sound is dull

convert to cpv
play in acourateconvolver
sound is good

?

if so, a few Qs...

are both at maximum volume?
does the filter itself go above 0dB? (and/or impulse peak is >1)

Lets say you push with one equalizer +20dB, then attenuate with the second equalizer -20dB, Adam Riese says you have 0dB gain. What says JRiver: you get clipping and have 20dB more noise probably?
the audio engine is meant to handle this so that any clipping is left to the end of the chain. I think that is confirmed by https://yabb.jriver.com/interact/index.php?topic=69614.0

However there was a bug report, from another acourate user, a while ago that demonstrated that a convolution filter that had impulse peak >1 (IIRC anyway, I don't recall the specifics at this point) was not handled correctly and thus distortion. I don't know whether this is your problem, perhaps you can show your filter?

edit: the thread for that bug report was http://yabb.jriver.com/interact/index.php?topic=93578.msg646661#msg646661

Now to see the levels in JRiver may be not simple. A way may be to use a VST-Plug in and just do a wire (in-to-out). this can be monitored. However, only at one point in the DSP-chain.

Now with a signal-flow diagram including the gain structure you see this immediately, no guessing and endless trials.
would be handy for debugging for sure. The way I do that is to play a sine wave through, loop the output to (e.g.) audacity via your mixer and verify the signal offline. You can then add a dsp block at a time, verifying the signal (clipping, relative change in levels, whatever) as you go. Bit tedious if you had to do this regularly admittedly.
Logged

mojave

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 3732
  • Requires "iTunes or better" so I installed JRiver
Re: Gain and level structure of JRiver
« Reply #4 on: November 30, 2015, 03:28:50 pm »

I am wondering how the gain structure works. If you have 64bit floating point it would make no difference even 40 dB gain or 40 dB attenuation.
If you have fixed integer 64bit, it matters very much what gains you have in your chain, better you go to the max, i.e. 0dBfs at each stage.
JRiver does all internal calculations at 64-bit float. However, the final dB change matters since the output is done at whatever is requested by your DAC. This will usually be either 32-bit or 24-bit integer and JRiver will dither to this level. Consequently, you don't want any gain that will increase the final digital signal over 0 dBFS.

Quote
Lets say you push with one equalizer +20dB, then attenuate with the second equalizer -20dB, Adam Riese says you have 0dB gain. What says JRiver: you get clipping and have 20dB more noise probably?
Probably it matters how to distribute the gain, and probably its good to be at the highest possible level just before clipping.
Now to see the levels in JRiver may be not simple. A way may be to use a VST-Plug in and just do a wire (in-to-out). this can be monitored. However, only at one point in the DSP-chain.
JRiver does all math for volume gain at once so +20 and -20 in any of JRiver's DSP modules and internal volume will result in 0 dB change. There will never be any clipping in the JRiver signal chain until all combination of volume goes over 0 dB.

Quote
Now with a signal-flow diagram including the gain structure you see this immediately, no guessing and endless trials.
Important also where the "internal volume" or "disabled volume" kicks in in that diagram.
You can use Analyzer in DSP Studio or the Voxengo SPAN VST plugin. In DSP Studio you need to click Options at the top right and then check/uncheck "Process independently of internal volume" to see what happens depending on volume level. Analyzer lets you monitor volume of any channel.
Logged

pschelbert

  • Galactic Citizen
  • ****
  • Posts: 459
Re: Gain and level structure of JRiver
« Reply #5 on: November 30, 2015, 03:52:27 pm »

Yes exactly I do that with acourate.
the file 0dB has +0.3, -0.5 Peak in the time domain
The file +10dB has +0.8, -1.4 Peak  in the time domain

So the +10dB filter is going over 1.

As you mentioned it may be a bug which is corrected. I actually use still MC20.00.132 on PC (Win7)
From which version on this is corrected?
I you want the filter to take a look I can email it.

If the internal calculation is 64bit-float, indeed it does not matter. Great. So I have not to worry about it.

do you mean you do the following?

go into acourate
load your filter(s)
TD-Functions/Gain and apply +10dB
save your new filters (with the gain added)
load into jriver and play
sound is dull

convert to cpv
play in acourateconvolver
sound is good

?

if so, a few Qs...

are both at maximum volume?
does the filter itself go above 0dB? (and/or impulse peak is >1)
the audio engine is meant to handle this so that any clipping is left to the end of the chain. I think that is confirmed by https://yabb.jriver.com/interact/index.php?topic=69614.0

However there was a bug report, from another acourate user, a while ago that demonstrated that a convolution filter that had impulse peak >1 (IIRC anyway, I don't recall the specifics at this point) was not handled correctly and thus distortion. I don't know whether this is your problem, perhaps you can show your filter?

edit: the thread for that bug report was http://yabb.jriver.com/interact/index.php?topic=93578.msg646661#msg646661
would be handy for debugging for sure. The way I do that is to play a sine wave through, loop the output to (e.g.) audacity via your mixer and verify the signal offline. You can then add a dsp block at a time, verifying the signal (clipping, relative change in levels, whatever) as you go. Bit tedious if you had to do this regularly admittedly.
Logged

mattkhan

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 3981
Re: Gain and level structure of JRiver
« Reply #6 on: November 30, 2015, 04:17:30 pm »

Yes exactly I do that with acourate.
the file 0dB has +0.3, -0.5 Peak in the time domain
The file +10dB has +0.8, -1.4 Peak  in the time domain

So the +10dB filter is going over 1.

As you mentioned it may be a bug which is corrected. I actually use still MC20.00.132 on PC (Win7)
From which version on this is corrected?
I you want the filter to take a look I can email it.
I don't believe it has been fixed. The workaround is to apply such gain outside the filter, e.g. using a DSP block after the filter. Of course if you exceed 0dBFS then you will clip anyway but I would expect it to behave more like acourateconvolver in that case.

Alternatively, if you need to recover the output lost to the correction, perhaps you can manage that downstream (e.g. pushing the RME to a higher output level and/or changing something in the analogue chain).

Perhaps @Matt/@Hendrik might be interested in a sample filter that shows this problem. I have no insight into their priorities though so no clue if such issues around convolution are likely to receive attention.
Logged

pschelbert

  • Galactic Citizen
  • ****
  • Posts: 459
Re: Gain and level structure of JRiver
« Reply #7 on: November 30, 2015, 04:21:49 pm »

Thanks. The only issue is then the convolution filter-gain not to be over +1,-1 while there is the bug issue. This can be done easily with acourate. Otherwise the gain or volume has no effect on sound as I understand.

Thanks for the tip with the analyzer and the voxengo VST.

JRiver does all internal calculations at 64-bit float. However, the final dB change matters since the output is done at whatever is requested by your DAC. This will usually be either 32-bit or 24-bit integer and JRiver will dither to this level. Consequently, you don't want any gain that will increase the final digital signal over 0 dBFS.
JRiver does all math for volume gain at once so +20 and -20 in any of JRiver's DSP modules and internal volume will result in 0 dB change. There will never be any clipping in the JRiver signal chain until all combination of volume goes over 0 dB.
You can use Analyzer in DSP Studio or the Voxengo SPAN VST plugin. In DSP Studio you need to click Options at the top right and then check/uncheck "Process independently of internal volume" to see what happens depending on volume level. Analyzer lets you monitor volume of any channel.
Logged

pschelbert

  • Galactic Citizen
  • ****
  • Posts: 459
Re: Gain and level structure of JRiver
« Reply #8 on: November 30, 2015, 04:26:30 pm »

I have seen there is an easy way with "Parametric equalizer 2" to add a gain in the DSP Studio. This solves a gain loss.

I don't believe it has been fixed. The workaround is to apply such gain outside the filter, e.g. using a DSP block after the filter. Of course if you exceed 0dBFS then you will clip anyway but I would expect it to behave more like acourateconvolver in that case.

Alternatively, if you need to recover the output lost to the correction, perhaps you can manage that downstream (e.g. pushing the RME to a higher output level and/or changing something in the analogue chain).

Perhaps @Matt/@Hendrik might be interested in a sample filter that shows this problem. I have no insight into their priorities though so no clue if such issues around convolution are likely to receive attention.
Logged

pschelbert

  • Galactic Citizen
  • ****
  • Posts: 459
Re: Gain and level structure of JRiver
« Reply #9 on: December 01, 2015, 07:43:15 am »

I made a simple signal-flow gain and level diagram. Ugly and incomplete I admit, just to illustrate what I understand so far.
Its enough probably for my purpose. I do not use other features like normalization etc. I all switched of.

What I can confirm is, that VST works 32bit or 64bit, if VST works with float I do not know. The range is huge on gain however.
Inside a VST the level can be very high without clipping.

For convolution I use now acourateconvolver. Very high quality sonically and some additional nice features like loudness and ms, flow etc.


Logged
Pages: [1]   Go Up