INTERACT FORUM

Devices => Sound Cards, DAC's, Receivers, Speakers, and Headphones => Topic started by: bobkatz on January 01, 2013, 11:52:05 am

Title: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 01, 2013, 11:52:05 am
I'm completely new to JRiver and have not yet bought the system, but I'm considering purchasing it primarily to implement digital EQ from AudioLens. The media center features (such as blu-ray playback) are secondary in importance to me.

I am an audio mastering engineer and I create and master high sample rate and high resolution material. I recognize the importance of dithering when doing any processing in, for example, my 32-bit float DAW. There is a meaningful audible improvement (albeit subtle) when I use 24-bit dither on the output of my DAW, which is available in a preference. I want to be able to hear the full resolution of my source material.

As a 64-bit engine, JRiver should not simply trucate to 24-bit on its way to a 24-bit DAC, for example. So, let's ask, does JRiver perform any dithering? Obviously you would want to turn dithering off when outputting Dolby Digital (for example) to an external decoder because the system must be bit-transparent in that case. So dithering needs to be an option, if possible, automatically switched off when playing coded material.

But for best sonic performance with the most depth and dimension, your playback system should dither to 24-bits, not simply truncate, on its output to a DAC or to an AES/EBU or SPDIF output. Is dithering built-into JRiver? If not, it should be! Is there a "last place" in the ASIO chain that I can insert a dithering plugin (independent on each channel) after all your processing, crossover, loudness, EQ and other processing?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 02, 2013, 11:37:46 am
Welcome Bob.  I just sent you an email, so please check your mail.

I'll reply to this here in a little bit.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 02, 2013, 11:51:23 am
As a 64-bit engine, JRiver should not simply trucate to 24-bit on its way to a 24-bit DAC, for example. So, let's ask, does JRiver perform any dithering?

If you look in DSP Studio > Output Format > Bitdepth, you'll see that we offer dithering at 16-bit and 8-bit.

Currently we do not offer dithering at 24-bit.  I've read discussions on both sides of this issue, and don't feel strongly about it.  I do know that even with good equipment, it's hard for me to hear the shape of even the 15th or 16th bit: http://yabb.jriver.com/interact/index.php?topic=74999.0.

I should add that if you use ASIO output, ASIO itself specifies the delivered bitdepth.  Most hardware requests 24-bit, but some uses 32-bit, etc.  You can see what your hardware uses in Audio Path:
http://wiki.jriver.com/index.php/Audio_Path

Thoughts?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on January 02, 2013, 12:28:12 pm
Hi Bob, welcome to Interact. I received the Master Handbook of Acoustics for Christmas and your Mastering Audio book is next on my list. I see that in your book you have measurements that show the difference between dither and truncation. Perhaps these would help the discussion.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: hulkss on January 02, 2013, 12:48:47 pm
Hi Bob, welcome to Interact. I received the Master Handbook of Acoustics for Christmas and your Mastering Audio book is next on my list. I see that in your book you have measurements that show the difference between dither and truncation. Perhaps these would help the discussion.

If you want to measure these kind of effects with your computer, see my post here:
http://yabb.jriver.com/interact/index.php?topic=76525.0 (http://yabb.jriver.com/interact/index.php?topic=76525.0)
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on January 02, 2013, 01:26:38 pm
If you want to measure these kind of effects with your computer, see my post here:
http://yabb.jriver.com/interact/index.php?topic=76525.0 (http://yabb.jriver.com/interact/index.php?topic=76525.0)
But if you can't choose between dither or truncate with JRiver, then you can't measure the difference.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 03, 2013, 11:09:33 am
I won't say I am an absolute expert on dithering, but I am known as an "authority". Clearly, the longer the wordlength is that you truncate to, the less the potential difference between dithering and truncation. For example, the processing in Pro Tools HD is 48 bits fixed point. This can be either dithered to 24 bits using one mixing module or truncated to 24 bits using another. The sonic differences between the two are very subtle, but the dithered mixer wins. There are some crazies out there who prefer the truncated mixer, I say, just as a disclaimer.

Also, keep in mind that the noise of dither is usually inaudible, but the artifacts of not dithering (distortion, loss of depth, loss of soundstage and loss of warmth) are audible. It's also a matter of ear-training. Most people are first trained to recognize timbre, but soundstage depth and dimension, far more subtle quantitles, are what are lost first when truncation is performed instead of dithering.

Next, keep in mind that it doesn't matter if it's a 64-bit engine or a 24-bit engine if it isn't doing any calculation, that is, if there are no filters, EQ, convolution or volume control in the chain. It will take in up to 24-bit information and put it out. But if there is calculation, then all the low-level information in the source is EXPANDED downward into the low level bits of the resulting wordlength, with each little bit being 6 dB less significant. At some point, truncation versus dithering becomes an inaudible difference. But as long as JRiver has a 64-bit engine, then why not generate 64-bits worth of dither information with the amplitude set to 24-bit, and truncate at 24 and not worry where it's safe to cut off.

Hey, wait a minute? Did you know that all current Lame and Fraunhofer and Apple AAC and MP3 decoders run internally at 32-bit floating point? In fact, if you take a "16-bit" source AAC file and reproduce it through the AAC decoder, it produces a 32-bit float output word! If it was a very good encoding, you will lose audible depth if you reproduce it at 16-bit because more than 16-bits come out of the decoder. The output of an AAC decoder should therefore be dithered down from 32-bit float to 24-bits for best reproduction. Almost NO ONE does that, but they should, and I've heard the audible difference when I play AAC in an engine that permits that. I can only do this to a limited extent when I'm doing some test encoding in OSX, I'm not sure how to handle this on the PC, but I'll bet Matt has an inkling. Anyway, in the case of JRiver, I don't know how they handle floating point, perhaps they just take the information from the decoder and turn it into fixed point, but at the least you should take 24-bit fixed from the decoder, and preferably, work in floating point until the end, when you should dither from 64-bits down to 24 for reproduction. Even a so-called "bit-transparent volume control" can't defy the laws of physics and mathematics. When it's a 0 dB it can be EXACTLY bit-transparent, and that does test the accuracy of the code. But, for example, when taking a 16-bit source and attenuating it 1 dB, the output of the volume control will be, potentially, as much as 64-bit, the length of his calculation engine. But certainly the math error truncating at such a long wordlength will be very small. At that point it must be dithered down. Then I would call it a "high resolution volume control" rather than "bit transparent" and it would more accurately reflect what is really going on. And that's what we want anyway, since bit-transparency is not technically possible if any multiplication takes place, it's against the laws of math.

Can we hear truncation at 24 bits (versus dithering)? I can --- on a good day I can pass a blind test on it, with the right musical material. Is it a hard test to pass? YES IT IS! It is the hardest and probably one of the most subtle differences that you will ever be asked to hear or judge. Does this mean that it's insignificant? I like to think that any sonic difference which some small percentage of the population can hear is significant. At least it should be important to an audio engine as critical and designed for critical listeners as JRiver is. It's not a big deal to take an engine which already properly dithers to 16-bit and extend it to 24-bit, so I think it should be done, and then give the users the opportunity to choose truncation or dithering and decide for themselves. Or, better yet, leave dithering on and just enjoy. You won't hear the noise (24-bit dither is at -141 dBFS RMS!) but you will hear a reduction of artifacts, if your system is good enough to reproduce them.

By the way, is the JRiver dither uncorrelated between channels?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: JimH on January 03, 2013, 11:19:28 am
Bob,
Thanks for your contribution.  Matt needed a hobby.

BTW, we prefer our name to be written as JRiver since it's friendlier to search.

Jim
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 03, 2013, 11:39:37 am
Bob,
Thanks for your contribution.  Matt needed a hobby.

BTW, we prefer our name to be written as JRiver since it's friendlier to search.

Jim

Before Matt goes off hobbying, I'd love to see him implement the 24-bit dither. If he's got the method for 16-bit dither down pat, it should be trivial and he can get back to coding more important things :-).
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 03, 2013, 11:49:47 am
Hey, wait a minute? Did you know that all current Lame and Fraunhofer and Apple AAC and MP3 decoders run internally at 32-bit floating point?

JRiver uses 64-bit for all internal math during MP3 decoding.  A little more here:
http://wiki.jriver.com/index.php/Audio_Bitdepth#Bitdepth_of_Lossy_Formats



Quote
Can we hear truncation at 24 bits (versus dithering)? I can --- on a good day I can pass a blind test on it, with the right musical material. Is it a hard test to pass? YES IT IS! It is the hardest and probably one of the most subtle differences that you will ever be asked to hear or judge. Does this mean that it's insignificant? I like to think that any sonic difference which some small percentage of the population can hear is significant. At least it should be important to an audio engine as critical and designed for critical listeners as JRiver is. It's not a big deal to take an engine which already properly dithers to 16-bit and extend it to 24-bit, so I think it should be done, and then give the users the opportunity to choose truncation or dithering and decide for themselves. Or, better yet, leave dithering on and just enjoy. You won't hear the noise (24-bit dither is at -141 dBFS RMS!) but you will hear a reduction of artifacts, if your system is good enough to reproduce them.

By the way, is the JRiver dither uncorrelated between channels?

The optional 8-bit and 16-bit dither is an uncorrelated TPDF dither.

24-bit uses rounding (not truncation).

I think it would be reasonable to offer TPDF for 24-bit.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: JimH on January 03, 2013, 12:47:34 pm
Link to a related discussion at hometheatershack.com (http://www.hometheatershack.com/forums/rew-forum/64094-psychoacoustically-correct-room-correction-3.html#axzz2GwJkR1uB).  Thanks to Mitchco.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 03, 2013, 02:45:36 pm
Next build:
NEW: Added the output bitdepth '24-bit (with dithering)' to DSP Studio > Output Format.
NEW: Dithering of bitdepth conversion is optional with ASIO in Options > Audio Output mode settings. (dithering has no effect / is bit-perfect until you make signal changes like volume or other DSP).
Changed: The 'Bitdepth simulator' in parametric equalizer exposes optional dithering.


It's possible we could always dither bitdepth down-conversion and not bother to make it optional.  We may end up there someday, but I feel more comfortable with a judicious approach that allows users to opt in for the time being.

It's important to remember that dithering, when done properly, does not change the bit-perfect nature of output.  A 16-bit or 24-bit value remains unchanged when dithering.  Dithering only changes values in between those whole values.  These in between values arise when performing any sort of processing, including volume.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 03, 2013, 03:03:42 pm
This is now public in 18.0.106:
http://yabb.jriver.com/interact/index.php?topic=76981.0
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: gappie on January 03, 2013, 04:17:11 pm
i like the topic.... and how quickly it got added in mc.. gottotest :)
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Dr Tone on January 03, 2013, 06:09:39 pm
i like the topic.... and how quickly it got added in mc.. gottotest :)


It's good to be named Bob Katz.   :o ;D
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: gappie on January 04, 2013, 05:03:40 pm
It's good to be named Bob Katz.   :o ;D
;D i did not get this the first time. but now i realize that i have a book of him here at home. and i even red it. :) interesting stuff.

 :)
gab
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 05, 2013, 11:00:14 am
This is now public in 18.0.106:
http://yabb.jriver.com/interact/index.php?topic=76981.0

This is fantastic! I am honored and pleased as punch! I have the equipment right now (without building an additional dedicated HTPC) to implement JRiver and Audiolens at least as a stereo digital processor to my existing analog-bass-managed full-stereo front pair. As a test to see how it performs without tearing anything down or buying any new hardware! This is exciting. The steps towards moving to a fully-digitally-managed system are clear in my head, and I'll move step by step in that direction!

Reports forthcoming (in my copious free time).


Bob
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Listener on January 05, 2013, 11:22:18 am
Next build:
NEW: Added the output bitdepth '24-bit (with dithering)' to DSP Studio > Output Format.
NEW: Dithering of bitdepth conversion is optional with ASIO in Options > Audio Output mode settings. (dithering has no effect / is bit-perfect until you make signal changes like volume or other DSP).
Changed: The 'Bitdepth simulator' in parametric equalizer exposes optional dithering.


It's possible we could always dither bitdepth down-conversion and not bother to make it optional.  We may end up there someday, but I feel more comfortable with a judicious approach that allows users to opt in for the time being.

It's important to remember that dithering, when done properly, does not change the bit-perfect nature of output.  A 16-bit or 24-bit value remains unchanged when dithering.  Dithering only changes values in between those whole values.  These in between values arise when performing any sort of processing, including volume.

There are two quite different ways of using JRiver with different ways of going from 64 bit fl;oat to 24 bit fixed point being appropriate.

1. If you are doing anything to change the audio stream (DSP, plugin, volume setting), then dither seems appropriate.

2. If you are passing the bits from the music file unchanged ('bit perfect'), then you don't want dither to change any bits.  Even if you are extending 16 bit content to 24 bits with zero insertion, you don't want dither. 

I use JRiver in the 'bit perfect' way and would be happy to see any appropriate choice of 'no dither' available.

Bill
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 05, 2013, 11:31:41 am
2. If you are passing the bits from the music file unchanged ('bit perfect'), then you don't want dither to change any bits.  Even if you are extending 16 bit content to 24 bits with zero insertion, you don't want dither.

Our dither doesn't change how a 16-bit value looks at 24-bit.

From above: "It's important to remember that dithering, when done properly, does not change the bit-perfect nature of output.  A 16-bit or 24-bit value remains unchanged when dithering.  Dithering only changes values in between those whole values.  These in between values arise when performing any sort of processing, including volume."

I did real world testing of billions of random samples up to 32-bit integer output to test that our dither was obeying this rule.  It is.

This means it's technically irrelevant if dither is enabled in your 'bit perfect' case.

But regardless of this, no new dithering has been added to the code unless you explicitly opt-in (either in DSP Studio > Output Format, or ASIO configuration if you use ASIO).
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: dean70 on January 06, 2013, 05:10:42 pm
If you are running ASIO, does it ignore the 24 bit dithering setting in DSP Studio > Output Format?  ?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 06, 2013, 05:57:01 pm
If you are running ASIO, does it ignore the 24 bit dithering setting in DSP Studio > Output Format?  ?

Yes.  See:
http://wiki.jriver.com/index.php/Audio_Bitdepth#ASIO

And this change to dither with ASIO:
NEW: Dithering of bitdepth conversion is optional with ASIO in Options > Audio Output mode settings. (dithering has no effect / is bit-perfect until you make signal changes like volume or other DSP).
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: dean70 on January 06, 2013, 08:01:15 pm
The ASIO control panel also has a dither checkbox, which I have enabled. It also allows a 32 bit option, which the sound card does not support - I have left it at 24 bit for now.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Videophile on January 25, 2013, 09:09:11 am
http://www.users.qwest.net/~volt42/cadenzarecording/DitherExplained.pdf

In case someone is interested in dithering techniques and theory.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 25, 2013, 12:06:41 pm
I just completed some careful measurements of JRiver's dithering with Spectrafoo and this reply will cover everything I found. If you follow the instructions below, you will have 24-bit dither implemented in JRiver!

In my early listening I might have been fooled by the power of suggestion as I thought the dither checkbox in the parametric equalizer was working, but it was not! The bottom line is that even though 24-bit dither is very subtle, it cannot hurt (if done right) and if not implemented it could hurt the sound. So, always dither to 24-bits, do it right, and then forget about it. You should be rewarded with increased depth and purity of tone, but if you don't notice the improvement, just have the confidence that things are being done properly and signals are being cleaned up properly. Like chicken soup, proper dithering at 24-bits does absolutely no harm, it cannot hurt! But it can also do a world of good. Better to be safe than sorry.

Only in the case of bitstreaming to a Dolby or similar decoder could dithering hurt. The decoder won't work! But in that case JRiver could automatically turn off the dithering. It may very well do so, as it also would have to turn off a bunch of DSP plugins and disengage the volume control so I suppose that dithering is probably turned off when bitstreaming as well as all the plugins and the VC. Though I have not tested it.

I also had a short discussion with Matt about this offline (thanks Matt!) and this letter incorporates some of his reactions.

1) The wordlength simulator in the parametric equalizer should ONLY be used for testing and listening to truncation. The dither checkbox in there is misleading and my measurements show that it is not working. Just leave it unchecked, and for that matter do not use the wordlength simulator.

2) The output options wordlength popup menu is a bit deceiving. Although output options is the first apparent plugin in the DSP chain, the output wordlength choice always comes at the end. JRiver always internally calculates at 64-bit float until the end of the chain, where wordlength is (optionally) reduced. The popup help explains this and you have to take it as a matter of faith. I understand why this module comes first because it also adjusts the way that multichannel audio is configured on its way to other stages in the DSP chain. In a perfect world, output options would be split into two plugins, one at the beginning and one at the end of the chain.

3) Do NOT use ASIO. It doesn't dither, because at this time, JRiver always talks to ASIO at 32-bit, and so apparently there is no way to tell JRiver to dither to 24 bits. Tested with Lynx and RME drivers. This confuses me, because my Sequoia DAW and other DAWs have an output wordlength format setting which allows me to talk to ASIO in 24-bits. Perhaps Sequoia puts a 24-bit fixed point word into a 32-bit container but regardless, the 24-bit dithering in Sequoia is working, and to my ears it makes a meaningful audible difference. In JRiver, the WASAPI output options have a checkbox to put a 24-bit word into a 32-bit container, but this doesn't even work in JRiver, it causes an error. At that point JRiver offers to make the change for you (kindly) but then it selects the 24-bit truncated option, and this causes distortion, at least measurable, as you can see in the attached measurement screenshots. So, don't choose this option, and be sure to choose the 24-bit dithered option in the output settings. In ASIO, at some time in the future, perhaps JRiver can offer the same "24-bit in a 32-bit package" option. I haven't yet tried to use WASAPI, it seems that others are quite successful with it, so perhaps it's an academic issue and I'll be quite happy with it. It also properly dithers as you will see below.

4) Matt asked me, "why don't you just use 32-bit feed to the DAC if it can accept it?" My answers are:

a) Better to be safe than sorry. Even in a perfect situation where you can guarantee the 32-bit word is getting to the DAC, can you guarantee that the information is properly sent to the output ladder of the DAC? Well, anyway, most DACs these days are single bit or 2 or 3 bit and I don't fully understand the implications of that conversion, so I could be wrong about it, but my thoughts are that you should dither the input to all DACs regardless to 24 bits to ensure that clean information is brought to within the resolution capabilities of the DAC. Better to be safe than sorry. In my copious free time I would try to obtain a 32-bit DAC chip, measure all the possibilities and distortions at the analog portion, but regardless, it doesn't hurt to play it safe. 24-bit dither can't hurt and it probably will help.

b) The second reason not to use the 32-bit output is that AES/EBU and SPDIF are limited to 24-bits fixed, so that will truncate it right there. Unless you use USB or a PCI bus, you couldn't get 32-bits to the DAC. And even then the drivers truncate. In the Lynx literature they clearly state that 32-bit float words get truncated to 24-bits right at the input of the Lynx mixer. The RME mixer says nothing about it, but it's only 24-bit in and out as I have proved. So once again it pays to have the interface mixer set to 0 dB throughout (which is bit-transparent up to 24 bits) and dither to 24 bit on the way in.

5) Instructions: Use WASAPI! Do not select "Present 24 bit data in a 32-bit package". It doesn't work. You'll get a warning when trying to play. Set the output options to 24-bit dithered.

Attached are the following files:

1) -80 dBFS 1 kHz 3244 sine wave dithered in WASAPI to 24 bits
2) -140 dBFS 1 kHz 3244 sine wave dithered in WASAPI to 24 bits. Notice a couple of small, insignificant harmonically-related products. The quality of JRiver's DSP is superb. This is a tone that is LOWER than you can hear and the products are lower than you can hear or detect, nevertheless, JRiver is still working and cleaning it up, all the way down to infinity. A dithered system works just like analog, no audible distortion as signals are reduced until they disappear into the noise. An undithered system does not.
3) -140 dBFS 1 kHz 3244 sine way truncated to 24 bits (WASAPI chosen 24 bit output, no dither). I could show you far worse, but this is the way it works. Keep in mind that higher signals (say, -50, -60) are subject to the same issues if undithered, and the distortion products are quite audible as they are inharmonic and not masked. Plus, if you consider multiple tones and signals, their distortion products are additive and then the distortion products are further distorted. It becomes a mess, sounds colder and smaller. Yes, at 24-bits it's subtle, but my experience shows it's audible.

Let's see if any of you audiophile listeners out there notice the difference if you use WASAPI and follow these instructions. I'll be listening, too, I just got this function working right according to the measurements. I couldn't have done it without Matt's help or without my measurement equipment to guide the way through all the checkboxes and options.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on January 25, 2013, 12:38:02 pm
The Steinberg (MR816x and UR824) and Echo (AudioFire 8 ) pro devices I have tried only allow up to 5.1 output with WASAPI or WASAPI Event Style. ASIO is required to get 7.1 output.

What does "dither bitdepth conversions" do in the ASIO Output Mode Settings? Is it dithering at 32 bits? My output in JRiver with the MR816x shows "44.1kHz 32bit 8ch using ASIO."

My UR824 has the option to bypass the mixer by using channels 11-18. I wonder if those will show as 24-bit with ASIO output and channels 1-10 show as 32-bit since they are going to the internal mixer before the D/A? I'll have to check it tonight or tomorrow.

Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 25, 2013, 01:41:42 pm
The Steinberg (MR816x and UR824) and Echo (AudioFire 8 ) pro devices I have tried only allow up to 5.1 output with WASAPI or WASAPI Event Style. ASIO is required to get 7.1 output.

What does "dither bitdepth conversions" do in the ASIO Output Mode Settings? Is it dithering at 32 bits? My output in JRiver with the MR816x shows "44.1kHz 32bit 8ch using ASIO."


See my long reply just below yours. It clarifies the meaning of ASIO's current behavior with JRiver and the output wordlength and dithering.

BK
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 25, 2013, 01:47:28 pm
This is part two of my report. Basically: I'm dead in the water when it comes to dithering because although WASAPI works right, it only works for me at all in 2-channel playback, and at 44.1 kHz. It will not play in greater than 2-channel mode or greater than 44.1 kHz for me. Lynx or RME drivers, doesn't matter.

So, we're between the devil and the deep blue sea. Either of the following would solve it:

1) JRiver dithering to 24-bits purposely on the ASIO out, despite the card apparently demanding a 32-bit word. 24-bits dithered in a 32-bit container would still work. Note in my reply below that the Lynx and RME cards truncate to 24 anyway even if they take in a 32-bit word. So it's just a long container for applications that can't send a 24-bit container.

or

2) Find a 24-bit-capable surround dither plugin that works in a 64-bit environment. Waves has one for at least a 32-bit environment, perhaps also for 64 (but I really don't want to spend the money on a package just to get one plugin I want). I already own a Waves package that I occasionally use for processing audio in stereo.

That's it for now. I'm back to non-dithered playback. Maybe if I have time today I'll try to evaluate the sound of the WASAPI dithered versus undithered for simple 2-channel 44.1 k playback.

BK
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 25, 2013, 01:53:04 pm
3) Do NOT use ASIO. It doesn't dither, because at this time, JRiver always talks to ASIO at 32-bit, and so apparently there is no way to tell JRiver to dither to 24 bits.

ASIO is our recommended output when it's available.

Optional dithering of ASIO bitdepth conversions was added to 18.0.106.

The bitdepth used to communicate with ASIO is dictated by the ASIO driver.  We call driver->createBuffers(...).  It creates buffers in one of many ASIOSampleType types.  We must provide data in the format requested.

If the card specifies 32-bit integer, we dither to 32-bit.

If you believe the driver / hardware could do something better with those 32-bits, it would be a discussion for the hardware company.  It's possible their driver converts from 32-bit to 24-bit internally, but then it seems like a driver bug because it should have just requested 24-bit.

I'll send this thread to the head of Lynx and see if he has any thoughts.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on January 25, 2013, 02:06:34 pm
Here is a question/answer on the RME user forum about the same thing:

32 bit STREAM to 24 bit DAC converison inside RME hadrware (http://www.rme-audio.de/forum/viewtopic.php?id=10617)
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 25, 2013, 02:19:24 pm
Does anyone have information about the ASIO call that sets the buffer format the driver will use?

Or does there need to be an ASIO option like "Assume hardware only uses 24-bits"?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on January 25, 2013, 02:21:51 pm
Here is some info from the Lynx Frequency Asked Questions (http://www.lynxstudio.com/support_faq_result.asp?q=154):

Quote
Running an ASIO application and bit-depth says 32-bit in Lynx Mixer despite project bit-depth.

All OS

This is normal. ASIO requires a 32-bit “highway” to be open for the audio device, despite the project resolution. This does not mean that files recorded with a project bit-depth of less than 32 bits will consume the disk space or resources of a 32-bit recording.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on January 25, 2013, 04:11:58 pm
Lynx later changed their mixer to just say "ASIO" as the bit-depth instead of "32-bit." It illustrates the issue of giving the end user too much information.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 25, 2013, 04:48:28 pm
Does anyone have information about the ASIO call that sets the buffer format the driver will use?

Or does there need to be an ASIO option like "Assume hardware only uses 24-bits"?

I don't know the programming aspects of it, but I do know the rules: When truncating, you must dither. So your application can explicitly dither to 24 bits on its way, this decision is independent of the decision of what wordlength and format has to feed the ASIO driver, as long as the ASIO driver is asking for a minimum of 24 bits. And you heard it from both the RME and Lynx drivers: If you feed them more than 24 bit sources they are going to truncate it to 24 both coming into the RME mixer and going out.  It would be nice to send 32 bits to the ASIO device and leave the decision for dithering inside the ASIO device's software mixer, but in the case of RME they don't even provide dithering, and they should, too, so I always leave my RME mixers set to 0 dB and they are bit-transparent in that case. In the case of Lynx, they do it right, they provide dithering capability on their mixer outputs, and it's got one setting, 24 bits. The user should always set the Lynx mixer's output to 24 bit dither if he changes the fader levels in the Lynx mixer. Otherwise, the Lynx mixer is also bit-transparent to the top 24 bits of incoming signal.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: dean70 on January 25, 2013, 05:16:12 pm
Is there a double conversion with ASIO output -to 32 bit int from JRiver to ASIO, 32 to 24 bit in driver (dithering driver/vendor dependent)? In RME link, they mention they strip off the lower 8 bits to make 24 bits - is this the standard for other ASIO implementations?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 25, 2013, 05:29:07 pm
Is there a double conversion with ASIO output -to 32 bit int from JRiver to ASIO, 32 to 24 bit in driver (dithering driver/vendor dependent)? In RME link, they mention they strip off the lower 8 bits to make 24 bits - is this the standard for other ASIO implementations?

A lot of ASIO drivers request 24-bit (ASIOSTInt24LSB or ASIOSTInt24MSB), so I'm not sure why RME would ask for 32-bit and ignore 8-bits of it.  Maybe you could ask them?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 25, 2013, 09:00:18 pm
This might blow your minds.... Then again you guys are pretty jaded so maybe not  :-). Using an Izotope Ozone plugin I can get 2 channels of 24-bit dither with ASIO, and FFT and distortion testing shows it to perform textbook perfect inserted as a dithering VST plugin in the JRiver DSP chain. Works fine as stereo. I really really really tried to get a demo of Waves surround 360 dithering plugin, which is multichannel, of course, but authorization issues even for the Waves demo are egregious and i'll have to wait till Monday to call Waves and sort it out. Back to the Izotope dither. If you try to do more than two output channels, e.g. with a digital 2-way crossover, the low pass other output channels are not dithered as Izotope is a stereo dithering module. The second problem is obviously latency, as Izotope now introduces additional latency on the dithered pair of channels versus the undithered. Introducing additional time delay on the subwoofer as well as of course an undithered subwoofer channel, which is not as audibly significant as an undithered main channel, I reckon.

I then expand this to surround with six channels and a matrix in Audiolense that sends the center to both front sides and bass manages the bass into the two stereo subs.

Now for the second mind-blower. While waiting to try to get line input working in JRiver I decided to hit VST Host, http://www.hermannseib.com/english/vsthost.htm and make it stable enough to implement a full 6 channel (could easily be expanded to 8 channels or more) line in/line out convolver with dithering to 24 bit on all channels. Just finished the internal patching and testing of functionality tonight as well as a simple FFT analysis to ensure the crossover, and the dither were functioning exactly as advertised. Don't get me started on the weaknesses of Convolver VST, but if you stick with one sample rate you can play a lot of things. Attached is a screenshot of VST Host with the three instances of Izotope inserted. Each line from Convolver to each instance of Izotope is a pair of channels and believe it or not, you can channelize each patch in VST Host to yield the full Monty. Impressive, eh? I know it works, but I'm beat if you haven't guessed and tomorrow I'm going to listen to my fully dithered and convolved system and evaluate the sound.

Oh by the way, if this holds up for a week or more I'm going to send a donation to the developer of VSTHost. It's shareware, but you can see it was a serious labor of love for the developer, most impressive!
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: dean70 on January 25, 2013, 09:37:40 pm
Just did a test with selecting 24 and 32 bit options in ASIO control panel and it changes the Output format that shows under Audio path to 24 or 32 bit to correspond to the ASIO setting. If you have the dither option checked (the 2nd check box under the ASIO control panel button) under Playback Options, does it make sense to have ASIO set to 32 bit to make use of this dither setting?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on January 25, 2013, 10:06:39 pm
Bob, Voxengo's Elephant (http://www.voxengo.com/product/elephant/) allows you to process 8 channels and it will dither to 24 bit. You can download and test for free. I would be curious if, with ASIO output, what happens when it dithers in the DSP chain. The dithered signal should be the same even though JRiver converts to 64-bit and then 32-bit for output.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: TheLion on January 26, 2013, 04:10:04 am
Does anyone have information about the ASIO call that sets the buffer format the driver will use?

Or does there need to be an ASIO option like "Assume hardware only uses 24-bits"?

Matt, Bob,

I have the exact same issue with my Firewire Audio Interface - a Prism Sound Orpheus. The ASIO driver asks for 32bit fp data, but internally (processing, DACs) only 24bit int is used. I have contacted Prism about this issue and they told me it is best to "feed the Orpheus with 24bit int as this is it's native format". They also told me the ASIO driver asks for 32bit fp because that's "standard".

But I want JRiver to "optimize" the output for 24bit int playback - as this is the format it ends up with anyway. So yes, an ASIO option like "Assume hardware only uses 24-bits" would be GREAT! It would allow JRiver to dither down the 64bit fp data to 24bit int in a proper way and "put that into an 32bit fp container" to comply with the ASIO driver. In my understanding this 32bit fp data is converted to 24bit int.


So please consider an ASIO option like "Assume hardware only uses 24-bits" - it would allow proper dithering AND using ASIO. Thank you!
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 26, 2013, 08:08:36 am
Bob, Voxengo's Elephant (http://www.voxengo.com/product/elephant/) allows you to process 8 channels and it will dither to 24 bit. You can download and test for free. I would be curious if, with ASIO output, what happens when it dithers in the DSP chain. The dithered signal should be the same even though JRiver converts to 64-bit and then 32-bit for output.

Thanks for that, Mojave. I'll check Elephant right away. I did test the bit integrity and full functionality of using a dithering plugin as the last plugin in JRiver's DSP chain, and Izotope Ozone works text-book perfect, tested with FFT and low level 1 kHz sine wave tones. Just don't add any plugins AFTER the dithering plugin and everything is bit-transparent thereafter with ASIO. To be safe I turn off the dithering option in ASIO although JRiver ignores dithering options currently and outputs 32-bit float.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: hulkss on January 27, 2013, 03:16:20 pm
So yes, an ASIO option like "Assume hardware only uses 24-bits" would be GREAT! It would allow JRiver to dither down the 64bit fp data to 24bit int in a proper way and "put that into an 32bit fp container" to comply with the ASIO driver. In my understanding this 32bit fp data is converted to 24bit int.

So please consider an ASIO option like "Assume hardware only uses 24-bits" - it would allow proper dithering AND using ASIO. Thank you!

I assume this will then work with the Lynx Aurora I am using with the Lynx LT USB interface and related Lynx drivers.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on January 27, 2013, 03:49:03 pm
I checked my Steinberg UR824 and it shows 24-bit output in JRiver using ASIO. My Steinberg MR816x and Creative X-Fi Elite both show 32-bit output. The UR824 is the most recently produced device. It is interesting that Steinberg developed ASIO and my two Steinberg devices (both with 24-bit DACS) request different bit depths to the ASIO driver.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 30, 2013, 01:14:15 pm
I got a really nice response on this topic from David A. Hoatson, the co-founder of Lynx.

Here's what he had to say:
Quote
Our driver requests 32-bit since that is the most efficient to transfer over
the bus.  If you look at the ASIO documentation for ASIOSTInt32LSB, you will
find: 

"This format should also be used for 24 bit data, if the sample data is left
aligned. Lowest 8 bit should be reset or dithered whatever the
hardware/software provides."

ASIO never defined an active number of bits for 32-bit left-aligned data.
It does have ASIOSTInt32LSB24 but that is for right-aligned data and not
appropriate for our device.

The data is left aligned, so the LSB should be zero since it will be ignored
and the least significant bit(s) should be dithered by the software.  We are
not going to dither anything in the ASIO case since no bit reduction is
being applied to either recording or playback in our hardware (the driver
never touches the audio data).


I replied:
Quote
So from our side it might be reasonable to add an ASIO option like 'DAC
uses only most significant 24-bits'.

When that's enabled, we would zero out the least significant 8 bits and
dither the 24th bit.

When that's disabled, we would dither the 32nd bit.

Thoughts?  Bob Katz, would you be willing to test the option if we were to add it?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 30, 2013, 03:00:47 pm
I got a really nice response on this topic from David A. Hoatson, the co-founder of Lynx.

Here's what he had to say:

I replied:
Thoughts?  Bob Katz, would you be willing to test the option if we were to add it?

The Lynx people (and the RME people) are very together. The one interesting thing is that David mentioned Integer rather than floating point communication, but I think if (hopefully) JRiver is going to be able to "assume DAC (or driver) wants 24 bits" and dither accordingly, then I will be pleased as punch to test it thoroughly! I "wasted" about $150 on Voxengo Elephant, but it's not a waste, I can use it in my other work. :-).

Hope this helps,

Bob
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 30, 2013, 03:01:50 pm
The Lynx people (and the RME people) are very together. The one interesting thing is that David mentioned Integer rather than floating point communication, but I think if (hopefully) JRiver is going to be able to "assume DAC (or driver) wants 24 bits" and dither accordingly, then I will be pleased as punch to test it thoroughly! I "wasted" about $150 on Voxengo Elephant, but it's not a waste, I can use it in my other work. :-).

In a coming build:
NEW: Added ASIO option 'Device uses only most significant 24-bits (Lynx, etc.)'.  This combined with dithering provides a theoretical S/N improvement for devices where this is true.

Hopefully you'll have time to test it.  I'd like to get the Bob Katz stamp of approval on our dithering :)
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on January 30, 2013, 03:17:47 pm
I wonder if a bitdepth option should also be added to Parametric Equalizer? Bob has shown that a VST plugin (Voxengo Elephant) that is last in the signal chain can dither with the bitdepth staying intact since it is just being padded by JRiver for internal processing and the final ASIO output. This would also allow someone to send a certain bitdepth to another VST Plugin by using it before that plugin (although I'm not sure why someone would do this).
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: dean70 on January 30, 2013, 03:18:39 pm
The same thing applies to PCI sound cards that use the C-Media CMI8788 PCI controller - it takes a 32 bit word length and outputs 4 x i2s lines to the 24 bit DACs (appears to be able to do 32 bit i2s as well).

Found some source code for a Linux driver for this chipset and it looks like it does exactly that (24 bit in a 32 bit container).
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 30, 2013, 07:23:20 pm
I wonder if a bitdepth option should also be added to Parametric Equalizer?

Since dither should always be last, I think it's more logical as an output setting.  That way it's totally fool proof.

Once we're confident the dither is working well, we could probably remove the option and always dither bitdepth down conversion.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 30, 2013, 08:55:21 pm
drgalexo Asio4All question split here:
http://yabb.jriver.com/interact/index.php?topic=77809.0
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: hulkss on January 30, 2013, 10:33:59 pm
In a coming build:
NEW: Added ASIO option 'Device uses only most significant 24-bits (Lynx, etc.)'.  This combined with dithering provides a theoretical S/N improvement for devices where this is true.

Hopefully you'll have time to test it.  I'd like to get the Bob Katz stamp of approval on our dithering :)

Cool, I'll try it on my Lynx Aurora this weekend (if new build is released). Not sure how to prove it's working though.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: SpeedD408 on January 31, 2013, 10:09:10 am
In a coming build:
NEW: Added ASIO option 'Device uses only most significant 24-bits (Lynx, etc.)'.  This combined with dithering provides a theoretical S/N improvement for devices where this is true.

Hopefully you'll have time to test it.  I'd like to get the Bob Katz stamp of approval on our dithering :)

I see .126 is out with this added.  Did Mr. Katz have a chance to test and confirm??  I too would like to have MC get the Bob Katz stamp of approval.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 31, 2013, 01:40:25 pm
I see .126 is out with this added.  Did Mr. Katz have a chance to test and confirm??  I too would like to have MC get the Bob Katz stamp of approval.

Wow, JRiver works fast! i was not aware of this option already being in the new beta, and I will test it thoroughly today. Speaking of this, how does the "show unread posts since your last visit" work?  After pressing "mark all read", and then I walk away from my computer for 20 hours without logging out, does the forum somehow time out and accumulate properly without having to log out/in?

Thanks, stand by for the fireworks,


Bob
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: SpeedD408 on January 31, 2013, 02:39:25 pm
how does the "show unread posts since your last visit" work? 

Not sure how that works, but what works best for me is to click the "notify" button on the topics of interest.  Then the system will email me when a post is made to one of those threads.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 31, 2013, 04:23:43 pm
Test 1 of dither using playback in JRiver:

OK, I tested the ASIO-related dither generator, in stereo, at 44.1k, 88.2k and 96 kHz, using some test tones I had generated, with ALL of the DSP studio turned off (checkboxes off).

tones included

1 kHz -10 dBFS 3244

1 kHz -10 dBFS already dithered 2444

1 kHz -60, -80 and -100 dBFS 3244 and 6444, as well as 6488 and 6496

I played the tones at unity gain, tested dither on versus off.  I also measured the tones at various attenuations with JRiver's volume control. Everything performed correctly, distortion was being correctly removed.

HOWEVER, I am sorry to say that the JRiver dither generator is uncorrelated. That is, a single dither generator is being used for all output channels. To guarantee good stereo imaging and ambience, separate, uncorrelated dither generators are needed. Otherwise as the sound fades to black and gets soft, it will "monofy" in the center for stereo. I'm not sure how well that will be noticed in surround if at all. Also, at 24-bits, this will be a very subtle effect. But technically and correctly, all professional-grade dither generators use uncorrelated dither for these reasons. But this is not going to stop me using the internal generator in JRiver if I can get line input to work correctly now. In my next post I'm going to retest line input because without needing Voxengo Elephant for dither I might have enough DSP stability to run Steinberg's ASIO multiclientserver/client.

I assume when a DSP element is unchecked the DSP is not in use and memory and DSP power is freed up, correct?

Stand by folks!

Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 31, 2013, 05:00:20 pm
Next test was of live input using ASIO multiclient. With no DSP engaged in DSP studio, I got an audible glitch every 20 seconds to 2 minutes in the sound. This was not due to synchronization or clocking issues, I guarantee. I also don't think JRiver's ASIO dither generator is working in live input mode. I see garbage at low level in Spectrafoo, but it is not moving or fluctuating like random noise should, it's just staying there so I think it's distortion, though there are no distinct spikes related to the test tone I'm sending from Spectrafoo.

I tried to trace the glitches with DPC latency checker and it doesn't show anything. Neither does Task manager performance or CPU or resource manager but I am not an expert at interpreting those and maybe someone could guide me as to what to look for. CPU usage on all four cores is less than 1% and only the apps I'm testing are running. So, I'm sorry, I can't use Live input yet.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 31, 2013, 05:00:22 pm
HOWEVER, I am sorry to say that the JRiver dither generator is uncorrelated. That is, a single dither generator is being used for all output channels. To guarantee good stereo imaging and ambience, separate, uncorrelated dither generators are needed.

The current dither generates a new dither value for each channel and each sample.  In other words, dithering CD format data would generate 88,200 dither values each second.

This matches my understanding of the definition of uncorrelated, and I believe it's the preferred approach (as opposed to generating 44,100 dither values each second for CD audio).
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 31, 2013, 06:05:04 pm
Hi, Matt. Are you using a random generator with a different seed for each channel?  My measurements in Spectrafoo show 100% correlation in amplitude and time between the left and right channels of your dither generator.


Bob




The current dither generates a new dither value for each channel and each sample.  In other words, dithering CD format data would generate 88,200 dither values each second.

This matches my understanding of the definition of uncorrelated, and I believe it's the preferred approach (as opposed to generating 44,100 dither values each second for CD audio).
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on January 31, 2013, 06:10:09 pm
I wonder if a bitdepth option should also be added to Parametric Equalizer? Bob has shown that a VST plugin (Voxengo Elephant) that is last in the signal chain can dither with the bitdepth staying intact since it is just being padded by JRiver for internal processing and the final ASIO output. This would also allow someone to send a certain bitdepth to another VST Plugin by using it before that plugin (although I'm not sure why someone would do this).

Mojave, I don't think there's good reason to do that unless someone has installed a cheap and dirty 3rd party plugin that isn't using the right in/out wordlength or is computing in (god forbid) fixed point. Even then, though, this fictional next plugin in the chain will use as much incoming data as it wants to and throw away the rest. So there's no point in truncating in front of it. Does this help?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on January 31, 2013, 10:14:30 pm
Hi, Matt. Are you using a random generator with a different seed for each channel?  My measurements in Spectrafoo show 100% correlation in amplitude and time between the left and right channels of your dither generator.

Let me double-check the dither code tomorrow and follow up.

It's possible that it's not working the way I claimed above with ASIO due to ASIO buffers not being channel interleaved like other output modes.

If that's the case, it'll be an easy fix.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on February 01, 2013, 09:09:19 am
Let me double-check the dither code tomorrow and follow up.

There was an unintended (and unexpected) coherence in our random number generator when multiple were created within a millisecond or two (which happens in ASIO as it processes channel buffers).

This is because we were seeding off GetTickCount(...) (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724408(v=vs.85).aspx), and that didn't change in this case.

Good detective work catching this.  It will be fixed next build.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on February 01, 2013, 12:23:38 pm
Dear Matt:

You're the one to be congratulated. You found the problem so quickly.

People, please keep in mind that I only performed a cursory analysis of the JRiver dither. A complete analysis and check could take a day or more. I did not check:

1) many different test frequencies, I only tested 1 kHz

2) The randomness and distribution of the dither. Ideally it should be TPDF (triangular probability density function). I don't even know how to do that!

3) Distortion at many different levels

4) The exact amplitude of the dither, though I did check it with other reference dither generators and it seemed to be in the ballpark for 24 bits.

Despite all that, my early tests show that JRiver's dither is eliminating distortion, helping the purity of tone and improving low level detail. Who could ask for more! Just remember: "Never turn your back on computers." When the programmer was asked if his program had any bugs, he replied, truthfully, "None that we've been able to find, yet".


Best wishes,


Bob

There was an unintended (and unexpected) coherence in our random number generator when multiple were created within a millisecond or two (which happens in ASIO as it processes channel buffers).

This is because we were seeding off GetTickCount(...) (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724408(v=vs.85).aspx), and that didn't change in this case.

Good detective work catching this.  It will be fixed next build.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on February 01, 2013, 08:56:34 pm
Dither correlation issue fixed here:
http://yabb.jriver.com/interact/index.php?topic=77862.0
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: hulkss on February 01, 2013, 10:30:03 pm
Bob and Matt

Enjoying 24 bit random dither now. It's the Katz meow  :)

Feeling a bit incoherent.

Brad
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Mark Manner on February 13, 2013, 07:15:59 pm
I have read with interest (and with some limited understanding, unfortunately) this thread on dithering. I am conversant with dithering in optical astronomy image processing, but not quite so sure I understand the audio version. Nevertheless,  I have the 18.0.128 version of JRiver MC installed, and am using it with my McIntosh C50 Preamp, which has an asynch usb input that requires ASIO, and I am using a McIntosh supplied ASIO driver.  The JRiver output I am using isn't making any changes to the stream (as far as I can tell--the icon is Blue, and indicates no changes made). On the McIntosh preamp, the display shows 32/44[88-96-176-192] as the input, depending on the source material on my PC. My question is whether I should check the box in the McIntosh ASIO driver to enable dither. See screenshot attached. Thanks for your advice,
Mark

Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on June 11, 2013, 07:00:28 pm
Did the dither checkbox disappear?  This is on the window that has the option "open driver control panel" and also has the checkbox "devices uses only 24 bits".

I haven't needed it for a long time since I've been using Acourate ASIO (64 bit communication), but now I want to try JRiver's Convolution again and so JRiver is communicating direct with the Lynx. Matt, where did you hide the dither checkbox in this version?

Thanks,


Bob
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on June 17, 2013, 03:44:39 pm
Did the dither checkbox disappear?  This is on the window that has the option "open driver control panel" and also has the checkbox "devices uses only 24 bits".

I haven't needed it for a long time since I've been using Acourate ASIO (64 bit communication), but now I want to try JRiver's Convolution again and so JRiver is communicating direct with the Lynx. Matt, where did you hide the dither checkbox in this version?

A lot of your advice from this thread is now simply part of the audio engine.  Now all outputs (including ASIO) get dither on integer downsampling from a higher bitdepth (normally 64-bit floating point).

More here:
http://yabb.jriver.com/interact/index.php?topic=80522.msg548095#msg548095

Thanks for your help with this area.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: igorzep on September 11, 2014, 04:22:03 am
Our dither doesn't change how a 16-bit value looks at 24-bit.

From above: "It's important to remember that dithering, when done properly, does not change the bit-perfect nature of output.  A 16-bit or 24-bit value remains unchanged when dithering.  Dithering only changes values in between those whole values.  These in between values arise when performing any sort of processing, including volume."

I did real world testing of billions of random samples up to 32-bit integer output to test that our dither was obeying this rule.  It is.

Hello, Matt. Bumping up the dithering topic again. The quoted part is making me worry if TPDF dither is really implemented correctly in JRiver. The TPDF should be 2LSB dither and so, it MUST not be bit perfect even if there are no 'in between' values in the source. Otherwise (if 1LSB is used) the dither noise added would be modulated by the presence of signal.

Can you re-verify the dither is really implemented properly and has a Q of 2LSB, and so is not 'bit perfect'?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on September 15, 2014, 08:14:39 am
Sorry, but our dither is bit-perfect.  There are lots of ways to do a dither, and ours is chosen for strategic reasons.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: igorzep on September 15, 2014, 01:44:25 pm
Sorry, but our dither is bit-perfect.  There are lots of ways to do a dither, and ours is chosen for strategic reasons.

There are a lots of ways to do dither, but not every way is a correct one. For TPDF dither there is only one correct amplitude - it is 2LSB. No other value is correct. What is the point of 64 bit processing if you destroy everything by not dithering it properly to the output resolution?

By the way, if you need a non-destructive dither for some reason (like passing AC-3 stream... but you should still detect it probably...) you should use RPDF of 1LSB, this can be an option if it causes failures somewhere. But for the sound quality (and especially when you know you don't output to external decoder) there is no excuse not to use the correct TPDF dither.

Here are some links where TPDF is discussed/explained
http://repforums.prosoundweb.com/index.php/topic,32821.msg486812.html#msg486812 (http://repforums.prosoundweb.com/index.php/topic,32821.msg486812.html#msg486812)
http://bitperfectsound.com/?p=60 (http://bitperfectsound.com/?p=60)
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: andyc56 on September 15, 2014, 04:43:58 pm
There are a lots of ways to do dither, but not every way is a correct one. For TPDF dither there is only one correct amplitude - it is 2LSB. No other value is correct. What is the point of 64 bit processing if you destroy everything by not dithering it properly to the output resolution?

I agree completely.  Dither isn't a heuristic algorithm. The mathematics behind the 2LSB peak-to-peak triangular PDF dither were fleshed out by Wannamaker in his Ph.D dissertation on dither (PDF) (http://www.robertwannamaker.com/writings/rw_phd.pdf).

Edit: I should also mention that seeding a random number generator should be done only once, at initialization of the generator. Subsequent seeding is unnecessary and undesirable.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on September 15, 2014, 05:43:10 pm
The TPDF should be 2LSB dither and so, it MUST not be bit perfect even if there are no 'in between' values in the source. Otherwise (if 1LSB is used) the dither noise added would be modulated by the presence of signal.

Can you re-verify the dither is really implemented properly and has a Q of 2LSB, and so is not 'bit perfect'?
Are you saying that a 24-bit signal expanded to 64-bit and then dropped back to 24-bit, with no processing in between, should no longer be the identical 24-bit signal? If so, do you think JRiver should modify all 16-bit and 24-bit sources even when JRiver does no processing. In other words, there should never be bit-perfect output?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Hendrik on September 15, 2014, 05:46:52 pm
Thats what it sounds like. I think there are different goals here

He wants to use dithering to improve the original signal (by smoothing out quant errors present in the source), while we view the goal of dithering to avoid introducing *new* quant errors due to a reduction in bitdepth after processing.

FWIW, if you use internal volume, or a volume reduction through volume leveling, you'll quite certainly already dither more than 1LSB, and achieve the wanted effect, since lowering the volume shifts the previous QE into the new dithering noise floor.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: igorzep on September 16, 2014, 01:42:14 am
Thats what it sounds like. I think there are different goals here
There is only one goal of TPDF dither - linearize the system (remove quantization distortion and replace it with noise).

He wants to use dithering to improve the original signal (by smoothing out quant errors present in the source)
Wrong again. Original signal cannot be improved. But any processing of the signal could be made linear. So, what I want is not distorted signal after the processing.

while we view the goal of dithering to avoid introducing *new* quant errors due to a reduction in bitdepth after processing.
You ARE introducing them in current design. If you do NO processing then yes, dithering could introduce something that is not originally present (the noise). And so - it is worth to turn if off when there is no processing. But if there ever slightest change to the original (be it volume, resampling, PEQ filter, convolution, tone control, loudness compensation, Bass Management, virtual surround, etc, etc...) - the correct 2LSB TPDF dither must be applied to avoid introducing of *new* quantization errors that is not an uncorrelated noise. The errors are there already - it is unavoidable fact, we just want to transform them to the form where they least harmful, we don't want both noise and distortion, we want just noise and nothing more.

FWIW, if you use internal volume, or a volume reduction through volume leveling, you'll quite certainly already dither more than 1LSB, and achieve the wanted effect, since lowering the volume shifts the previous QE into the new dithering noise floor.
You don't. The 1LSB is to the output bit-length, not to the source. It is not something that depend on the input, the amplitude is constant to the OUTPUT, and it must be 2LSB to the output.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: igorzep on September 16, 2014, 03:39:56 am
I should also mention that seeding a random number generator should be done only once, at initialization of the generator. Subsequent seeding is unnecessary and undesirable.

BTW, Bruno compiled a good 'checklist' of common mistakes done when implementing dither:
http://repforums.prosoundweb.com/index.php/topic,32821.msg486602.html#msg486602 (http://repforums.prosoundweb.com/index.php/topic,32821.msg486602.html#msg486602)
Quote
Badly implemented dithers I've come across over the years:
*First truncating, then adding noise. (my edit: rounding is mathematically eq to truncating)
*A dither source with only one bit rattling (mathematically the same as above)
*TPDF dither with a user-controlled noise level setting (my edit: he means any other value than 2LSB)
*Gaussian dither or dither noise derived from analogue sources.
*Dither added before, not inside, a noise shaper
*Noise shaping with no dither.
*One noise source for more than one channel.

Any one of those can cause people to believe dither is unnecessary or counterproductive, and will cause them to damage the sound of many productions to come.
My concerns in relation to the JRiver (and so TPDF) are bolded. First probably is OK as Bob have been able to register at least some reduction of the distortion... Another one is definitely not.

I've some concerns about convolver also (but it is not necessary there are some problems, I just wonder why some people claim they hear some difference, there are things to broke there, and identity filter of [1, 0, 0, 0..] that Matt is using for testing would not detect them), but it is infinitely more complicated, so, let's start from solving simple things first. Then I'll ask some questions more.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 16, 2014, 08:39:01 am
I've been staying away from JRiver discussions for months while watching and cheering on Matt's health progress. I did not want to stress this wonderful gentleman! Likewise the same for these dither discussions. I have a bunch of technical measurements to submit, but for those with little patience let me summarize them in two sentences:

1) Whoever has been complaining about the theoretical performance has absolutely nothing to worry about. JRiver's dither on PC when set to 24 bits is absolutely perfect. Its performance is perfect, no artifacts at all. JRiver on PC performs better than many many professional pieces that I use day in and day out and whose distortion measures a bit but exhibit no audible artifacts. I do quarrel with Matt's insistence on "bit perfect dither" since this is a contradiction in terms. You can't add noise and remain bit perfect. But I'm perfectly happy to live with Matt's terminology as strictly speaking when no processing is applied the output is bit-perfectly identical to the input plus some noise. And when processing is applied, as this post will attest, no distortion is added to the output when it is truncated.

2) I cannot speak to, nor have I measured the Mac performance and I've been waiting for Matt's health to come back before asking him what happened to the "device uses upper 24 bits" option that's available in JRiver for PC under DSP options. I see that this option is missing, and Matt mentions Core audio wanting to get 32 bit float, but that is not necessary... many processors, including Pure Music, give us a dithering option to 24 bits so as to properly feed DACs, which as we know will truncate any information greater than 24 bits. And this is audible as a loss of depth, as my ears tell me.

Now for my measurements. You can skip the rest if you're not technically inclined. Instead of arguing over "1 LSB, 2 LSB, 0.5 LSB" or whatever, it is essential to measure. Many manufacturers have a slightly different way of specifying and randomizing their dithers. Some better than others. I now use a multitone test signal invented by the great Jim Johnston which I have implemented in 2444 and in 3244 stereo. It consists of about 40 carefully selected sine wave tones all the way up to near Nyquist. The ways in which these tones interact makes the test extremely subtle and capable of identifying the slightest aberration in distortion. I've performed randomization tests, independent dither on independent channel tests as well. And JRiver on PC comes out squeaky clean.

Attached are measurements performed with JJ's multitone test signal (also known as the "buzz" signal) and measured in Spectrafoo through an SPDIF input. For convenience I limit the display to 4 kHz. Notice that there are purposeful gaps in the buzz signal so that intermodulation distortions among high frequencies can be seen below 240 Hz and in the gap between 250 and 750 Hz.

1) Buzz attenuated 60 dB in Sequoia and either truncated to 24 bits (green) or dithered to 24 bits using Izotope Ozone's flat TPDF 24 bit dither (red). As you can see, Izotope's dither is absolutely perfect, there are no artifacts to be seen.

2) Dither amplitude comparison. JRiver's "24" dither in red, Izotope's dither in blue, playing the 3244 buzz signal, attenuated  and measured via a 24 bit spdif/AES output into Foo. JRiver is attenuating 95 dB and Sequoia is attenuating 60 dB. Notice that on the average, the amplitude of JRiver's dither is even slightly higher than Izotope's. Certainly we can agree that the amplitudes are comparable, and I am completely confident that Izotope has implemented its dither as 100% correct TPDF in amplitude and randomness. I never see any artifact of the buzz signal with either the JRiver or the Iztope.  

3) This is an example of a professional device whose dither or internal resolution performs poorer than JRiver's. Not naming names here. This is a monitor controller with a simple -34 dB attenuation when fed the 2444 buzz signal. Notice the distortion products are clearly visible.

4) Here is the buzz signal running JRiver as a convolver using the filters created in Accourate. The amount of calculations required to derive this filter are very complex, the attenuations are strong, and if there is going to be any problem in JRiver, it would be revealed using the convolver test. JRiver is attenuating the buzz signal 95 dB with its master volume control. In Red, the "device uses 24 bits" checkbox is checked in DSP options. In Green, the box is unchecked. At no time while kicking the tires was I ever able to see any distortion artifacts when JRiver was properly dithered. Nuff said!

Not shown...  a demonstration of how sensitive this measurement is... the slightest distortion of a device can be detected using the buzz signal. If anyone is interested in obtaining the buzz signal, contact me off list at bobkatz(atsign)digido.com
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: igorzep on September 16, 2014, 11:33:12 am
I've been staying away from JRiver discussions for months while watching and cheering on Matt's health progress. I did not want to stress this wonderful gentleman! Likewise the same for these dither discussions.
I didn't know... All my wishes to him to heal soon!

But the product keep living, so, why not to talk about technical issues, especially this one is about just ONE number.  ::)
And I hope Matt isn't alone behind the project. Isn't he?

I have a bunch of technical measurements to submit, but for those with little patience let me summarize them in two sentences:
Measurements are the truth :) But if you measure one thing and distortion is somewhere else... well it is just incomplete measurement. Sure, no measurements can be absolutely 'complete', but when we know what is the goal and what we are trying to find...

1) Whoever has been complaining about the theoretical performance has absolutely nothing to worry about.
According to your previous posts/measurements and according to the Matt's formulation there are still reasons to worry. At least there are two contradictory statements that cannot be true at the same time. As we have that it should be clarified. Either bit-perfect claim is not true, or they are not using correct TPDF dither amplitude (or are using something that is not TPDF at all). Or deliberately detecting lossless cases of processing and then turning off dither (but I doubt it, and from Matt's response the dithered signal end's up with no added noise).

JRiver's dither on PC when set to 24 bits is absolutely perfect.
Absolute perfect is TPDF 2LSB (see above). Any kind of 1LSB dither is not perfect (although it is possible RPDF won't be noticeable on the FFT graphs also, as long as you don't compare different / very small signals). The problem of 1LSB dither is noise modulation - the total amount of noise energy is dependent on the input signal (or lack of it).

Its performance is perfect, no artifacts at all.
Is the second graph you posted here: http://yabb.jriver.com/interact/index.php?topic=76912.msg526976#msg526976 (http://yabb.jriver.com/interact/index.php?topic=76912.msg526976#msg526976) not valid anymore? It clearly shows the distortion. And... What about the people with 16 bit converters...

JRiver on PC performs better than many many professional pieces
This was never an argument for me. If someone did a mistake it is not an excuse for anyone else to do the same.

I do quarrel with Matt's insistence on "bit perfect dither" since this is a contradiction in terms. You can't add noise and remain bit perfect.
This is what catched my attention also... The round-trip actually can be bit-perfect with RPDF if you do, for example 16bit->32bit->1RPDF->16bit, but even the no otherwise processed round-trip won't be bit-perfect for 2RPDF, which is the correct TPDF. There is contradiction, and I am trying to find where the truth is... If he is continuing insisting on lossless round-trip then it simply cannot be correct TPDF. I would like to know where the truth is in the current state of affairs and if there are problems - have them fixed (this is again - just ONE number).

But I'm perfectly happy to live with Matt's terminology as strictly speaking when no processing is applied the output is bit-perfectly identical to the input plus some noise.
I agree with you, but I doubt it is what Matt meant...

I've performed randomization tests, independent dither on independent channel tests as well. And JRiver on PC comes out squeaky clean.
I've seen your findings on this. Good job!

4) Here is the buzz signal running JRiver as a convolver using the filters created in Accourate.
Good to see that, and great if it working perfectly. My concerns are about applying circular convolution to the continuous signal, and so the need for some kind of overlap strategy (overlap-save/overlap-add methods). Testing this is tricky, and I am not sure FFT can catch the problem under all conditions. A simple yes/no answer here (if such strategy is used) would also help to at least know if it is worth to test it. :) From the way how the feature was communicated (and also tested for 'bit-perfectness') - I cannot be sure if there is full understanding of the process.

Not shown...  a demonstration of how sensitive this measurement is... the slightest distortion of a device can be detected using the buzz signal. If anyone is interested in obtaining the buzz signal, contact me off list at bobkatz(atsign)digido.com
Something that is very good at analyzing analog distortion is not always the best for investigating 'digital' problems. I don't expect too much modulation to the low frequency part of the spectra from (all) the dither imperfections.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Hendrik on September 16, 2014, 11:49:53 am
I suggest you measure MCs output yourself, before this ends up in more days of wild speculations. :)
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: igorzep on September 16, 2014, 12:44:40 pm
I suggest you measure MCs output yourself, before this ends up in more days of wild speculations. :)

Why bother measuring if incorrectness is confirmed by the author (although it seems he has misconceptions about the dither and doesn't understand the problem)? To check something is correct first the author should confirm it is done correctly on his side. When he is confirming the reverse - it is not a speculation.

Also.
1) I am waiting my HTPC to arrive and so I don't have a way to measure.
2) I am not yet bought JRiver but I am considering it.
3) It is not quite normal that I as a customer (or potential customer) should check/test something... Especially the basic math (pretty standardized) done in the device/software. It is researched, mathematically proven, empirically verified for years already. The correct implementation of such things should be a given. But... well the reality is that I have to check all that... And I will. If author will show the desire to fix the problem instead of avoiding to do it because of the 'strategy'. Until then I see no courage to verify something if there is no chance for it to be solved.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on September 16, 2014, 01:42:16 pm
Quote from: Hendrik
He wants to use dithering to improve the original signal (by smoothing out quant errors present in the source)

Wrong again. Original signal cannot be improved. But any processing of the signal could be made linear. So, what I want is not distorted signal after the processing.

Matt's comment regarding bit-perfect is only applicable to a signal that has no processing. When there is processing, there is proper dither and no distortion as Bob Katz's measurements have shown. You seem to be overlooking this part of Matt's comment, "Dithering only changes values in between those whole values.  These in between values arise when performing any sort of processing, including volume." Matt is confirming correctness, not incorrectness.

If you haven't already, you might consider reading Bob Katz's book Mastering Audio:  The Art and Science.

Quote
My concerns are about applying circular convolution to the continuous signal
If you alias the linear convolution, the integer multiples will show that there is no distortion. Proper dither obviously results in non-zero values. If you delay replicas of the linear convolution you will get an identical result to circular convolution. If not, then you don't have non-zero values and the dither is incorrect.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: igorzep on September 16, 2014, 03:05:13 pm
Matt's comment regarding bit-perfect is only applicable to a signal that has no processing.
He was commenting about the dither applied to the signal that has no other processing and explained it as his test for 'correctness' (while in reality it proves incorrectness), quite a difference to turning off the dither when we know there is no processing. And this must not be the case for proper TPDF audio dither. If he miscommunicated it, I am waiting a confirmation from first hands.

When there is processing, there is proper dither and no distortion as Bob Katz's measurements have shown.
I have referenced his measurement (http://yabb.jriver.com/interact/index.php?action=dlattach;topic=76912.0;attach=7361;image)
It clearly shows the distortion. Also, proper TPDF dither must remove also noise modulation - this is something not visible on FFT plots, but can still be audible under some conditions (definitely it will be a real issue with 16 bit output, for 24 bit - who knows, but it is still worth to have the amplitude correct, if you combine headroom, EQ, gain matching, you can get close to the 24 bit resolution).

You seem to be overlooking this part of Matt's comment, "Dithering only changes values in between those whole values.  These in between values arise when performing any sort of processing, including volume." Matt is confirming correctness, not incorrectness.
I am not overlooking this part of the comment. This part is exactly the one, that confirms his misunderstanding. The correct TPDF dither CHANGE values that are NOT ONLY IN BETWEEN. If it doesn't then the noise amplitude depends on the input signal, and it is one of the artifacts that proper dither is supposed to suppress. It is supposed to make the error a white noise that is not audibly dependent on the input signal. If you (digitally) subtract the input signal from the output and reproduce it, it should sound as just noise that is not dependent on the input, so, it should be the same if there is digital silence (only exact zeroes in input) or if the full-amplitude signal is fed to the input, or anything in-between. This is impossible to accomplish with 1LSB ('bit-perfect') dither and TPDF dither of 2LSB is the one that accomplish this while adding least possible amount of (white) noise. This is formally proven as was referenced here in the thread.

If you haven't already, you might consider reading Bob Katz's book Mastering Audio:  The Art and Science.
If you haven't already, you might consider to re-read the links already posted in this thread by me and others:
Ph.D dissertation on dither (PDF) (http://www.robertwannamaker.com/writings/rw_phd.pdf)
Bruno Putzeys's (the designer of best in the world ADC/DAC converters, and class D amps) explanation of dither (http://repforums.prosoundweb.com/index.php/topic,32821.msg486812.html#msg486812)
BitPerfect Sound explanation of TPDF dither with some convincing graphical explanation of correct and incorrect amplitudes (http://bitperfectsound.com/?p=60)

If you alias the linear convolution
It is a different issue (or probably non-issue, just a concern about convolver feature). Should be discussed separately, it has nothing to do with dither.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 16, 2014, 03:41:47 pm
BitPerfect Sound explanation of TPDF dither with some convincing graphical explanation of correct and incorrect amplitudes (http://bitperfectsound.com/?p=60)
(http://bitperfectsound.com/wp-content/uploads/2013/09/Zoom-Combo.png)
 
For the ~3dB it seems to cost, it seems like a switch from 1LSB to 2LSB would be worthwhile, if that's what Media Center is currently using.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 16, 2014, 05:53:38 pm
Igor, please don't quote one of my measurements that's so old it's starting to grow hairs without qualifying it and telling us what it is a measurement of. That's an old post I made from early 2013. I don't even know what it's measuring without studying in context. The new post I made just yesterday with the buzz signal clearly shows perfect performance from JRiver on the PC. Do you understand the meaning of "perfect"? As was previously posted today, if you have doubts, take some measurements of your own and stop speculating. If you spot any smoking guns, let us know.

As for amplitude of the dither, it's too complicated math to convert the measured amplitude of a random multi-bin FFT measurement of dither amplitude into number of LSBs, but certainly it is possible to compare the FFT measurement of the amplitude of the JRiver dither to that of the Izotope. We observe that it is AT LEAST as high in amplitude as Izotope's dither. And since Izotope's dither is properly done, we can assert that since JRiver's is even slightly higher amplitude (less than 0.25 dB I estimate) in terms of amplitude it must be enough to prevent distortion.

If you want to be helpful, see if you can devise a measurement to determine if JRiver's dither is random enough to prevent noise modulation. I wager it is. Everything looks (and sounds) very kosher from here.

Please stop worrying about it and just use it.... JRiver's dither measures perfect. The test signal which I'm using is designed to test digital systems... I don't know where you got the idea it was made for analog measurements. I rarely see distortion measurements of digital systems as perfect as what I got from the JRiver.

As for the "bit perfect" argument, it's purely a semantic quibble I may have with Matt's terminology. I don't care if Matt is on Venus and I'm on Mars as long as his dither performs correctly from the point of view of distortion removal. And it does. From the bit-perfect point of view, only on a statistical basis can a signal plus added noise be bit-perfect. And statistically, JRiver is 100% bit perfect. I've also done some tests (long ago) by subtracting the original signal and all that remains is the noise of the dither. Which = bit-perfect in my book. This can only be done with gain at unity and no processing (no multiplications), of course.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on September 16, 2014, 08:23:38 pm
Please stop worrying about it and just use it.... JRiver's dither measures perfect. The test signal which I'm using is designed to test digital systems... I don't know where you got the idea it was made for analog measurements. I rarely see distortion measurements of digital systems as perfect as what I got from the JRiver.

As for the "bit perfect" argument, it's purely a semantic quibble I may have with Matt's terminology. I don't care if Matt is on Venus and I'm on Mars as long as his dither performs correctly from the point of view of distortion removal. And it does. From the bit-perfect point of view, only on a statistical basis can a signal plus added noise be bit-perfect. And statistically, JRiver is 100% bit perfect. I've also done some tests (long ago) by subtracting the original signal and all that remains is the noise of the dither. Which = bit-perfect in my book. This can only be done with gain at unity and no processing (no multiplications), of course.

Thanks Bob.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 17, 2014, 08:14:47 am
Matt, would you mind starting a discussion about the implementation of dither in the Mac side? Should we switch to JRiver Mac? Are you involved in the Mac development?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Hendrik on September 17, 2014, 08:17:14 am
Dithering is a central function, its implemented the same on any OS. If you output a lower bitdepth than the internal format (and noone outputs 64-bit float), then it'll dither to that.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 17, 2014, 08:21:24 am
Dithering is a central function, its implemented the same on any OS. If you output a lower bitdepth than the internal format (and noone outputs 64-bit float), then it'll dither to that.

Where do I set the output bit depth on the Mac Side? On the PC side 24 bit is available in the DSP options. In a similar place on the Mac I can set "integer mode" but where do I set the bit depth (word length)?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on September 17, 2014, 08:22:45 am
Where do I set the output bit depth on the Mac Side? On the PC side 24 bit is available in the DSP options. In a similar place on the Mac I can set "integer mode" but where do I set the bit depth (word length)?

It's automatically selected based on your output hardware.  Most are 24-bit integer (in integer mode), but it varies.  There's no need to do anything.

You can check Audio Path while it's playing to see.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: gappie on September 18, 2014, 02:55:02 pm
yesterday evening, mister igorzep, i tried to read your phd study ( i really did  :P ).. i did not get all the maths, but the introduction and the conclusions were clear... its a great theoretical thesis. what intrigues me, is how you went into a discussion in such a non-scientific way, more like some hardcore preacher.

but practically, speaking as someone with a Phd ( ::) ) in theoretical biology, and a trying to survive musician, im happy with the measurements from mister bobkatz (and with matt, he really knows what he is doing  :-* )... we are still good  :D

 :)
gab
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 18, 2014, 03:23:21 pm
Bob, Voxengo's Elephant (http://www.voxengo.com/product/elephant/) allows you to process 8 channels and it will dither to 24 bit. You can download and test for free. I would be curious if, with ASIO output, what happens when it dithers in the DSP chain. The dithered signal should be the same even though JRiver converts to 64-bit and then 32-bit for output.

Hi, Mojave. I own Elephant. I actually bought it at a time before JRiver was capable of doing 24-bit dither and did use it in 8 channels in JRiver as my dithering engine. You could still use it to dither to 24 bits in JRiver by UNCHECKING the "device uses 24 bit" box in JRiver. I did test Elephant's place in the chain and it comes after all JRiver processing including volume which is where you would want it.

But I abandoned Elephant once Matt got the action going. At this point I need to do tests of JRiver Mac to see how it does in Integer mode. It's promising. A bit terrifying only because there is no explicit directive for the output wordlength in integer mode. Preliminary tests I just did reveal that integer mode does output 24 bits fixed... maybe that's all we have to worry about.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on September 18, 2014, 03:41:49 pm
Hi, Mojave. I own Elephant. I actually bought it at a time before JRiver was capable of doing 24-bit dither and did use it in 8 channels in JRiver as my dithering engine.
Bob, you are quoting me from January 25, 2013. I believe you started using Elephant because I recommended it back then.  ;)

You replied,
Thanks for that, Mojave. I'll check Elephant right away.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 21, 2014, 10:34:47 am
Well I'll be a monkey's uncle, Mojave. You deserve credit for turning me on to Elephant (however briefly).

Anyway, to go back to the subject of dither, for me the case is closed on the PC side but now I have to get into a discussion (perhaps with Matt) on the Mac side. I thought there was such a discussion on integer mode, on the Mac side, but I don't see it so I'm going to start a discussion over there. I do see some problems and I'm going to lobby for an explicit "24 bit" checkbox in JRiver on the Mac side as well. See you over there!!!!!!!!
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 21, 2014, 03:11:05 pm
I'm not sure that Media Center's TPDF implementation is correct.
It's amplified, but you can probably guess which of these is Media Center.
I recommend listening to the full samples, in order.
 
https://www.sendspace.com/file/3mdbe9 (https://www.sendspace.com/file/3mdbe9)
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: andyc56 on September 21, 2014, 10:40:21 pm
I'm not sure that Media Center's TPDF implementation is correct.
It's amplified, but you can probably guess which of these is Media Center.
I recommend listening to the full samples, in order.
 
https://www.sendspace.com/file/3mdbe9 (https://www.sendspace.com/file/3mdbe9)

Thanks for that!  Sample 2 has obvious noise modulation.  Which is JRiver?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 22, 2014, 06:40:34 am
Thanks for that!  Sample 2 has obvious noise modulation.  Which is JRiver?
Sample 1 is iZotope’s TPDF dither.
Sample 2 is Media Center.

This seems related to the 2LSB discussion recently (http://yabb.jriver.com/interact/index.php?topic=76912.msg631071#msg631071).

https://www.sendspace.com/file/3mdbe9 (https://www.sendspace.com/file/3mdbe9)
 
Sample 1 is iZotope's TPDF dither.
Sample 2 is Media Center's dither.
 
 
Samples were created by performing a large gain reduction (-50dB) and exporting a 16-bit file, which pushes the signal into the lower bits. The conversion tool was used for this in Media Center.
Both files were then amplified to the maximum volume possible without clipping in Audacity. (about +60dB)
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on September 22, 2014, 08:42:29 am
I'm quoting Bob Katz again, because there's a little bit of FUD being spread.  Bob literally wrote the book on studio engineering.  He says we're "perfect."

Please stop worrying about it and just use it.... JRiver's dither measures perfect. The test signal which I'm using is designed to test digital systems... I don't know where you got the idea it was made for analog measurements. I rarely see distortion measurements of digital systems as perfect as what I got from the JRiver.

As for the "bit perfect" argument, it's purely a semantic quibble I may have with Matt's terminology. I don't care if Matt is on Venus and I'm on Mars as long as his dither performs correctly from the point of view of distortion removal. And it does. From the bit-perfect point of view, only on a statistical basis can a signal plus added noise be bit-perfect. And statistically, JRiver is 100% bit perfect. I've also done some tests (long ago) by subtracting the original signal and all that remains is the noise of the dither. Which = bit-perfect in my book. This can only be done with gain at unity and no processing (no multiplications), of course.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 22, 2014, 09:22:02 am
I'm quoting Bob again, because there's a little bit of FUD being spread.  Bob literally wrote the book on studio engineering.  He says we're "perfect."
Please listen to the samples.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on September 22, 2014, 09:38:52 am
Samples were created by performing a large gain reduction (-50dB) and exporting a 16-bit file, which pushes the signal into the lower bits. The conversion tool was used for this in Media Center.
Both files were then amplified to the maximum volume possible without clipping in Audacity. (about +60dB)
Did you use the bitdepth DSP in JRiver when creating the files? Audacity uses 32 bit float when performing any changes to the audio. It will then apply its own dither to the final output when reducing back to the file's native bitdepth. Amplifying to maximum volume in Audacity invalidates the test, IMO.

Any listening to the files with volume correction will involve re-dithering. If someone listens to the files and isn't using JRiver's internal volume, then who knows how it is being dithered. With JRiver's internal volume control, it will still be dithered again. So, the final listening involves either dithering or truncation when file was reduced by 50 dB depending on settings used in Convert Format, dithering by Audacity when the file was increased by 60 dB, and then dithered a third time during playback when listening.

With that said, sample 2 sounded better to me. I then analyzed the file in JRiver. Sample 2 is .3 dB quieter for Volume Level R128. Also the Dynamic Range (R128) is .9 dB higher than Sample 1. I think this means the dither noise has been pushed lower in Sample 2.

When the dither noise is at around -190 dB per Bob Katz's measurements, I'm not sure the difference in how it might sound when amplified has any bearing on real life.

I took a file, reduced it by 50 dB and dithered to 16 bit using JRiver's DSP. I then played the file back with +50 dB in DSP Studio. There was no audible noise when played back at normal listening levels.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 22, 2014, 10:45:28 am
Did you use the bitdepth DSP in JRiver when creating the files? Audacity uses 32 bit float when performing any changes to the audio. It will then apply its own dither to the final output when reducing back to the file's native bitdepth. Amplifying to maximum volume in Audacity invalidates the test, IMO.
I applied a -50dB volume adjustment via the Parametric EQ DSP.
Bit-depth was set to 16-bit in the conversion options. (not the bit-depth simulator DSP)
 
In iZotope RX3 I simply applied a gain of -50dB, and exported as a 16-bit file using TPDF dither.
 
I chose a -50dB adjustment since it pushes the audio from this track into the lower ~6-bits of a 16-bit file. (the peaks were approximately -10dB)


Both files were then opened in Audacity and had ~60dB gain applied.
Audacity's dither is not relevant here, since dither only applies to the lower bits, and after amplification the audio is now using the highest bits.
I could do the amplification using iZotope instead, but chose Audacity to keep things impartial.

With that said, sample 2 sounded better to me.
Listen to the full samples. There is obvious distortion and noise modulation in Sample 2.
Headphones may help.

I then analyzed the file in JRiver. Sample 2 is .3 dB quieter for Volume Level R128. Also the Dynamic Range (R128) is .9 dB higher than Sample 1. I think this means the dither noise has been pushed lower in Sample 2.
Sample 1 should have ~3dB more noise than Sample 2 if Media Center is using 1LSB and iZotope is using 2LSB.
 
The volume differences are my fault for letting Audacity just maximize the gain without clipping.
It's really not relevant though, because we are not comparing noise levels. We are listening for distortion.
I could recreate the files using exactly +60dB for both, but it wouldn't make a difference.
 
When the dither noise is at around -190 dB per Bob Katz's measurements, I'm not sure the difference in how it might sound when amplified has any bearing on real life.
Well it must be 60dB down (rather than 190dB) since I amplified the signal by ~60dB.
 
For what it's worth, I did suspect that there was some noise modulation when listening to certain tracks, though I was concerned that something else might have been the cause, and this just confirms it.
 
And yes, 24-bit should be a lot better but I have some devices which only handle 16-bit audio and do use quite a large volume reduction via Media Center - not quite 60dB, but maybe 40dB or so. I know it's not ideal, but that's just how things have to be.

I took a file, reduced it by 50 dB and dithered to 16 bit using JRiver's DSP. I then played the file back with +50 dB in DSP Studio. There was no audible noise when played back at normal listening levels.
Again, be sure that you are converting to a 16-bit file. The track that you use may matter as well, it just happened to be rather obvious with solo piano like this.
It's unlikely to be an issue whatsoever with 24-bit playback, since a loss of ~10-bits (60dB) still leaves you with 14 rather than 6.
 
That said, DAC chip manufacturers like ESS have claimed that noise floor modulation is something that we can detect, even at levels which should be "inaudible" below the music.
The same argument is used with DSD vs PCM, since DSD has a variable noise floor and PCM should have a flat noise floor.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 22, 2014, 11:12:09 am
I can't speak for the file-making or exporting portion of JRiver. I've never used that facility as it's not always transparent what operations are being performed. I have a special test signal for judging noise modulation and I'll check out JRiver on PC at 24 bit and let you know. Keep in mind that 24 bit dither is so low in level that any noise modulation from moderately-incorrect dither might be inaudible below the noise of the DAC.

However, in my quiet room, with the monitor gain turned up about 12 dB, I am able to hear a 1 kHZ -140 dBFS test tone played back in JRiver with and without JRiver's dither. The distortion without dither is quite audible, and the pure tone with the dither is also detectable. But noise modulation...  at 24 bits that's asking for a lot more resolution than may be audible. But if the noise modulation is audible when the gain is turned up, I'll let you know!

As for 16-bit, I do not know if JRiver on PC is even equipped to do that properly when using the export facility the O.P. mentioned. I'd have to ask Matt.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on September 22, 2014, 12:05:00 pm
The samples sound different, but one isn't clearly better.  However, it's a false test because it's inflating inaudible noise by a huge amount.  In real life, the noise is below the threshold of hearing.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 22, 2014, 12:55:37 pm
As for 16-bit, I do not know if JRiver on PC is even equipped to do that properly when using the export facility the O.P. mentioned. I'd have to ask Matt.
If you are using WASAPI you can specify the output bit-depth in the device properties. It's not an option for ASIO.
 
The samples sound different, but one isn't clearly better.  However, it's a false test because it's inflating inaudible noise by a huge amount.  In real life, the noise is below the threshold of hearing.
60dB is not a "false test" since I have a 16-bit device which uses volume close to that level of reduction, as I have been using MC for volume control rather than the device.
The default level with Volume Protection enabled is -40dB which is approaching this.
 
And if you are trying to determine whether dither is being performed correctly of course you would use the lower bits to determine this, since that is where dither is most necessary.
 
Our threshold of hearing is said to be about 20 bits, so dither in the lower 6-bits of a 16-bit device should be audible. Quiet, but audible.
 
 
Something must be wrong in your setup if you can't hear the significant distortion in Sample 2 compared to Sample 1.
Sample 1 just has a lot of background noise, Sample 2 has variable noise and distortion.
 
I would suggest listening with a pair of good headphones rather than speakers. It should not be a subtle difference between the two samples.
There should be very bad distortion around the halfway point and in the last 15s of Sample 2. (Media Center)
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: JimH on September 22, 2014, 01:05:27 pm
I listened with Matt to the samples and both had some audible hiss.  Neither seemed better or worse.

We don't think the test is valid.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 22, 2014, 01:19:55 pm
I listened with Matt to the samples and both had some audible hiss.  Neither seemed better or worse.
We don't think the test is valid.
OK, here is around 1 second of audio taken from the same point in both tracks, each repeated for about 10s:
 
https://www.sendspace.com/file/42kywl (https://www.sendspace.com/file/42kywl)
 
First half is iZotope, second half is Media center.
iZotope's TPDF is just random noise - as it should be, Media Center is heavily distorted.
 
Let the track loop a couple of times if necessary, but I don't think you can miss it.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mwillems on September 22, 2014, 01:41:02 pm
Our threshold of hearing is said to be about 20 bits, so dither in the lower 6-bits of a 16-bit device should be audible. Quiet, but audible.

The dynamic range of an average person's hearing is about 21.5 bits (130dB), which does not imply what you're suggesting; 130dB is the distance between the threshold of pain and the threshold of audibility.  That means that (on average) we can, in laboratory conditions, hear noises 130dB quieter than noises that are so loud they cause us physical pain.  And 0dB (or close to it) is the lower bound; if you routinely listen to music with peaks reproduced at 70dB SPL in your room, in that context you can, even theoretically, only perceive a dynamic range of about 11.5 bits (70dB).

And I say theoretically because the lower bound of our hearing is mostly theoretical in non-lab conditions as most non-lab rooms have noisefloors that are between 40 and 50 dB.  For reference, some anechoic chambers used for equipment testing have 20dB noisefloors (e.g. the one silentpcreview uses for their tests), and I've never personally measured a domestic space with a noisefloor below 30dB, even in well treated home theater spaces, even at night.  I'm sure some exist, but it usually takes a lot of money and effort to get ambient SPLs lower than 30dB.  Have a look at this chart for context: http://www.sengpielaudio.com/TableOfSoundPressureLevels.htm

So that means that if you're listening on speakers in a normal home to music with peaks that reach 80dB at your listening position you'd be lucky to get 50dB of effective dynamic range before the quiet bits are lost in the noisefloor of the room.  Realistically, it's probably more like 35dB in most homes.  If you turn it up to theater reference levels with peaks to 103, you might start to actually see 60dB+ of effective dynamic range on peaks in a quiet room.  But that's pretty loud to my ears, when I've tried it.

It's a slightly different story with headphones depending on how much isolation they provide, but I don't see many headphones that offer much more than 10 or 15 dB of isolation, and the open-backed ones provide far less. You get the idea.  It's not easy to create a real world scenario where your program material and your room conspire to give you 60dB+ of dynamic range without engaging either extremely loud music or professionally treated rooms/laboratory conditions.  

I don't mean to suggest by any of that that if there were a problem here, that it shouldn't be fixed; distortion sources can "gang up" and push into clearly audible territory, or you might have a room where you can hear down to 20dB.  That said, I'm not convinced there is a problem.  Bob's measurements look good, and I don't hear clear differences between the two samples you provided; but I don't have headphones handy, I'll give another listen when I get home.

60dB is not a "false test" since I have a 16-bit device which uses volume close to that level of reduction, as I have been using MC for volume control rather than the device.
The default level with Volume Protection enabled is -40dB which is approaching this.

I'm not sure if I'm reading what you're saying correctly, but 40dB is not "approaching" 60dB, in the sense of being near it on a logarithmic scale.  60dB is literally 100 times louder than 40dB; the difference between 40 dB and 43dB of amplification is equal to the difference between 0dB and 40dB of amplification.  In perceptual terms 60dB will "seem" about four times louder than 40dB.  So unless you routinely listen at -60dB of attenuation, amplifying it by 60dB is not a good test of audibility.  If it's still obvious to you after amplifying it by whatever your normal level of attenuation is, that's a better test of audibility.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 22, 2014, 03:22:46 pm
I just wanted to say that the responses here are disappointing.

We have gone from "our dither is perfect" to "we can't hear a difference, and don't think it's a valid test"
While you don't work for JRiver mwillems, I'm saddened that your response is "here are the reasons why you couldn't possibly hear this"
 
Whether you consider it to be an "extreme example" or not, I was simply confirming that there is something wrong with the current dither implementation.
I used an example like that to try and make it really obvious - though not obvious enough, it seems.
I compared it against iZotope because Bob said that it has a perfect implementation of TPDF dither - and it seems to.
 
I don't know the technical reason for it, but it seems like Media Center may be using 1LSB rather than 2LSB as igorzep initially suggested?
 
Hopefully the second example (http://yabb.jriver.com/interact/index.php?topic=76912.msg633381#msg633381) will make things clear enough, or perhaps using headphones rather than speakers, and that will change your mind.
If it's still not obvious enough I can make a more extreme example, I just thought that -50dB would be sufficient.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 22, 2014, 03:36:08 pm
I just wanted to say that the responses here are disappointing.


Please let's first make sure you were testing the exact same thing I was testing! My test was confined to using  the "device uses 24 bit" checkbox, which is definitely dithered, and I believe also properly dithered. I cannot speak for any other options in JRiver, and frankly I wouldn't even bother with any other options since JRiver is a media player designed to feed a high quality DAC which accepts 24 bit words.

Please check that option out and then report back here. Thanks,


BK
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 22, 2014, 04:00:46 pm
Please let's first make sure you were testing the exact same thing I was testing! My test was confined to using  the "device uses 24 bit" checkbox, which is definitely dithered, and I believe also properly dithered. I cannot speak for any other options in JRiver, and frankly I wouldn't even bother with any other options since JRiver is a media player designed to feed a high quality DAC which accepts 24 bit words.

Please check that option out and then report back here. Thanks,
BK
24-bit comparison (https://www.sendspace.com/file/qbu0dz) - sorry for the size, I uploaded the full tracks by mistake.
 
It's possible that the converter processes files differently from playback, but that seems unlikely?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mwillems on September 22, 2014, 05:36:42 pm
We have gone from "our dither is perfect" to "we can't hear a difference, and don't think it's a valid test"
While you don't work for JRiver mwillems, I'm saddened that your response is "here are the reasons why you couldn't possibly hear this"

I wasn't trying to suggest that you couldn't possibly be hearing something, and I'm sorry if that's how it sounded, I was just trying to explain why I thought that the dither implementation was unlikely to be audible in the normal course of events at the best of times.  I also offered some explanations for why I thought the test might not be well-designed to expose an audible problem, but I tried to clearly say that if there is a problem with the dither implementation it should be fixed, regardless of audibility, because distortion products can add up.  Reading back over it I can see how it sounded like I was gaslighting you, and I'm sorry for that, that really wasn't my intent.

I didn't hear a clear difference between your first samples, but on headphones I hear a definite difference in quality of the noise in the 24-bit samples you provided; the izotope sample is just white noise (or something like it), but the JRiver sample noise clearly varies in volume/tonality with the source material (it sounds like it may be modulated by it).  What I find confusing is that I would expect the modulation we're hearing in those samples would have been clearly visible in Bob's measurements.  So clearly something is up somewhere, because the two tests produced results that are hard to reconcile.  The explanation for the difference is probably to be found somewhere in the differences between your testing methodologies.  You may be on to something with:

Quote
It's possible that the converter processes files differently from playback, but that seems unlikely?

That's a possible explanation.  Have you tried reducing the volume drastically in JRiver (i.e. -60dB) in real time with a 16-bit output, and then turning up the gain on your amp?  Maybe use a spare pair of earbuds if you have a high-powered headphone amp around?  If you can hear the same dither noise/modulation under those circumstances, we can rule out conversion as the issue. I may try the test myself next time I'm next to my O2; I'm pretty sure it can provide enough volume into a set of earbuds to test the hypothesis.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 22, 2014, 06:06:16 pm
That's a possible explanation.  Have you tried reducing the volume drastically in JRiver (i.e. -60dB) in real time with a 16-bit output, and then turning up the gain on your amp?  Maybe use a spare pair of earbuds if you have a high-powered headphone amp around?  If you can hear the same dither noise/modulation under those circumstances, we can rule out conversion as the issue. I may try the test myself next time I'm next to my O2; I'm pretty sure it can provide enough volume into a set of earbuds to test the hypothesis.
I could probably get around to this at the weekend, but my DAC has to be opened up to change the gain on the headphone output, so it's kind of a pain. (it's currently at -20dB)
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mwillems on September 22, 2014, 06:16:30 pm
I could probably get around to this at the weekend, but my DAC has to be opened up to change the gain on the headphone output, so it's kind of a pain. (it's currently at -20dB)

I'll be next to an amp tomorrow that should (in theory anyway) be able to push the bottom of a 96dB dither up high enough to hear in headphones.  It should at least do the trick for an unscientific test. If I can steal a half hour, I'll give it a try and report back.  Bob had mentioned above he had tried something similar with the 24-bit dither

However, in my quiet room, with the monitor gain turned up about 12 dB, I am able to hear a 1 kHZ -140 dBFS test tone played back in JRiver with and without JRiver's dither. The distortion without dither is quite audible, and the pure tone with the dither is also detectable. But noise modulation...  at 24 bits that's asking for a lot more resolution than may be audible. But if the noise modulation is audible when the gain is turned up, I'll let you know!

But it may be that with more gain than 12dB combined with 16-bit dither, it could be easier to hear.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 22, 2014, 08:28:54 pm
I'll be next to an amp tomorrow that should (in theory anyway) be able to push the bottom of a 96dB dither up high enough to hear in headphones.  It should at least do the trick for an unscientific test. If I can steal a half hour, I'll give it a try and report back.  Bob had mentioned above he had tried something similar with the 24-bit dither
I won't deny that it will be difficult to hear - and I expect that it would be very difficult to hear anything that Media Center is doing when sending 24-bit to the DAC, as the DAC's own noise floor is probably higher.
But most people (Bob included) seem to agree that dithering the signal correctly is important, and I think it's important enough that doing it correctly should matter, whether you believe it will be audible or not.
And while most hardware is 24-bit now, not all hardware is, and in some situations you will have a lot of amplification and digital attenuation.
 
I will also add that I tried the same comparison using iZotope's MBIT+ dither rather than TPDF and it makes quite a difference. Perceptually, it sounds a lot nicer than TPDF.
Now I'm not asking JRiver to license it as some people have, because I think that properly implemented TPDF is sufficient when you consider how low the noise floor should be with a 24-bit DAC, but I do at least understand why it's a big deal to some people now.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bblue on September 23, 2014, 03:58:53 pm
I have a very detailed and revealing system, and downloaded both example files for a listen.

Based on what I heard, I don't see how anyone would not be able to hear the clear differences between the first half and second half of the file 'distortion.flac' or the differences between 'izotope.flac' and 'media-center.flac' from the '24-bit Dither.zip' file.  In each example, the differences are virtually identical.  As 62 said, even at TPDF the noise is rather 'rough' compared to MBIT+ and its variants.  I played these samples through my Media Center using WASAPI out, and also VLC using a direct USB output.  Between those two there was a slight timbre difference between the samples, but the gross distortion of the Media Center samples remain the same.

I'm suspicious that something else might be going on with the Media Center examples, as in each case they sound like the noise is 'chopping' at around 30Hz or so.  It's anything but smooth, and one could call it distorted.  I've never heard anything like it here on my Media Center except for in these files.

Whatever, it's very very obvious here.

--Bill
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mwillems on September 23, 2014, 06:55:16 pm
I won't deny that it will be difficult to hear - and I expect that it would be very difficult to hear anything that Media Center is doing when sending 24-bit to the DAC, as the DAC's own noise floor is probably higher.
But most people (Bob included) seem to agree that dithering the signal correctly is important, and I think it's important enough that doing it correctly should matter, whether you believe it will be audible or not.
And while most hardware is 24-bit now, not all hardware is, and in some situations you will have a lot of amplification and digital attenuation.
 
I will also add that I tried the same comparison using iZotope's MBIT+ dither rather than TPDF and it makes quite a difference. Perceptually, it sounds a lot nicer than TPDF.
Now I'm not asking JRiver to license it as some people have, because I think that properly implemented TPDF is sufficient when you consider how low the noise floor should be with a 24-bit DAC, but I do at least understand why it's a big deal to some people now.

So I performed some relatively "naive" listening tests and here's what I found based on the following parameters:

I used an old pair of Klipsch earbuds with a rated sensitivity of 115dB/mw hooked into two different sources, an Odac/O2 combo and the headphone jack of my Steinberg UR824.  In both cases I turned MC's internal volume to -60dB and turned the amplifier gain all the way up.  

The Odac/O2 does not have ASIO capability, so I used WASAPI, and I set the output bitdepth to 16 bit with attenuation set to -60dB. I could hear the music clearly, but any noise below it was quite soft.  I could hear a soft white noise below the music that was not present when playback was completely stopped.  Based on some differential testing, I believe that the white noise I was hearing was MC's dither, not the noisefloor of the equipment.  I did not hear noticeable noise modulation, although the levels of the noise in question were admittedly a little soft.

Not satisfied with that result, I thought I might force the issue by using the bitdepth simulator at home with my Steinberg.  With the Steinberg I tried an ASIO output and used the bitdepth simulator in PEQ to test a 16, 15, and 14 bit output with a -60dB signal.  The PEQ filter is especially useful because it allows you to toggle dither and so hear the signal with and without dither.  Using that method, with dither enabled on a 16-bit simulation, I only heard white noise below the music with no noticeable modulation, similar to the izotope recording above or what I heard in the O2.  

Simulating lower bitdepths (14 in particular) I did hear noticeable distortion as the dither became louder than some of the softer parts of the music, but the tone of the dither definitely sounded just like white noise to me (unlike the MC clips above), although it did vary in volume as the program material peaked and troughed (suggesting some modulation).  Trying lower bitdepths (like 12 or 13) more or less obliterated the music such that it was hard to assess whether I was hearing modulation or just that half the music was missing, although there did seem to be some modulation going on.  

However, an interesting result was what the 14 bit simulation sounded like with dither turned off.  To my ear, it sounded particularly similar to the MC dither clips included above.  That makes me suspect that Media Center may not be dithering on conversion, and what we're hearing may just be the distortion produced by simple truncation.  

Admittedly this was a sighted and unscientific test, and I was using different program material (although I was using solo piano music to try and keep it similar). That said, I encourage anyone interested to try using the bitdepth simulator to recreate 623368's and my experiments and see what you think.  Basically set the bitdepth six or seven bits lower than your current volume level (i.e. 16 bits for -60dBFS, 6 bits for 0dBFS) and try toggling the dither check box and then gradually decreasing the bitdepth and retoggling.  6233638 I'm particularly interested in your impressions using the bitdepth simulator.

But for the record, I definitely did hear some changes in the volume of the dither noise along with the program material with MC's dithered signal, which I'm not sure what to make of, as Bob's measurement's did not appear to show any such modulation.

So it seems like we've got two possibilities:
Either
1) Dither is not being correctly applied on conversions (in which case we're just looking at a bug) or
2) We need to reconcile the two apparently inconsistent tests (i.e. clips with audible noise modulation, and Bob's measurements which don't seem to show that)

It seems like option 1) should be readily confirmable or disconfirmable.  If no one can confirm before the weekend, I may try and actually take measurements and see.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 23, 2014, 08:05:49 pm
Thanks for taking the time to test it.
 
Since my DAC2 has a lot more gain than the ODAC, and I have some very sensitive (and isolating) headphones, after reading your results I ended up opening it and changed the gain on the headphone outputs.
With the 20dB attenuation removed from the headphone outputs, this distortion is clearly audible on playback when outputting a 16-bit signal at low volume levels in Media Center.
 
So it confirms that this is not just an issue with the converter or bit-depth simulator, but Media Center's dithering in general.
There is no reason to believe that it would be any different when outputting a 24-bit signal, it just buries the problem lower down and makes it more difficult to hear.
 
Simulating lower bitdepths (14 in particular) I did hear noticeable distortion as the dither became louder than some of the softer parts of the music, but the tone of the dither definitely sounded just like white noise to me (unlike the MC clips above), although it did vary in volume as the program material peaked and troughed (suggesting some modulation).  Trying lower bitdepths (like 12 or 13) more or less obliterated the music such that it was hard to assess whether I was hearing modulation or just that half the music was missing, although there did seem to be some modulation going on.
I had avoided the bit-depth simulator because it was suggested that it may be different from playback, but both the simulator and conversion show similar results.
 
To be equivalent to -60dB at 16-bit, you would set the simulator to 6-bit (60dB = 10-bit) and listen at normal levels.
 
With properly implemented TPDF dither, as you decrease the bit-depth all you should hear is louder and louder white noise. It should not be introducing this type of distortion.
 
However, an interesting result was what the 14 bit simulation sounded like with dither turned off.  To my ear, it sounded particularly similar to the MC dither clips included above.  That makes me suspect that Media Center may not be dithering on conversion, and what we're hearing may just be the distortion produced by simple truncation.  
It's definitely performing dither on conversion - things would be far worse without any - it's just not dithering correctly.
Reducing the bit-depth without dither at all will introduce similar distortion much sooner.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 23, 2014, 09:02:10 pm
You're barking up the wrong tree. Whatever you have found may only be true for the method you used to produce the 16 bit file. The measurements and sonic observations I passed on earlier for JRiver's 24-bit dithered output remain true. DSP/options/checkbox "device uses 24 bits". In JRiver for PC. This produces an accurate, dithered 24-bit output.

As to whether JRiver's 24-bit dither is sufficiently random (true TPDF) it's highly likely given the buzz test and other tests I have made. It's certainly very clean. But as soon as I get a minute I'll do a gonger (noise modulation) test. The facts are that no one would be interested in producing a 16-bit output with JRiver. For what purpose? JRiver is not a DAW. Personally I would never use it as a file conversion tool. It's resolution and signal handling DOING WHAT IT IS INTENDED TO DO are impeccable. MC is not intended to be a signal processor for file production, at least I would never use it that way. It's intended to be a file playback tool to feed high quality DACs, all of which are capable of and perform better receiving 24-bit signals.

Who would need or desire to use River to produce a 16-bit output? Please tell me when you would need it. This thread is really starting to piss me off. Why are you ignoring the evidence I presented in other recent posts? The method you are using to produce a 16-bit signal is completely different and should not lead you to the conclusion that something is wrong. Read the rest of the thread, 2014 posts only. In 2013, Matt, with my help and guidance and that of others, produced a highly-functional 24-bit dithered output from JRiver on PC. Prior to that there was a problem. Those observations are still in this thread but way out of date. 

Damn, people are stubborn.

BK

Thanks for taking the time to test it.
 
Since my DAC2 has a lot more gain than the ODAC, and I have some very sensitive (and isolating) headphones, after reading your results I ended up opening it and changed the gain on the headphone outputs.
With the 20dB attenuation removed from the headphone outputs, this distortion is clearly audible on playback when outputting a 16-bit signal at low volume levels in Media Center.
 
So it confirms that this is not just an issue with the converter or bit-depth simulator, but Media Center's dithering in general.
There is no reason to believe that it would be any different when outputting a 24-bit signal, it just buries the problem lower down and makes it more difficult to hear.
 I had avoided the bit-depth simulator because it was suggested that it may be different from playback, but both the simulator and conversion show similar results.
 
To be equivalent to -60dB at 16-bit, you would set the simulator to 6-bit (60dB = 10-bit) and listen at normal levels.
 
With properly implemented TPDF dither, as you decrease the bit-depth all you should hear is louder and louder white noise. It should not be introducing this type of distortion.
 It's definitely performing dither on conversion - things would be far worse without any - it's just not dithering correctly.
Reducing the bit-depth without dither at all will introduce similar distortion much sooner.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 23, 2014, 09:12:52 pm
You may have found a "defective" area of JRiver, but I would never use MC this way, I wouldn't recommend it to anyone. I would never trust a reduction in JRiver to produce a shorter wordlength file unless they make an explicit claim that method is properly dithered. Where does JRiver make that claim?

There is only one section of JRiver PC that produces a properly dithered output to my knowledge, and that is the DSP/options section where you can check the 24-bit checkbox when using ASIO. And as you already should know by now, I've tested, retested and listened.... and rest quite satisfied that this section of the program produces an adequate level of dither. I haven't tested for noise modulation, but I have never heard any, and the depth is excellent. It sounds as good as sending a 64-bit float signal via Acourate ASIO to Acourate convolver doing Acourate dither, which I also tested and went over with Uli Brueggemann for months until I was satisfied! Please read my post Reply #74, Sept. 16, with the buzz measurements. With measurements that good, things can't be very broken! Please respond to that message. If you have a scientific measurement that refutes these, by all means show it. 24-bit dither checkbox in ASIO in the DSP options section.

BK


Sample 1 is iZotope’s TPDF dither.
Sample 2 is Media Center.  (ftp://Sample 2 is Media Center.)

This seems related to the 2LSB discussion recently (http://yabb.jriver.com/interact/index.php?topic=76912.msg631071#msg631071).

https://www.sendspace.com/file/3mdbe9 (https://www.sendspace.com/file/3mdbe9)
 
Sample 1 is iZotope's TPDF dither.
Sample 2 is Media Center's dither.
 
 
Samples were created by performing a large gain reduction (-50dB) and exporting a 16-bit file, which pushes the signal into the lower bits. The conversion tool was used for this in Media Center.
Both files were then amplified to the maximum volume possible without clipping in Audacity. (about +60dB)
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bluescale on September 23, 2014, 09:46:17 pm
There is only one section of JRiver PC that produces a properly dithered output to my knowledge, and that is the DSP/options section where you can check the 24-bit checkbox when using ASIO.

With that in mind, is there a reason for JRiver to allow 16-bit output?  If other methods or usage are invalid/erroneous, why not make JRiver error-proof?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 24, 2014, 12:39:29 am
You may have found a "defective" area of JRiver, but I would never use MC this way, I wouldn't recommend it to anyone. I would never trust a reduction in JRiver to produce a shorter wordlength file unless they make an explicit claim that method is properly dithered. Where does JRiver make that claim?
To quote Matt:
“[…] our dither is bit-perfect.  There are lots of ways to do a dither, and ours is chosen for strategic reasons.”

There are also many posts on the forum where people are recommended to use Media Center for volume control in their setup because, to paraphrase, "Media Center does it right, you don't know what your AVR is doing."
 
Perhaps it did work correctly and this is a recently introduced bug. I don't know.
But now that this problem has been found and is reproducible, should it not be corrected, rather than arguing over how bad a problem it is, or why it doesn't affect your particular setup?
 
I'm not asking for the dither to be changed to implement noise shaping, or license iZotope's MBIT+ dither algorithms for example, only that the current TPDF implementation be fixed.
 
There is only one section of JRiver PC that produces a properly dithered output to my knowledge, and that is the DSP/options section where you can check the 24-bit checkbox when using ASIO.
If it's dithering correctly there, that should be applied to the rest of the program.
I don't see why it would be any different from other output methods though.
 
I don't have a good ADC or a device to record a digital signal from the PC to see whether or not ASIO differs from the rest of the program.
There is probably some software which can capture the ASIO output directly, but it really should not be necessary at this point, as we have shown that there is a problem.
 
And as you already should know by now, I've tested, retested and listened.... and rest quite satisfied that this section of the program produces an adequate level of dither. I haven't tested for noise modulation, but I have never heard any, and the depth is excellent.
If you are only using 24-bit then it does not surprise me if you haven't heard noise modulation - especially if you are using speakers, because your DAC or amplifier's noise floor is likely above that of the signal and masking it.
 
I don't know if the problems introduced by these errors only affect signals near the noise floor, or if there could be effects at higher levels as well.
 
And just because it may not be a problem in one setup, does not mean that it won't be in another.
I would think that checking the output in the digital domain would be far more accurate than passing it through your DAC, Amplifier, and Speakers when testing this sort of thing.

It sounds as good as sending a 64-bit float signal via Acourate ASIO to Acourate convolver doing Acourate dither, which I also tested and went over with Uli Brueggemann for months until I was satisfied! Please read my post Reply #74, Sept. 16, with the buzz measurements. With measurements that good, things can't be very broken! Please respond to that message. If you have a scientific measurement that refutes these, by all means show it. 24-bit dither checkbox in ASIO in the DSP options section.
Consider that it may pass one test and fail another.
If you only use the test that it passes, you might believe the implementation to be perfect.
Does that make it so?
 
Let's even ignore the fact that it is distorting - or that what I am calling distortion, you might not. As a layman, I'd say that it sounds distorted to me in the samples that I have posted - whatever the cause is.
 
When dither is properly implemented, the signal should not modulate the noise.  Surely you agree with that?
 
One of the more noticeable effects of this noise-floor modulation is that it sometimes goes completely silent in Media Center.
iZotope's TPDF implementation—which I trust to be correct since they are in the business of licensing their dither algorithms to other companies—is never silent, even when the track is playing silence.
 
I make no claims to being an expert on this subject whatsoever, I'm only describing the problems that I hear. Stuff like this (http://www.robertwannamaker.com/writings/rw_phd.pdf) goes right over my head.
However, could it be that Media Center is using <2LSB for its dither, which allows the signal to modulate the noise, while iZotope is using 2LSB?
For all I know, this could just be a variable which needs to be set in Media Center's code, rather than some major change.
 
As to whether JRiver's 24-bit dither is sufficiently random (true TPDF) it's highly likely given the buzz test and other tests I have made.
I don't believe that it's a "randomness" problem.
 
 
Who would need or desire to use River to produce a 16-bit output? Please tell me when you would need it.
With that in mind, is there a reason for JRiver to allow 16-bit output?  If other methods or usage are invalid/erroneous, why not make JRiver error-proof?
Well for one thing, a lot of hardware is 16-bit.
I have devices here which accept a 24-bit input, but actually only send 16-bit over their digital outputs.
I have no idea whether they handle this conversion correctly, but I know that Media Center should, if this gets fixed, and it would be best to send them a properly dithered 16-bit signal instead.
 
Most networked hardware is only 16-bit, and when using Gizmo/JRemote for control, volume would normally be adjusted by Media Center.
 
Listening carefully with headphones on and using the bit-depth simulator, I would say that the noise floor modulation starts to become quite noticeable at about 12-bit.
 
So with 16-bit devices, anything below -24dBFS is distorting.
Considering that the Volume Leveling target is -23dBFS, that's a problem.
 
 
And I hardly think that the solution to "there's a problem with dither which is noticeable with 16-bit" is to drop support for 16-bit signals.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 24, 2014, 08:37:39 am
Now we are moving forward and on the same page. One thing about software, a programmer was asked by his boss if there are any bugs in the program. The programmer replied, "None that we have found yet."

On the same vein, as long as posters don't leap to conclusions that if they found something broken in one section of MC it must be broken everywhere else, I'm good with the suggestions to improve other aspects of MC.

Here are my feelings:

1) Define the real areas where actual users of Media Center would gain performance by Matt spending his valuable time improving the dithering to 16 bit. Personally, as a user of Media Center who plays music in one room over high quality DACs, I'm not interested in any other area of the program. But if you need to lobby for better performance for real users, then by all means go for it! However, I do think the methods and tools you had available to analyze performance were not completely adequate and personally I would have to make my own tests using better tools to be personally satisfied that your claims are valid. I'm not saying your claims are invalid, just that you have not supplied properly-gathered evidence of the problem, only a smoking gun as it were.

2) Horses for courses. When it comes to preparing and outputting audio files, MC is a Shetland Pony in a field of Thoroughbreds. And rightly so, as a $40.00 application, it's amazingly full-featured and very high quality. But it is not a DAW, and it cannot compete with the several hundred-dollar to mult-thousand-dollar DAW applications which can edit, show waveforms, selectively dither only when necessary --- under the direction of the professional audio engineer, conveniently process, assemble, mix, etc.

I don't think that trying to turn MC into a DAW would be a useful, practical, or business-worthy endeavor for JRiver to do.

If you truly think that MC needs to properly apply dither in certain areas, then please define those areas and how real users of the application need this performance and we'll continue the discussion. If you can please give the menu items and choices which you have in question in my copious free time I'll try to do tests on them. Or maybe someone else who's equipped can do so because this is a very busy month for me! (Sorry)
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 24, 2014, 12:19:08 pm
1) Define the real areas where actual users of Media Center would gain performance by Matt spending his valuable time improving the dithering to 16 bit. Personally, as a user of Media Center who plays music in one room over high quality DACs, I'm not interested in any other area of the program. But if you need to lobby for better performance for real users, then by all means go for it! However, I do think the methods and tools you had available to analyze performance were not completely adequate and personally I would have to make my own tests using better tools to be personally satisfied that your claims are valid. I'm not saying your claims are invalid, just that you have not supplied properly-gathered evidence of the problem, only a smoking gun as it were.
Well the AirPlay receivers I have in use, and the DLNA speakers that I tried recently were all 16-bit devices.
Now it could be argued that 16-bit hardware these days when 24-bit is cheap, is probably not very high quality, but I don't think that means this should be ignored.
I also think 16-bit is used in a lot of these devices to save bandwidth rather than compromise on quality.
 
As I previously posted before testing this, I had noticed some noise modulation on playback before, but since everyone else had posted that "media center does it right" with regards to dither/volume control, I assumed it was the hardware at fault and had not taken the time to test it.
 
After testing with both the bit-depth simulator—since it is far more convenient to use and seems to produce the same results—and outputting a 16-bit signal to my Benchmark DAC2, I do hear the modulation quite clearly once the bit-depth is reduced to 12-bit, which is only a 24dB attenuation in 16-bit, and very close to the target used for Volume Leveling.
 
This is at normal listening levels, not greatly amplified listening levels.
So if you are using 16-bit devices and have Volume Leveling active, everything you play is going to be affected by this.
 
Now I know that you would not normally send a 16-bit signal to a 24-bit device, but I did this to confirm that it's not the $99 AirPlay hardware at fault, since I can hear it on a $2000 DAC as well.

2) Horses for courses. When it comes to preparing and outputting audio files, MC is a Shetland Pony in a field of Thoroughbreds. And rightly so, as a $40.00 application, it's amazingly full-featured and very high quality. But it is not a DAW, and it cannot compete with the several hundred-dollar to mult-thousand-dollar DAW applications which can edit, show waveforms, selectively dither only when necessary --- under the direction of the professional audio engineer, conveniently process, assemble, mix, etc.

I don't think that trying to turn MC into a DAW would be a useful, practical, or business-worthy endeavor for JRiver to do.

If you truly think that MC needs to properly apply dither in certain areas, then please define those areas and how real users of the application need this performance and we'll continue the discussion. If you can please give the menu items and choices which you have in question in my copious free time I'll try to do tests on them. Or maybe someone else who's equipped can do so because this is a very busy month for me! (Sorry)
To be clear, I am not expecting MC to be a DAW.
I was only using the conversion feature for this test because it is the easiest way for me to get a "recording" of Media Center's output after making volume adjustments.
 
Since I have now been able to compare Media Center's 16-bit output on playback, the files produced when converting to 16/24-bit, and the bit-depth simulator, I don't believe that there are different dither implementations used in each part of the program.
Without being able to properly test it here, I can't dispute that the 24-bit ASIO output may be different though - but I don't think that is important when every other aspect of the program does have this issue.
 
As I see it, worst case scenario is that fixing this will audibly improve 16-bit playback, and may also improve the quality of 24-bit.
It should measurably improve the quality of 24-bit playback, even if it may not result in an audible change in many setups - but in some setups it may even be an audible improvement.
It has been suggested by companies like ESS that people are actually susceptible to hearing noise-floor modulation even when it should theoretically be far too quiet to hear. It's not that we are consciously aware of the noise floor, but that we pick up on the modulation of it as it changes.
 
And again, I'm not an expert on this so I don't know what the cause is. I just know that it's an audible problem in my setup that I had previously attributed to other devices.
I suspect that it is related to Media Center's dither using <2LSB, but I couldn't say for sure.
Hopefully Matt or Hendrick will be able to identify the cause and it will be a relatively easy fix.
From what I do understand of it, this paper (http://www.robertwannamaker.com/writings/rw_phd.pdf) that was linked to before seems like it might be helpful. I hope that it really does not have to be much more than tweaking the values used for the current dither implementation rather than being a big job.
 
And since the bit-depth simulator seems to produce similar results to playback, I would suggest that it might be a useful way to quickly confirm whether the issue has been fixed.
Reducing it to ridiculously low levels like 6-bit or even 4-bit will currently produce a lot of obvious distortion and noise modulation - so obvious that I don't think it is possible to miss it.
With correctly implemented TPDF dither, reducing the bit-depth to levels like this should really only be introducing louder and louder white noise, rather than sounding more and more distorted.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 24, 2014, 12:27:58 pm
Well the AirPlay receivers I have in use, and the DLNA speakers that I tried recently were all 16-bit devices.


So, please tell us exactly what method you are using to reduce the wordlength.

Quote


Since I have now been able to compare Media Center's 16-bit output on playback, the files produced when converting to 16/24-bit, and the bit-depth simulator, I don't believe that there are different dither implementations used in each part of the program.


Doubting Thomas, eh?  I suspect that whatever method you are using is not dithered at all, just truncated. We can lay the blame on MC if you wish, but you have not provided evidence to point to a defect in the ASIO-24 bit output. I spent a good deal of time and Matt as well, making sure that portion of the program is properly dithered.

I believe the bit-depth simulator is truncated. Bad design, but I just ignored it and never use it. Don't recommend it.  It's just a throw-in part of the program as far as I'm concerned. You're using bad tools to make your judgments. You need better tools. Again, you could put the blame on MC, but I'm used to seeing truncated routines that should never be used for judgments, and I suspect the bit-depth simulator is one of them.

BK
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Matt on September 24, 2014, 12:56:02 pm
I'm used to seeing truncated routines that should never be used for judgments, and I suspect the bit-depth simulator is one of them.

Yes, the bitdepth simulator is rough and dirty.  It definitely shouldn't be used in critical trials.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on September 24, 2014, 01:08:42 pm
When you Convert Audio, you can use either the bit-depth simulator with the dither box checked or you can use the Bitdepth option at the bottom of the Convert Audio options. I would assume the Bitdepth option applies dither similar to ASIO output, but I'm not sure.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 24, 2014, 01:10:17 pm
So, please tell us exactly what method you are using to reduce the wordlength.
Selecting 16-bit in the WASAPI Device Settings.

Doubting Thomas, eh?  I suspect that whatever method you are using is not dithered at all, just truncated. We can lay the blame on MC if you wish, but you have not provided evidence to point to a defect in the ASIO-24 bit output. I spent a good deal of time and Matt as well, making sure that portion of the program is properly dithered.
I have repeatedly stated that I have not tested the 24-bit ASIO output, nor do I have things set up in a way which would allow me to.
The 24-bit option for ASIO output may indeed be the one area of the program which dithers correctly. I just haven't confirmed that one way or the other.
 
File conversion (16 or 24 bit), 16-bit WASAPI Exclusive playback, and the simulator all have this issue.
If the issue only existed in the simulator, it wouldn't matter because no-one is going to use that for normal playback.
 
I believe the bit-depth simulator is truncated. Bad design, but I just ignored it and never use it. Don't recommend it.  It's just a throw-in part of the program as far as I'm concerned. You're using bad tools to make your judgments. You need better tools. Again, you could put the blame on MC, but I'm used to seeing truncated routines that should never be used for judgments, and I suspect the bit-depth simulator is one of them.
Well there's an option to enable/disable dither in the simulator. Still, I had been avoiding it in my initial testing specifically because it may not be doing things correctly.
The results I get from the simulator are very similar to what I get from playback and conversion though.
I just thought it might make things easier for Matt to test, since he seemed to have difficulty hearing the problem in my other comparisons and it's very obvious when you drop the simulator to something like 4-bit.
 
When you Convert Audio, you can use either the bit-depth simulator with the dither box checked or you can use the Bitdepth option at the bottom of the Convert Audio options. I would assume the Bitdepth option applies dither similar to ASIO output, but I'm not sure.
I used the bit-depth option for conversion, not the simulator when testing converted files.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: andyc56 on September 24, 2014, 01:50:54 pm
To quote Matt:
“[…] our dither is bit-perfect.  There are lots of ways to do a dither, and ours is chosen for strategic reasons.”

That's an interesting quote, and I was baffled by it at first.  But then I thought about it some more, and came up with the following.

Rounding of a double "x" to an integer "y" is usually done with a simple routine something like this:

y = floor(x + 0.5)

Where "floor(u)" is "the greatest integer that's less than or equal to u (http://msdn.microsoft.com/en-us/library/x39715t6.aspx)".

Let's look at this operation for x = 7.49 and x = 7.50

floor(7.49 + 0.5) = floor(7.99) = 7
floor(7.50 + 0.5) = floor(8.00) = 8

So that's rounding in the usual way we think of it.  With dither, we add a value "d" to x before doing the rounding operation.  The d value comes from a random number generator and has an average value of 0.  So now:

y = floor(x + d + 0.5)

Suppose x represents an integer that's been converted to a double directly with no processing at all (no attenuation).  We'd like to find the range of allowable values for d such that y = x whenever x has an integer value.  This would be "bit-perfect dither".  We find that:

-0.5 <=  d  < 0.5

That is, in order to have "bit-perfect dither" by this definition, the dither values must be restricted to plus or minus one-half an LSB.  But we know from Wannamaker's thesis that the simplest dither that prevents noise modulation is triangular PDF dither with a value of 2 LSB peak-to-peak, or

-1.0 <= d < 1.0

Therefore, the concepts of "bit-perfect dither" and "dither that eliminates noise modulation" are mutually exclusive.  If you have "bit-perfect dither", you will have noise modulation.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 24, 2014, 02:22:21 pm
OK, here is a recording from the 24-bit ASIO output: https://www.sendspace.com/file/sgthwz (https://www.sendspace.com/file/sgthwz)
 
Therefore, the concepts of "bit-perfect dither" and "dither that eliminates noise modulation" are mutually exclusive.  If you have "bit-perfect dither", you will have noise modulation.
I'd rather the dither be correct rather than "bit-perfect"
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 24, 2014, 03:58:05 pm
My FFT measurements show that MC's dither amplitude is even slightly higher than Izotope Ozone, so I can only assume that MC's dither is far greater than 1/2 a bit! I'm betting at least 2 bits peak to peak. I would have heard the distortion from 1/2 a bit, I have some strong methods to detect dither issues even down to the 24th bit.... (quiet room, extra analog gain when needed in the monitoring, superb DAC, good, trained ears).

But I must take a look at a bitscope and do some noise modulation tests to try to quantify MC's dither so we can close this case definitively. Regardless, my take on it has been that MC takes some liberty with the term bit-perfect. I think he means it in a different sense than the math you are trying to show below. From my point of view, if you add noise, you can't match the source, and that would not be bit-transparent.

However, from a statistical point of view, the source is matched, so MC IS bit-transparent, because the average will remain the same. If you subtract the dither noise from the result you will get exactly the original bits. So their language is a bit of marketing speak, because it's not entirely accurate strictly speaking.

in the meantime I can sleep quite well knowing that MC is quite well dithered at 24 bits, at least with the ASIO output. I can hear the difference.

BK


That's an interesting quote, and I was baffled by it at first.  But then I thought about it some more, and came up with the following.

Rounding of a double "x" to an integer "y" is usually done with a simple routine something like this:

y = floor(x + 0.5)

Where "floor(u)" is "the greatest integer that's less than or equal to u (http://msdn.microsoft.com/en-us/library/x39715t6.aspx)".

Let's look at this operation for x = 7.49 and x = 7.50

floor(7.49 + 0.5) = floor(7.99) = 7
floor(7.50 + 0.5) = floor(8.00) = 8

So that's rounding in the usual way we think of it.  With dither, we add a value "d" to x before doing the rounding operation.  The d value comes from a random number generator and has an average value of 0.  So now:

y = floor(x + d + 0.5)

Suppose x represents an integer that's been converted to a double directly with no processing at all (no attenuation).  We'd like to find the range of allowable values for d such that y = x whenever x has an integer value.  This would be "bit-perfect dither".  We find that:

-0.5 <=  d  < 0.5

That is, in order to have "bit-perfect dither" by this definition, the dither values must be restricted to plus or minus one-half an LSB.  But we know from Wannamaker's thesis that the simplest dither that prevents noise modulation is triangular PDF dither with a value of 2 LSB peak-to-peak, or

-1.0 <= d < 1.0

Therefore, the concepts of "bit-perfect dither" and "dither that eliminates noise modulation" are mutually exclusive.  If you have "bit-perfect dither", you will have noise modulation.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: andyc56 on September 24, 2014, 05:32:42 pm
However, from a statistical point of view, the source is matched, so MC IS bit-transparent, because the average will remain the same. If you subtract the dither noise from the result you will get exactly the original bits. So their language is a bit of marketing speak, because it's not entirely accurate strictly speaking.

Any dither with zero mean is bit-perfect in the average sense, so that's not saying much.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 24, 2014, 05:39:27 pm
Any dither with zero mean is bit-perfect in the average sense, so that's not saying much.

True --- if the dither is properly implemented. But I have seen processors with DC offset, stuck bits, poor calculation resolution....
Which is not the case with JRiver. So I think part of what JRiver is trying to say is that MC employs accurate, high resolution calculations, which preserves the sonic integrity with the lowest distortion, and implements the dither correctly so as not to add any distortion or offset upon conversion to fixed point.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: andyc56 on September 24, 2014, 06:19:28 pm
So I think part of what JRiver is trying to say is that MC employs accurate, high resolution calculations, which preserves the sonic integrity with the lowest distortion, and implements the dither correctly so as not to add any distortion or offset upon conversion to fixed point.

The actual concerns being expressed are much more specific than this though.  Wannamaker's thesis compares the properties of rectangular PDF dither of 1 LSB peak-to-peak (which can be described as "bit-perfect dither" according to the criteria I posted earlier) with the optimum triangular PDF dither of 2 LSB peak-to-peak.  Of the rectangular PDF dither, he states (emphasis mine):

Quote from: Wannamaker
The first conditional moment, or mean error, in Fig. 4.4 is zero for all inputs, indicating that the quantizer has been linearized by the use of this dither thus eliminating distortion. The error variance, on the other hand, is clearly signal-dependent, so that the noise power in the signal varies with the system input. This is sometimes referred to as noise modulation, and is undesirable in many applications, such as in audio where audible time-dependent error signals are considered intolerable.

This is on page 94 in the page box of Adobe Reader, which is page 78 on the top page margin.

So the issues of distortion and noise modulation are separate: the distortion elimination being accomplished by rendering the first moment of the error independent of the input.  But noise modulation can only be eliminated by rendering the second moment of the total error independent of the input, which this rectangular PDF dither does not do.

He goes on to describe the optimum triangular PDF dither as follows:

Quote from: Wannamaker
The first three derivatives of this function, and the corresponding moments as a function of the input, are plotted in Fig. 4.5. The first and second derivatives of this function go to zero at the required places, so this dither renders both the first and second moments of the total error independent of x. The second moment of the total error is a constant delta2/4 for all inputs, in agreement with Eq. (4.30). In this case the use of an appropriate dither has eliminated both distortion and noise modulation.

That's on page 96 in the page number box (page 80 of the document itself).

So per the above it's possible to eliminate distortion with the rectangular PDF dither, but not noise modulation.  The optimum triangular PDF dither eliminates both.  That is the concern.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 25, 2014, 07:53:49 am
The actual concerns being expressed are much more specific than this though.  Wannamaker's thesis compares the properties of rectangular PDF dither of 1 LSB peak-to-peak (which can be described as "bit-perfect dither" according to the criteria I posted earlier) with the optimum triangular PDF dither of 2 LSB peak-to-peak.  Of the rectangular PDF dither, he states (emphasis mine):



I am aware of these, of course. 0.5 dB p-p is often misused as an "auto-black" method, but of course if you have auto-black like this, then you will also get noise modulation! To repeat my previous posts:

I measured the peak to peak amplitude of JRiver's 24-bit dither with Spectrafoo's FFT, comparing it with Izotope's dither. I mentioned that it is AT LEAST as high, in fact a hair higher p-p than Izotope. The randomness on the screen appears to be similar to that of Izotope as well. So I reached the conclusion that AT LEAST JRiver is in the ballpark and I've stated several times that I will do some tests for noise modulation in the near future. Keep in mind that MORE dither level does not hurt* as long as it is TPDF and at least the recommended p-p amplitude. Who could ask for more?  :-)

BK

* It takes many generations of flat 24 bit dither accumulated to even reach the noise floor of a DAC. In most situations even the nominal -120 dBFS noise floor of a good DAC with associated preamplifiers is inaudible.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: AndyU on September 25, 2014, 07:57:45 am

There is only one section of JRiver PC that produces a properly dithered output to my knowledge, and that is the DSP/options section where you can check the 24-bit checkbox when using ASIO.
BK


Guys I am a bit concerned by this statement and the rest of this thread and though I don't understand all the technicalities, I can see that there is real disagreement between competent people.  Not everyone has a DAC that has an ASIO driver, with many the best you can do seems to be WASAPI.

In your opinion(s)..

Does this mean that if I have a DAC  with which I use the WASAPI driver then JRiver will produce incorrectly dithered output when using the JRiver's volume control or DSP? What effect does setting the bit-depth in JRiver have?

Does it mean that if I have a DAC with a 32 bit ASIO driver then JRiver will  produce incorrectly dithered output when using the volume control?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 25, 2014, 08:26:19 am
ASIO set to output a 24-bit signal still distorts, I posted a small sample here: http://yabb.jriver.com/interact/index.php?topic=76912.msg633875#msg633875 (http://yabb.jriver.com/interact/index.php?topic=76912.msg633875#msg633875)
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bluescale on September 25, 2014, 10:08:14 am
And I hardly think that the solution to "there's a problem with dither which is noticeable with 16-bit" is to drop support for 16-bit signals.

My point was that JRiver should do it right, or not do it at all.  My guess is that dropping support for 16-bit devices is not a palatable option for the folks at JRiver...
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Sheriff1972 on September 25, 2014, 05:54:28 pm
watching this thread closely.

Bruno has been around the block a few times when it comes to digital and is seldom wrong.

How hard would it be to implement the 'fix' and send a this version of software out to a few people for testing?

I guess only Matt knows for sure
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 26, 2014, 10:08:00 am
OK, here is a recording from the 24-bit ASIO output: https://www.sendspace.com/file/sgthwz (https://www.sendspace.com/file/sgthwz)
 I'd rather the dither be correct rather than "bit-perfect"

I'll check out your recording shortly. You made a .dmg file. This was on a Mac? I thought we were discussing JRiver ASIO on PC. Could you please tell us the provenance of your recording. Thanks,


Bob
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 26, 2014, 10:10:48 am
Oops... be careful what you click on from Sendspace. They intentionally confuse the reader so he can end up downloading their extensions and their ads instead of the actual file. I found the zip file...

Please tell us its provenance, 6233638... and what is your name, please.


Bob
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Hendrik on September 26, 2014, 10:11:41 am
You probably clicked the wrong download link, and hit an ad instead.
The proper link is a text link that says "Click here to start download from sendspace"
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 26, 2014, 10:35:37 am
Andy, I completely sympathize. This thread was started by me back in early 2013 and you can follow its progress. I think you will note that very few people brought up any other options, perhaps none. So in general the vast majority of the JRiver audience expects the program to work, work properly, and not require that the user do much special to guarantee good quality sound. I was under the impression from the thread that WASAPI was dithered. Why not follow this whole thread through, from the beginning when the program was not properly dithered, to today, and you'll note that this is really an esoteric topic.

I don't use WASAPI so I can't speak for this with authority, but I feel your pain. Maybe it is dithered properly. Then there's 62xxxx's post of today, whose provenance was not given, with a sample flac file for examination and his claim that there is distortion. I am skeptical, but more than willing to go the mile and see what's up. I haven't checked it yet, but if we don't know how the file was created, down to the utmost detail, then we know next to nothing. A good scientist would have reported what the source is, how it was generated, what options were checked in JRiver, and how it was recorded.

BK

Guys I am a bit concerned by this statement and the rest of this thread and though I don't understand all the technicalities, I can see that there is real disagreement between competent people.  Not everyone has a DAC that has an ASIO driver, with many the best you can do seems to be WASAPI.

In your opinion(s)..

Does this mean that if I have a DAC  with which I use the WASAPI driver then JRiver will produce incorrectly dithered output when using the JRiver's volume control or DSP? What effect does setting the bit-depth in JRiver have?

Does it mean that if I have a DAC with a 32 bit ASIO driver then JRiver will  produce incorrectly dithered output when using the volume control?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 26, 2014, 10:36:57 am
Oops... be careful what you click on from Sendspace. They intentionally confuse the reader so he can end up downloading their extensions and their ads instead of the actual file. I found the zip file...
Sorry, I had not realized this was a problem with SendSpace.

Please tell us its provenance, 6233638
Media Center into ASIO Link (http://midithru.net/Home/AsioLink), with Media Center's "Device users only most significant 24-bits" option enabled, and a large volume reduction via the Parametric EQ to push the signal into the lower bits.
Then ASIO Link sent Media Center's output to iZotope RX for recording and amplifying the signal back to its original level.
 
 
At this point it seems clear to me that Media Center's dither implementation is not the ideal 2LSB TPDF, no matter which output you are using.
 
It seems that whatever implementation they are using must at least be good enough that it avoids many of the obvious mistakes with dithering so that it'll pass your "buzz test" but it does not seem to avoid noise floor modulation and distortion in the lower bits, which 2LSB TPDF dither should eliminate.
At least iZotope's TPDF implementation avoids this, and I would assume that it's a "reference" 2LSB TPDF implementation, since they also offer their proprietary MBIT+ dither if you want something else.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Hendrik on September 26, 2014, 10:37:51 am
Guys I am a bit concerned by this statement and the rest of this thread and though I don't understand all the technicalities, I can see that there is real disagreement between competent people.  Not everyone has a DAC that has an ASIO driver, with many the best you can do seems to be WASAPI.

All Audio Outputs use the same dithering code. If WASAPI is told to output 24-bit (and there is even an option to tell it that, in addition to automatic), then it will end up sending the exact same audio signal as ASIO 24-bit would.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 26, 2014, 10:39:29 am
All Audio Outputs use the same dithering code. If WASAPI is told to output 24-bit (and there is even an option to tell it that, in addition to automatic), then it will end up sending the exact same audio signal as ASIO 24-bit would.
Thanks for the confirmation - I did not expect it to be any different.
Am I correct in thinking that using the conversion tool should also use the same dithering when reducing the bit-depth?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 26, 2014, 10:40:06 am
Thanks for giving the provenance, 62x. Can you please upload your original file so I can duplicate the test over here with my own interface and avoiding the complication of ASIO Link. We don't know the integrity of ASIO link, though of course it should be bit perfect  :-)


BK

Sorry, I had not realized this was a problem with SendSpace.
Media Center into ASIO Link (http://midithru.net/Home/AsioLink), with Media Center's "Device users only most significant 24-bits" option enabled, and a large volume reduction via the Parametric EQ to push the signal into the lower bits.
Then ASIO Link sent Media Center's output to iZotope RX for recording and amplifying the signal back to its original level.
 
 
At this point it seems clear to me that Media Center's dither implementation is not the ideal 2LSB TPDF, no matter which output you are using.
 
It seems that whatever implementation they are using must at least be good enough that it avoids many of the obvious mistakes with dithering so that it'll pass your "buzz test" but it does not seem to avoid noise floor modulation and distortion in the lower bits, which 2LSB TPDF dither should eliminate.
At least iZotope's TPDF implementation avoids this, and I would assume that it's a "reference" 2LSB TPDF implementation, since they also offer their proprietary MBIT+ dither if you want something else.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 26, 2014, 10:42:22 am
How did Izotope record from ASIO link? Is this available as a direct driver input to Izotope?

BK
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: AndyU on September 26, 2014, 11:46:09 am
All Audio Outputs use the same dithering code. If WASAPI is told to output 24-bit (and there is even an option to tell it that, in addition to automatic), then it will end up sending the exact same audio signal as ASIO 24-bit would.

Excellent, thanks for the info.

Would you say it's best to force an output bit-rate for WASAPI - say 24 bit if that's what your DAC likes - or is automatic clever enough to know? I suppose the question is how does automatic decide?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mwillems on September 26, 2014, 11:52:39 am
Excellent, thanks for the info.

Would you say it's best to force an output bit-rate for WASAPI - say 24 bit if that's what your DAC likes - or is automatic clever enough to know? I suppose the question is how does automatic decide?

My understanding is that automatic chooses the highest bitrate your DAC will support.  The reason that the 24-bit check box is present for ASIO is that many ASIO devices will request a 32-bit output from a program, but only actually use 24 bits for output; in that circumstance, you want the dither to be applied at 24-bits rather than 32-bits. 

In the WASAPI context, I've never had any problem with the automatic; it always seems to correctly detect devices that support 24-bit output for me.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: AndyU on September 26, 2014, 11:56:27 am
My understanding is that automatic chooses the highest bitrate your DAC will support.  The reason that the 24-bit check box is present for ASIO is that many ASIO devices will request a 32-bit output from a program, but only actually use 24 bits for output; in that circumstance, you want the dither to be applied at 24-bits rather than 32-bits. 

In the WASAPI context, I've never had any problem with the automatic; it always seems to correctly detect devices that support 24-bit output for me.

Cheers. Can I ask how do you know that automatic correctly detects devices that support 24 bit output?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mwillems on September 26, 2014, 12:08:35 pm
Cheers. Can I ask how do you know that automatic correctly detects devices that support 24 bit output?

99% of my music is redbook CD quality music (16 bits).  When I output to one of those devices and look under audio path, MC tells me whether it's outputting at 16 bits or 24 bits.  When using WASAPI, MC has output at 24 bits to all my devices that support it when the automatic setting was engaged (i.e. it successfully detected which devices support 24-bit).  In some cases the devices themselves indicate on their displays what bitdepth they are receiving, and those devices have also confirmed that they are receiving the appropriate bitdepth.

The only hiccup I've ever had with detection was not with WASAPI, but with an M-Audio ASIO device that asked for a 32 bit input, but did not have a 32 bit DAC in it (so I needed to check the ASIO 24-bit box).
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Hendrik on September 26, 2014, 12:25:02 pm
Cheers. Can I ask how do you know that automatic correctly detects devices that support 24 bit output?

Assuming you know which bitdepth is best for your DAC, you can just check the audio path if it is using this format for output.
In general, most DACs don't seem to accept a format higher then their favorite bitdepth though, so WASAPI should stick to 24 or 24-padded for a 24-bit DAC.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 26, 2014, 12:41:59 pm
Thanks for giving the provenance, 62x. Can you please upload your original file so I can duplicate the test over here with my own interface and avoiding the complication of ASIO Link. We don't know the integrity of ASIO link, though of course it should be bit perfect  :-)
Certainly. https://www.sendspace.com/file/is4f96 (https://www.sendspace.com/file/is4f96)

I just couldn't find an easier way to get a digital "recording" of Media Center's ASIO output - though we now have confirmation from Hendrik that things don't change whether ASIO or WASAPI are used.
 
And via a 16-bit WASAPI output from the PC, this is audible during playback if you're reducing volume in Media Center. It doesn't get as bad as these extreme examples using the lowest bits of the signal, but the noise floor modulation and what sounds like some distortion, is audible.
 
How did Izotope record from ASIO link? Is this available as a direct driver input to Izotope?
ASIO Link takes the input via ASIO and passes it to a WDM Recording device. ("ASIOVAD Driver")
It's supposed to be bit-perfect, though I did not run any tests to confirm this.
 
Assuming you know which bitdepth is best for your DAC, you can just check the audio path if it is using this format for output.
In general, most DACs don't seem to accept a format higher then their favorite bitdepth though, so WASAPI should stick to 24 or 24-padded for a 24-bit DAC.
Yes, WASAPI generally gets it right - though I have had certain on-board audio devices which accept a 32-bit input for a 24-bit DAC.
 
The override is necessary with ASIO because, as I understand it, ASIO natively works in 32-bit, so if you have a 24-bit DAC, it's necessary for the player to dither to 24-bit rather than hope that the driver will.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on September 26, 2014, 01:08:15 pm
The override is necessary with ASIO because, as I understand it, ASIO natively works in 32-bit, so if you have a 24-bit DAC, it's necessary for the player to dither to 24-bit rather than hope that the driver will.

As I mentioned earlier in this thread, I don't think ASIO "natively" works in 32-bit. In addition to my quote below, my ASUS Essence ST with ASIO also requests 24-bit data.

Quote
I checked my Steinberg UR824 and it shows 24-bit output in JRiver using ASIO. My Steinberg MR816x and Creative X-Fi Elite both show 32-bit output. The UR824 is the most recently produced device. It is interesting that Steinberg developed ASIO and my two Steinberg devices (both with 24-bit DACS) request different bit depths to the ASIO driver.

An RME technician confirmed (http://www.rme-audio.de/forum/viewtopic.php?id=10617) that with a 24-bit RME DAC, even though the ASIO request is for 32-bit data, the input driver and output driver truncate(?) to 24 bits. They recommend sending only 24-bit data to the RME (which is why I am assuming they truncate).

Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on September 26, 2014, 01:22:18 pm
Certainly. https://www.sendspace.com/file/is4f96 (https://www.sendspace.com/file/is4f96)
I was wondering why you were increasing the gain by 60 dB after reducing by 50. I analyzed the file and it has a Peak Level (R128) of -14.4 dBTP. I would recommend only increasing gain by the same amount you have reduced it. Adding 10 dB to a file's native level will bring up the noise floor, but maybe that is what you are trying to do.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 26, 2014, 01:47:47 pm
As I mentioned earlier in this thread, I don't think ASIO "natively" works in 32-bit. In addition to my quote below, my ASUS Essence ST with ASIO also requests 24-bit data.
I'm only repeating what I seem to remember Matt telling me when I asked why that option was there.

An RME technician confirmed (http://www.rme-audio.de/forum/viewtopic.php?id=10617) that with a 24-bit RME DAC, even though the ASIO request is for 32-bit data, the input driver and output driver truncate(?) to 24 bits. They recommend sending only 24-bit data to the RME (which is why I am assuming they truncate).
I suppose it depends on the device then. Mine is requesting 32-bit from Media Center when using ASIO.
Or perhaps the default is 32-bit if the device doesn't request anything specific?

I was wondering why you were increasing the gain by 60 dB after reducing by 50. I analyzed the file and it has a Peak Level (R128) of -14.4 dBTP. I would recommend only increasing gain by the same amount you have reduced it. Adding 10 dB to a file's native level will bring up the noise floor, but maybe that is what you are trying to do.
I suppose that's true. I was really just making the file as loud as possible while staying close to a factor of 6dB so that I knew that the signal had been pushed down into roughly the lowest 6-bits.
In later tests using 24-bit and the Parametric EQ rather than the volume slider, I was more specific with the adjustments.
 
It really doesn't affect these results though, as it's Media Center's dithering which is causing the problem.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 26, 2014, 02:27:52 pm
OK, something Media Center does when reducing the playback volume is introducing distortion and noise floor modulation.
Based on the material that igorzep and andy_c have linked to, it would appear that there is only one way to do correct TPDF dither. (i.e. non-distorting, and non-modulating)
 
I can't say with 100% certainty whether this distortion is being introduced by the dither implementation in Media Center or not, but so far everything I've tested seems to point to it, since Media Center has a lower noise floor than programs with known-good implementations, indicating that it may be 1LSB dither rather than 2LSB.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on September 26, 2014, 03:24:26 pm
it would appear that there is only one way to do correct TPDF dither
From iZotope's Dithering With Ozone (http://downloads.izotope.com/guides/izotope-dithering-with-ozone.pdf):

Quote from: iZotope
We've probably evaluated 50 combinations of third party dither implementations. We won't tell you
ours is the best, because it's entirely subjective.



Quote from: 6233638
I suppose that's true. I was really just making the file as loud as possible while staying close to a factor of 6dB so that I knew that the signal had been pushed down into roughly the lowest 6-bits.
In later tests using 24-bit and the Parametric EQ rather than the volume slider, I was more specific with the adjustments.

Per the same article, you also can't make any volume increases or it invalidates the test:

Quote from: iZotope
With all the theoretical talk and spectrums, we didn't want to leave you without actually knowing how to apply dither. It's easy to make mistakes -- there was one time at iZotope when we thought we had broken our dither in an Ozone alpha version. We finally noticed that the problem was just that the level adjustment in the host app we were testing with had been turned up 1 dB (an inadvertent mouse click in the wrong spot most likely), which will completely mess up any dither. The point is, you can have done this a hundred times and still mess it up with one mouse click.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 26, 2014, 05:02:49 pm
Then please stop the assertions that it is, or that your tests prove anything.You have a right to ask.
With a 16-bit output in my setup, this is audible at normal listening levels when the volume control is below about -24dB or Volume Leveling is active. (since it targets -23dBFS)
 
I don't know why you seem to think these tests don't prove anything now that we have confirmation from Hendrik that the same dither method is used for all outputs.
 
The only thing which was in doubt was Bob suggesting that the ASIO output may be handled differently since it passes one of his tests. He specifically mentioned that he has not checked for noise modulation.
 
We have a right to decline to answer, or to avoid a lengthy debate.  This isn't an academic institution, or any other kind of institution.
Why don't you try hydrogenaud.io for this?  It's the kind of thing they love.
Of course that is your right.
I wasn't looking for a debate though, I was simply asking whether you use a 2LSB TPDF implementation or not, because that would avoid any debate.
 
Confirming one way or the other avoids debate over whether it's the dither implementation or something else that could be causing this.
 
It's an objective fact that Media Center is distorting playback, what's subjective here is people arguing over whether or not it's audible to them, or whether it only affects non-ASIO outputs, and frankly I think that discussion has been a waste of time, detracting from the main issue.

From iZotope's Dithering With Ozone (http://downloads.izotope.com/guides/izotope-dithering-with-ozone.pdf):
Quote from: iZotope
We've probably evaluated 50 combinations of third party dither implementations. We won't tell you
ours is the best, because it's entirely subjective.
I was under the impression that TPDF was "standard" dither that should have the same basic implementation everywhere.
However, according to the information posted earlier, it seems that many implementations deviate from using 2LSB (±1 LSB) dither, which can reduce the noise at the cost of introducing distortion and noise modulation.
 
What usually differs between implementations is when companies use something other than "standard" TPDF to try and increase the perceptual quality of the dither, such as iZotope's own MBIT+ dithering.
And I agree with them that noise-shaped dither could be subjective, and one person might prefer one type of perceptually-weighted dither to another.
 
This is why I used iZotope's TPDF implementation without any noise shaping for the comparisons, rather than include their MBIT+ dither (https://www.sendspace.com/file/3d0bs8), as that would be an unfair comparison against Media Center, and I'm not asking for anything like that - only that the distortion and noise modulation be fixed in the current TPDF implementation.
 
Per the same article, you also can't make any volume increases or it invalidates the test:
It will "mess up the dither" in the sense that it starts to make what should be inaudible, audible—which could be a problem when you are trying to use a perceptually-weighted dither rather than TPDF. (white noise)
 
iZotope is designed for production rather than playback, so dither must be the last thing you do to the audio, or else you are potentially introducing noise (dither) into the track and then amplifying it.
 
Here, we are specifically trying to listen to the lower bits of the signal to see whether or not it is being dithered correctly, or if it's introducing distortion/noise modulation, so it is perfectly valid.
 
You could do this with analog amplification instead—and with 16-bit audio it's not even that difficult—but it's simply easier and going to produce more consistent results to do it in the digital domain.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 27, 2014, 05:53:38 am
Aha. WDM. There's a smoking gun. WDM's bit integrity has always been questionable. I've seen bits corrupted when trying to pass signals through WDM. As a professional I NEVER pass ANYTHING via WDM. So strike that solution for your tests. As far as I'm concerned, introducing WDM into your tests invalidates them.

This morning I'm going to do comprehensive tests and try to put this thing to bed. Also, please, 62xxxx, please stop leaping to conclusions. You are making a hypothesis and presenting evidence, but some of us question the way in which you gathered your evidence. A scientist never says that something is "confirmed" when he's the only guy reporting it. Remember "cold fusion". So please watch your language. When two people report very different conclusions, we need to see some confirmations from several other users on this forum and to reconcile the methods before leaping to conclusions. I'll check your results and conclusions over here and see if I can duplicate them.

I had a discussion with Bruno Putzeys and Jim Johnston over this subject yesterday and here is a tidbit. Before I give you this quote from Bruno I wish to point out you that he presents three possible explanations for the dither amplitude which I measured being slightly high, and one of them is benign! Keep in mind that I personally am currently satisfied that JRiver's 24-bit output under ASIO with the 24 bit checkbox is letter perfect. When there are NO checkboxes in the DSP options. See, there are many permutations. Perhaps one of the checkboxes or methods (e.g. parametric equalizer) is the problem. My tests have been with complex convolution filters and simple volume control attenuation.

Bruno said,


"Hi Bob,

A great test or demo is a 0.5 lsb peak sinewave of 1Hz.

I'm confused about the slightly higher dither amplitude you report. Once you have two statistically independent 1 lsb rpdf added together (thus making a 2lsb tpdf) that's all you ever need. If the amplitude is different there are several possibilities. Maybe someone's decided to deviate from the 1 lsb amplitude for the rpdf and the dither is therefore plainly invalid. Maybe they've added a third noise source to an otherwise fine tpdf which changes nothing (for better or for worse) other than increase the noise floor. Or maybe they've just used 2 lsb rpdf which is as effective as 1 rpdf to eliminate distortion but which suffers from some amount of noise modulation. In all cases this suggests a certain amount of confusion regarding how dither works and should be looked at.

Cheers,

Bruno"

Maybe JRiver set the amplitude of the dither a bit higher....   which is benign at 24 bit level. So I am not saying that the higher amplitude I measured is a problem, just observing it at this time.

cheers back,

BK
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 27, 2014, 05:57:13 am
OK, something Media Center does when reducing the playback volume is introducing distortion and noise floor modulation.
Based on the material that igorzep and andy_c have linked to, it would appear that there is only one way to do correct TPDF dither. (i.e. non-distorting, and non-modulating)
 
I can't say with 100% certainty whether this distortion is being introduced by the dither implementation in Media Center or not, but so far everything I've tested seems to point to it, since Media Center has a lower noise floor than programs with known-good implementations, indicating that it may be 1LSB dither rather than 2LSB.


By what means did you measure a lower noise floor? My reports show that by FFT an observed p-p amplitude about 0.1 to 0.2 dB higher than Izotope's reference dither.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 27, 2014, 06:49:59 am
Aha. WDM. There's a smoking gun. WDM's bit integrity has always been questionable. I've seen bits corrupted when trying to pass signals through WDM. As a professional I NEVER pass ANYTHING via WDM. So strike that solution for your tests. As far as I'm concerned, introducing WDM into your tests invalidates them.
Can you suggest a tool which will let me directly capture Media Center's ASIO output then?

I really don't think this should be the focus of the discussion though, and it's why I preferred to use Media Center's conversion function rather than anything else.
 
I had a discussion with Bruno Putzeys and Jim Johnston over this subject yesterday and here is a tidbit. Before I give you this quote from Bruno I wish to point out you that he presents three possible explanations for the dither amplitude which I measured being slightly high, and one of them is benign! Keep in mind that I personally am currently satisfied that JRiver's 24-bit output under ASIO with the 24 bit checkbox is letter perfect. When there are NO checkboxes in the DSP options. See, there are many permutations. Perhaps one of the checkboxes or methods (e.g. parametric equalizer) is the problem. My tests have been with complex convolution filters and simple volume control attenuation.
The dither amplitude really is not a problem. The issue is the distortion and noise-floor modulation.
And again, what I'm calling "distortion" may not be in the sense that you are using it. I simply mean that it sounds distorted. Perhaps it's entirely noise modulation causing that.
 
I don't believe that my headphones are sensitive enough, or the headphone amplifier's output loud enough that I could confirm whether or not the 24-bit ASIO output differs from all my other testing. According to Hendrik, it should not.
 
I also see no reason why the converter should produce different results from playback, and I don't hear a difference between a 16-bit conversion or 16-bit WASAPI Exclusive output. (clearly audible noise modulation with an attenuation >24dB)
 
Or maybe they've just used 2 lsb rpdf which is as effective as 1 rpdf to eliminate distortion but which suffers from some amount of noise modulation. In all cases this suggests a certain amount of confusion regarding how dither works and should be looked at.
That sounds plausible. Again, I am by no means an expert on this, I just know what I'm hearing.
 
By what means did you measure a lower noise floor? My reports show that by FFT an observed p-p amplitude about 0.1 to 0.2 dB higher than Izotope's reference dither.
Perhaps it's the noise modulation making it sound quieter then. Media Center's dither also goes silent in quiet passages.
I used the highly scientific method of using my ears, since the noise level really was not really my concern here.
It just sounded quieter in my tests, and I wondered if that might indicate that it's using <2LSB TPDF is all.
 
Again, a confirmation of what Media Center is currently using would clear things up rather than have us speculate.
I'm not sure why Matt/Jim/Hendrik haven't cleared things up yet. Of course they are under no obligation to, but it'd be a lot simpler if they did.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 27, 2014, 02:59:29 pm
Can you suggest a tool which will let me directly capture Media Center's ASIO output then?


Try this. I've used it on Mac and it passes the grade. Somewhat unstable. There is a PC version:  jackaudio.org/faq/jack_on_windows.html

If you get it to work, test the bit-integrity of the interconnection by sending a known 16-bit signal from JRiver at unity gain, no dsp, into the receiving device. Put a bit-meter on the receiving device. Then drop the gain. It should grow to 24-bits, perhaps to 32-float or 64-float. If you don't have a bit-meter on the receiving device, then record a short file and put it up here and I'll measure its actual bits.

I've never used JRiver's converter and I've never used JRiver at 16 bits... See my next post with a thorough set of tests I performed today.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 27, 2014, 03:14:26 pm
JRiver MC19 on PC Dithering Measurements. Bob Katz 9/27/14

I performed a series of exhaustive tests today. Here's a report. Warning: Long post with attachments!!!!!

Today is the first day I've ever tested JRiver at 16 bits and also the first time I've tested it with a definitive test signal for noise modulation.

All tests with JRiver on a PC, using ASIO, all DSP options turned off except as noted below. All tests at 44.1 kHz. FFT measurements made with Spectrafoo on a MacIntosh. Using AES/EBU output of JRiver PC or Sequoia PC. Each PC has a Lynx brand interface. Stereo audio tested. The source(s) feed the AES/EBU input of Motu interface. Foo is set to analyze the Motu interface.

Initial setup. Let's test the tester using signals from a Sequoia workstation. Sequoia DAW with various types and amounts of dither and plugins. In all cases, when properly dithered, Sequoia measured impeccably. When not dithered properly I was able to see any distortion or noise modulation using various test signals. So we're ready to test JRiver.

JRiver tests:

I. Distortion test. Multitone Buzz signal attenuated various amounts. At 0 dBeach sine wave tone in the multitone signal is at equal level, -32 dBFS. 3244 buzz attenuated 82 dB with JRiver's volume control. At these attenuations JRiver's steps are not exactly 1 dB per step, which explains the odd attenuation.

24 bit:

A)  24 checkbox on. Some barely perceptible distortion spikes occasionally drifting up to -180 dBFS. These are completely inaudible and way below the threshold of hearing. Measured performance is excellent. The buzz signal itself remains intact but attenuated 82 dB. All buzz tones measure -114 dBFS as they should be. (-32 - 82 = -114)

B) 24 checkbox off. Voxengo Elephant set to TPDF 24 bit. All buzz tones at -114 dBFS as they should be.

An FFT picture of IA and IB is attached. The main amplitudes are identical so you only see the color which is on top (blue). If you look VERY closely you can see a couple of barely visible (insignificant) distortion spikes in red, barely visible above the grass. I can see that JRiver's dither is a little lower in level than Elephant's. But both performances are excellent. For clarity, the FFT is limited to 2 kHz, but in reality the buzz signal extends to over 20 kHz, which intermodulate and reveal system nonlinearities. 

C) 24 Checkbox off. Significant distortion spikes. All this is expected because AES/EBU truncates to 24 bits, so the dither switch (24 checkbox) is working. No doubt the truncation is audible, the cumulation of the different distortion spikes. In general I find this level and kind of distortion manifests as a loss of stereo depth and space. However, when truncation occurs at 16 bits, then the sound develops coldness and harshness.

FFT picture attached, just for fun

16 bit tests:

D) 24 checkbox on or off. Parametric equalizer with 16 bit simulation, dither off. Since its' truncated, we get serious distortion, it doesn't resemble the buzz signal at all. To be expected. Not shown.
   
E) 24 checkbox on or off. Parametric eq with 16 bit simulation, dither on. I see the buzz signal, but its signals are not at equal levels. For example, 250 Hz is at -120, 750 at -117, 1250 at -117, 2250 at -117, but they should all be at -114. There are some measurable distortion spikes, but my main concern is that the dithering or some coding errors are not reproducing the tones at proper and equal levels. Something must be wrong with the code.

F) Change to Voxengo Elephant, set to 16 bits TPDF dither instead of the Parametric EQ.  All buzz tones are equal at -114 dBFS and there are no visible distortion spikes.

Attached is an FFT measurement comparing IE and IF above.


---------

II. Noise modulation test:

The Gonger signal was developed by the BBC's Chris Travis. http://www.aes.org/e-lib/browse.cfm?elib=6283

It was designed to audibly detect noise modulation issues with ADCs and DACs. But if you look at the Gonger on a live (real time) FFT analyzer you can watch the noise floor and see if it modulates or stays constant. It is a 16 bit dithered 399 Hz sine wave modulating from negative infinity up to -10 dBFS. When JRiver is at unity gain, Foo's bitscope shows 16 bits indicating JRiver's bit integrity and that there is no additional DSP engaged in the JRiver processing chain. At unity gain the noise floor is constant. Not shown.

Attenuating the 399 Hz gonger: I can see the noise floor go up and down when the gonger goes through its cycle and/or distortion IF DITHER IS IMPROPER OR NONEXISTENT. The Quicktime movies are between 2 and 4 MB each so I had to put them on my FTP. Here is the address. Open in a browser:

client.digido.com/?u=jriver_dither&p=jriver_dither

Gonger through Lynx, all DSP options turned off, ASIO, 24 bit box checked.

A) Initial test, bit-integrity

JRiver @ Unity gain

Checkbox 24 bit. Result: 16 bits showing in Foo. Bit-transparent copy of the 16-bit gonger source signal showing that at unity gain, JRiver is bit-perfect, or at least it passes only the wordlength of the fixed-point source. Not shown.

JRiver volume control attenuated 82 dB

24 bit

B) Checkbox 24 bit. Result: Foo's bitscope grows to 24 bits. I can see JRiver's dither. I can also see some very low level distortion as the gonger signal goes through its cycle, very low level. I do not see ANY noise modulation. The distortion is way below the threshold of hearing and probably masked by the DAC noise. This is excellent performance and I would say it's academic to ask JRiver to "improve" this nearly text-book quality dither.

Quicktime Movie. Play each movie a few times. The first time watch the signal. The next time watch the noise. The next time watch the bit meter. You could hear any noise modulation if you had sufficient analog gain. I cannot distribute the gonger signal because it is copyrighted. But it's no longer for sale to my knowledge so that's a bummer.

C) Turn off the 24 bit checkbox. Significant distortion. Many spikes, as would be expected, truncating the 32 float signal to 24 bits through AES/EBU. Watch the spikes explode when the signal attenuates all the way.

Quicktime Movie.

D) Voxengo Elephant. Elephant Set to unity gain. TPDF 24 bit dither. JRiver set to -82 dB attenuation. Results: Perfect performance. No noise modulation, no indication at all of distortion.

Quicktime movie.

16 bit

E) Plugin disabled in JRiver. Parametric with no filtering and unity gain, with the bitdepth simulator, set to 16 bits dither. I do see strong noise modulation and some distortion. The noise modulation is the main issue.


Quicktime Movie. Notice how the bit meter actually turns off at points, indicating the signal is completely cut off at times. That's serious noise modulation.


F) I turn off the dither in the parametric bit simulator and strong distortion is added along with the noise modulation.  Not shown. To be expected.

G) Voxengo set to unity gain. TPDF 16 bit dither. JRiver set to -82 dB attenuation. Results: Perfect performance. No noise modulation, no indication of distortion.

Quicktime movie.

6) Just for fun. 16 bit parametric set to bit simulation with dither turned off. Results are as expected. Not shown.


Conclusions:

My opinion has not changed regarding MC's performance on PC at 24 bits (measured with ASIO). I am thrilled with its sound and measured performance. I have measured insignificant distortion, many dB below the threshold of hearing, in fact likely masked by the DAC noise. There is no noise modulation whatsoever. MC's measured performance is exceeded only by Voxengo by the tiniest measurable but inaudible margin. It's an academic argument to ask JRiver to improve the 24-bit performance. I own some professional-quality, high integrity DSP products which show slightly more distortion on the FFT that is still well below threshold of hearing and whose sound is also excellent.

16-bit:
However, whatever code MC is using appears to develop problems when extended to 16 bit. It exhibits significant noise modulation and some distortion when set to 16 bits. I recommend that any user who feels the need to feed 16-bit devices purchase Voxengo Elephant, which is very reasonably priced. There are no DACs currently available which are limited to 16-bit performance, and the only units which may limit performance to 16 bit are confined to things like Airplay, which should be improved. I would recommend the perfectionist user set up multiple zones, put Voxengo on the zones going to Airplay etc. And set the zone going to his high quality home theatre to 24 bit checkbox without any need for Voxengo. He could insert Voxengo if he thinks he can hear -172 dBFS distortion, but that would be truly anal-retentive behavior.

I would not draw inappropriate conclusions. One must not conclude or assume that just because the 16 bit performance is unnacceptable, that this error would extend to the 24 bit. Coding is a complex and tough job. A simple mathematical error or bug could arise that causes 16-bit problems but does not exhibit any issues at 24 bit. If there was a noise modulation issue at 24 bit, I would have seen it in Foo, whose resolution extends down to -180 dBFS. Even if there are slight errors in MC, they are barely measurable and certainly inaudible at 24 bit.

Listening: I am an audiophile and an engineer. Listening always comes first for me, but in this case I do not feel it necessary to listen to the music files provided by 62x because my measurements confirm what he hears AT 16 bit. And his methods of testing 24 bit with WDM as part of the chain do not pass muster. If he wishes to refute my conclusions at 24 bit he's going to have to emulate exactly what happens when the signal is sent to his DAC. Perhaps there is another way to reliably cross patch the signal from JRiver to a DAW on a single computer. If he finds one, one way to prove it is to send a 16-bit unprocessed signal from JRiver, and watch a bit meter on the receiving end. If it is 16 bit, and grows to 24-bit when any attenuation is made, that's a good indication he's got a good measurement and recording instrument.

I did not do any listening tests because the 24 bit tests above confirm my previous listening that 24 bit is for all intents and purposes very clean, undistorted, and does not exhibit any noise modulation. I also confirmed 62xxxx's 16 bit determinations with my own measurements so we're in agreement on that. I use JRiver as a high-fidelity player in my mastering room, which is one of the best-sounding rooms and playback systems in the country and I'm thrilled with the purity of tone and sound quality of JRiver when set to 24 bits.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Sheriff1972 on September 27, 2014, 04:31:48 pm
Hi Bob,

Thank you for putting your time into looking at this.

This is a most satisfactory outcome to this thread. Vindication all round IMO.

I hope that your conclusions encourage Matt & Co, to do a little digging into their code, and make JRiver truly blameless (yes even at 16 Bit).

Thanks to 6XXX for not giving up on this topic. I remember when i had a tagging issue on JRiver 19 trial edition, i had some difficulty in getting my issue taken seriously. I was made to feel like i was doing it wrong'. Suffice to say i was not the only one with the problem and eventually and a fix was found.

It all helps to make a better product, and everyone is the winner.

Mike
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 27, 2014, 11:43:28 pm
Yes, thank you for taking the time to test this Bob.
 
I have always maintained that it is likely going to be very difficult to hear this with a 24-bit signal since it is the lower bits which are most affected, however I can think of some scenarios where it might become audible - e.g. with a power amp and Media Center being used for volume control.
 
With 16-bit it can be clearly audible if there's even a relatively small attenuation and while we would have ideally moved beyond 16-bit by now, it's not always an option.
 
If it is what Bruno has suggested and Media Center is using 2LSB RPDF rather than TPDF for example, then it seems that it would greatly improve 16-bit performance to make this change, and do no harm with 24-bit, eliminating the circumstances where this may be audible.
 
16-bit:
However, whatever code MC is using appears to develop problems when extended to 16 bit. It exhibits significant noise modulation and some distortion when set to 16 bits. I recommend that any user who feels the need to feed 16-bit devices purchase Voxengo Elephant, which is very reasonably priced. There are no DACs currently available which are limited to 16-bit performance, and the only units which may limit performance to 16 bit are confined to things like Airplay, which should be improved. I would recommend the perfectionist user set up multiple zones, put Voxengo on the zones going to Airplay etc. And set the zone going to his high quality home theatre to 24 bit checkbox without any need for Voxengo. He could insert Voxengo if he thinks he can hear -172 dBFS distortion, but that would be truly anal-retentive behavior.
Well I would hope that JRiver consider this to be a problem worth fixing rather than suggest spending $120 on another product to fix it.
 
If it fixes one problem and potentially improves playback quality at 24-bit, it seems worthwhile to me.

I would not draw inappropriate conclusions. One must not conclude or assume that just because the 16 bit performance is unnacceptable, that this error would extend to the 24 bit. Coding is a complex and tough job. A simple mathematical error or bug could arise that causes 16-bit problems but does not exhibit any issues at 24 bit. If there was a noise modulation issue at 24 bit, I would have seen it in Foo, whose resolution extends down to -180 dBFS. Even if there are slight errors in MC, they are barely measurable and certainly inaudible at 24 bit.
Well again, this is why I preferred to use the conversion feature to produce a 24-bit file which can be amplified to hear what is actually happening in the lower bits of the audio signal, because when you do this it makes these issues obvious. (https://www.sendspace.com/file/3d0bs8)
 
That's not to say it's a problem for 24-bit output, since those lower bits are significantly quieter than 16-bit, but demonstrates that it still exists with it.



And I still believe that there is some merit to the idea that while it should be inaudible, we can actually pick up on noise-floor modulation at very low levels even though it should be masked by the signal. There was an ESS presentation at RMAF 2011 which mentioned their internal testing of this, but I can't seem to find it on YouTube any more. They're the company that designs the Sabre DAC chips found in almost every high-end DAC these days, if you are not aware.
 
One of the examples in the presentation by their CTO was that when comparing two DACs, one with 100dB SNR, -80dB distortion specs, and another with 120dB SNR -106dB distortion, noise floor modulation in the DAC below the noise floor of the music track actually made the second DAC sound worse, even though measurements indicated otherwise.
 
Here are a couple of slides from the presentation (I have a local copy of it) which may be of interest:
(http://abload.de/img/slide-1vgaba.jpg) (http://abload.de/img/slide-1vgaba.jpg) (http://abload.de/img/slide-25qxjh.jpg) (http://abload.de/img/slide-25qxjh.jpg)
 
A lot of it was focused on explaining how ΣΔ DACs work and how they compare to conventional DACs, but one of the points which was repeated a lot was that the main reason people could identify the two, despite the ΣΔ DACs offering measurably better performance was due to noise modulation. (something which their HyperStream modulator fixes)
 
So while it might be easy to say that you can't possibly hear something >100dB's down (with 24-bit) there is at least some data which suggests otherwise, from the company producing arguably the best DAC chips available today.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 28, 2014, 10:39:12 am
Yes, thank you for taking the time to test this Bob.
 
I have always maintained that it is likely going to be very difficult to hear this with a 24-bit signal since it is the lower bits which are most affected, however I can think of some scenarios where it might become audible - e.g. with a power amp and Media Center being used for volume control.


62xxx. Your language incorrectly states the situation. This time you misstated my words and revealed that you did not read my post thoroughly and absorb it thoroughly. Here's what you missed:

1) You have misstated an important fact demonstrated by my measurements. It is not just a case that "it is hard to hear an issue at 24 bit" as you say. In fact, it is the case that MC's performance at 24 bits is exemplary, one tiny step below perfect. All indications are that JRiver's dither at 24 bits is either equal to or close enough to the proper dither for all practical purposes.
2) You seem to ignore that I posted and demonstrated an FFT with absolutely no detectable noise modulation, with distortion products so insignificant as not to warrant any further development at 24 bit. Did you play the mov's and digest their conclusions? This is in mov # IIB. You will see a non-moving noise floor and barely perceptible distortion products. I repeat, the case for 24 bit is closed as far as I'm concerned. If JRiver decides to reinvestigate the dither for the sake of 16 bit ---- any improvements, if they migrate to 24 bit, will only be for Brownie points; any difference will be completely academic according to the most sensitive measurement methods on earth. As far as I can determine, MC's audible performance at 24 bit is not at all limited by its slightest measurable defects.
3) You have ignored the incredible sensitivity of the test mechanism. That I tested the test mechanism with Sequoia using as little as 0.1 bits, 0.2 bits, etc., to see that the measurement reveals the slightest amount of noise modulation when improperly dithered. Take a look at mov #IIC, trucation at 24 bits, which reveals strong noise modulation and somewhat important distortion products, which are audible as a reduction in depth and space in my own personal listening tests.
4) If you wish to refute my claims about the quality of the 24 bit performance and contribute something to the quality of this product, then I challenge you to perform a blind test between Voxengo Elephant TPDF dither at 24 bits versus JRiver's dither at 24 bits. If you can pass a blind listening test on that, I will try to see if I can pass it, because so far I have not heard a difference, using the most sensitive audiophile-quality musical material. Then and only then would I get on my high horse and ask JRiver to please improve the 24 bit dither. Just for you I'll do that listening test myself this morning and report here on the forum.
5) You are incorrect about your conclusions of using a power amp and Media Center with a volume control. These measurements show that even with a power amp with 20 dB or even more of excess analog gain and Media Center as a volume control, that there would be no audible problems at 24 bit. You would hear the noise of the DAC before you even heard the noise modulation or problems of JRiver as it currently stands at 24 bit. The noise of the DAC would completely mask the residual distortions that I measured and remember, there was absolutely no noise modulation!
6) OK, let's please stay truthful, accurate and thorough in our language. It's something that I try to do. It's not easy, and I urge you,  62xxx, to please step up to the plate.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Sheriff1972 on September 28, 2014, 03:08:43 pm
62XXX, i suspect that this debate will have Matt digging into his code, as he too is interested in making the best product he can.

Having Bob comment on the 16 Bit performance as it is and the 24 Bit being a 'tiny step below perfect, will no doubt grate with him until he finds a fix.

We shall see no doubt.

P.S. Thanks Bob for the heads up on the Elephant Plugin

Mike
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 28, 2014, 04:03:49 pm
Yes, thank you for taking the time to test this Bob.
 
snip


So while it might be easy to say that you can't possibly hear something >100dB's down (with 24-bit) there is at least some data which suggests otherwise, from the company producing arguably the best DAC chips available today.

By the way, I never claimed that distortion products 100 dB down are not a problem. In many cases they are, not just in cases with high analog gain and large amounts of digital attenuation. Truncations at the 24 bit level produce products which obscure depth, in the -100 and below region. The only thing I am disputing is whether you can hear distortion products which are 173 dB down, if you get my drift. I draw the line at tones that I cannot hear, and in my room, I can hear a 1 kHz -140 dBFS tone, and hear whether it is dithered or not!  I have to raise my analog gain 12 dB above my maximum calibration point in order to hear that, with my ear quite close to the loudspeaker, but it's audible, so the DAC has excellent resolution.

OK, let's see what that tells us. It tells us that a superior DAC with an RMS noise of about -120 dBFS can resolve individual tones which are at -140 dBFS, barely, and these tones can be heard in a calibrated quiet room with an extra 12 dB of gain. Somewhere around -141, -142, or so, in my room the tone disappears into the DAC noise. I think it is completely safe to say that the distortion products in MC which I measured at -173 dBFS, which are 33 dB below the 24 bit noise floor, and 53 dB below the DAC noise floor, are inaudible. At the highest NORMAL analog gain in my room, the DAC noise of -120 dBFS falls at MINUS 17
dB SPL. So let's be fair. In order of perception:

There are things you can hear which no one doubts
There are things which we may be able to hear which reasonable people accept could be audible
There are things which we can measure which we barely can hear under extreme circumstances with amplified gain
There are things which we can measure which we cannot hear
There are things which we can measure which are another 33 dB below that!

Where would you draw the line in perfection?  :-) That's why I think Matt has far more important things on his plate than to "fix" problems which are at -173 dBFS. Sometimes I wish that FFTs with resolution many dB below the threshold of hearing did not exist because people make much too much over what we can see on the display without having the perspective of understanding what these displays mean. Let me be some help. 20 dB is the difference between a shout and a whisper. 60 dB down is microphone level compared to line level. 80 dB down is below the vast majority of average analog system noise floors (not mine, but certainly that of typical consumer gear). Notice that we have jumped downward in level 3 times the difference between a shout and a whisper and we are still 93 dB above the point where I measured the errors in JRiver's FFT! How many more 20 dB jumps do you want to make for safety... before even irrational men would agree that we are talking about inaudible phenomena  :-).
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 28, 2014, 06:30:38 pm
Where would you draw the line in perfection?  :-) That's why I think Matt has far more important things on his plate than to "fix" problems which are at -173 dBFS. Sometimes I wish that FFTs with resolution many dB below the threshold of hearing did not exist because people make much too much over what we can see on the display without having the perspective of understanding what these displays mean. Let me be some help. 20 dB is the difference between a shout and a whisper. 60 dB down is microphone level compared to line level. 80 dB down is below the vast majority of average analog system noise floors (not mine, but certainly that of typical consumer gear). Notice that we have jumped downward in level 3 times the difference between a shout and a whisper and we are still 93 dB above the point where I measured the errors in JRiver's FFT! How many more 20 dB jumps do you want to make for safety... before even irrational men would agree that we are talking about inaudible phenomena  :-).
My primary concern is not -173dB down, but in the audible 16-bit range - and you seemed to agree that there is an audible problem there.
If the dither algorithm is changed to correct this, I am pointing out that it should also have a positive impact on 24-bit performance.
 
While it is not my main concern, this improvement to 24-bit quality would offer objectively better performance, whether it is subjectively considered to be an issue or not.
If the dither is changed to address these problems with 16-bit playback, I see no reason why it should only be applied to 16-bit and not all conversions.
If you are concerned that a change may negatively impact the quality of a 24-bit output, perhaps there could be an advanced option to let people use the old dither instead, but I'd hope that would not be necessary.
 
 
I don't know if you want to call it distortion, noise modulation, or something else, but something sounds wrong with Media Center's dither.
I have now done some further testing using the trial of Voxengo Elephant after your recommendation, and it confirms that iZotope's TPDF implementation is good, since Voxengo and iZotope's TPDF implementations sound almost identical.
 
This is why I think there is some merit to performing conversions and amplifying the output, rather than trying to amplify it in the analog domain, or using FFT analysis, since this method produces clearly audible results which are easy to compare, and avoids any potential problems caused by the ASIO/WASAPI/Other outputs/drivers.
 
 
I was careful in the preparation of these files. The gain was reduced so that the peak sample in the track was exactly -120dB (a reduction of 105.6dB if I recall correctly) as this puts the audible signal in the lower 4-bits, quite far above -173dB.
 
The files were exported from their source application in a 24-bit format after this reduction was performed.
I then loaded these 24-bit files into Audacity and amplified them by 100dB.
Why 100dB? Because dither/noise shaping adds extra noise, so I wanted to leave adequate headroom to avoid clipping any of them.
They were exported as 16-bit files, because the lower 4-bits in the 24-bit signal have now been moved into the upper bits of a 16-bit one after amplification, so exporting as a 24-bit file would make no difference to these tests.
 

2&3 have been posted before, but I'm reposting them just so that you have the right files for the comparison.
The Voxengo samples mute every 45s or so because I am running the trial.
 
I found that the easiest way to compare them all was to load them all into the same Audacity project, mute all but the iZotope TPDF track (since I consider it the reference) start playback, and then toggle the solo button on another track to quickly A-B them.
That way you don't have to listen to the full track and can quickly switch back and forth between the results.
 
 
Since I am pushing the audio into the lower 4 bits, the results should be exactly the same as a 16-bit output with a -72dB peak level, rather than 24-bit with a -120dB peak.
That's obviously a lot—even with 16-bit—but Matt & Jim seemed to have difficulty hearing the problem when I was only using a -60dB peak in 16-bit, and you have suggested that there is no problem with a 24-bit output. I designed this test to address both these concerns.
In my own listening tests I can quite clearly identify the problem with a 24dB reduction at 16-bit (12-bits for playback) so the attenuation does not have to be nearly as large for it to be audible.
I'm only using this much attenuation because it makes the problem more obvious, not because I normally have playback at these levels.
 
If it's not distortion, and it's not noise modulation, can you tell me what is happening with Media Center's dither?
 
 
At this point it seems that Media Center is not using TPDF, or that there is something wrong with the implementation if they are.
It is being dithered though, if you compare it with the undithered file that I included.
Bruno's suggestion of 2LSB RPDF sounded plausible, but I don't have any software which has this as an option, so I can't do a comparison.
Perhaps Matt/Jim could comment on it, but I'm really not as concerned about what is in use, as I am about what can be done to fix it.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 28, 2014, 07:29:58 pm
I haven't listened yet and I did not fully understand what you did in your post but if you did not perform dithered conversions if your destination file is fixed point, or exact bit shift using a bit shifter, then you are ADDING distortion on top of the distortion you are trying to analyze. There are so many questions I would have to ask about your method that it has already exhausted my patience.

There is absolutely nothing wrong with using analog gain to listen to the output of a DAC and evaluate if there is a problem with the sound, even if you have attenuated it in the digital domain. It avoids any questions whether you did or did not dither your subsequent digital gain after you attenuated. And if you did attenuate and then boost in the digital gain and are counting on the difference between the distortion you generated by the truncation after the gain shift to be "so far down as to be insignificant" then your methods immediately bring up so many questions. You mentioned this "avoids issues of ASIO/WASAPI" etc. when instead you need to have sufficient tools to test your ASIO or WASAPI connection for bit integrity so you won't even bring up any doubt. Of course I have used digital gain for different types of analyses, but I've done my homework, done it completely properly and with proper dithering. But in your case, since you are avoiding testing your interfaces and cleaning that part of your connections up, I think it's a lot safer for you to do analog gain.

Furthermore, since I have found no problems hearing the difference between truncating or dithering at 24 bit at NORMAL listening levels, I think that you should be able to find a way to get 10 or 20 dB of reasonable listening analog gain to your analysis procedure and leave no room for doubt in your testing methods. Headphones with a good headphone amp and analog gain should do the job.

Are your examples of comparison of JRiver's 24 bit dither versus Elephant's 24 bit dither? I think you should just do that at normal gains and let the listeners decide if they want to amplify it and how. At normal gains I've no problems hearing the differences between 24 bit properly dithered and truncated, but I have never tried to identify a "defective" 24 bit dither versus a proper one. Given the measurements, I wager the differences here will be inaudible and that you cannot amplify enough to hear them if you have done your patching and routing correctly.

Are you saying that you clearly heard a meaningful difference between JRiver's 24 bit dither and Elephant? With music? Although listening to dither noise under highly amplified conditions is an excellent diagnostic tool it is not at all musical, nor does it reflect what the ears hear at normal gains, not at all. Because the ISO curves change the emphasis of low frequencies to high, so you can never say, "this sounds better" when listening under extreme magnification. All you can say is, "I hear distortion" or "I hear noise modulation", etc. That's why in the end you have to resort to measurably testing performance with an FFT analyzer and test signals, then limit your listening to normal or slightly higher gains in the analog domain.

Unfortunately I can't compare Elephant dither versus JRiver's dither using JRiver because for about a year or two I have been running a convolution/crossover within JRiver. When I tried it tonight, I discovered that you can't have your cake and eat it, too. It's ok to patch Elephant multichannel in FRONT of the convolution, but not after... I could not fix the routing within Elephant to route the low pass to my woofers no matter how hard I tried, if I left the plugin as the last item in the chain where it belongs for dithering.

When I get a chance, I'll compare JRiver's dither with a very good and known reliable dither by playing back a known music file from JRiver within Sequoia. But not tonight.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 28, 2014, 09:25:35 pm
I haven't listened yet and I did not fully understand what you did in your post but if you did not perform dithered conversions if your destination file is fixed point, or exact bit shift using a bit shifter, then you are ADDING distortion on top of the distortion you are trying to analyze. There are so many questions I would have to ask about your method that it has already exhausted my patience.
I'm not trying to analyze (i.e. use FFT analysis) I'm trying to listen to what is happening in the lower bits.
Since both iZotope and Voxengo produce near-identical results when applying their TPDF dither, I am certain that the results from using this method are valid.
 
The only variable which could affect this, is if Media Center's file conversion output is broken, but I don't believe that it is.
There is absolutely nothing wrong with using analog gain to listen to the output of a DAC and evaluate if there is a problem with the sound, even if you have attenuated it in the digital domain.
Of course there's nothing wrong with it.
It's just a lot more difficult to hear the lower 4-bits in a 24-bit signal if you're using analog amplification than adding gain to a digital file. And as I previously explained, I'm using the lower 4 bits because Matt/Jim did not hear a difference in the file that I initially provided.
It's much easier to hear this with 16-bit playback, but as you insist that non-ASIO outputs are invalid, and there is no option to output 16-bit with ASIO, I am using file conversions instead. I also think that method should produce more accurate results.
 
I used 24-bit even though it makes virtually no difference in these tests (assuming -120dB for 24-bit, and -72dB for 16-bit) because you say that the 24-bit output does not suffer from the same issues that 16-bit does.
 
I will state once again that the differences between testing a 16-bit WASAPI output with analog amplification, and 16-bit file conversion were negligible, so I don't think it really matters.
 
You're too focused on the aspects of this which don't matter, and if they make any difference at all, it does not contribute to the results. The differences I'm demonstrating are big and obvious, not subtle changes.
 
It avoids any questions whether you did or did not dither your subsequent digital gain after you attenuated.
Audacity does dither when exporting. It's not as clean as iZotope's TPDF dither, but it is sufficient because only the upper bits are in use when exporting the file after adding 100dB gain.

when instead you need to have sufficient tools to test your ASIO or WASAPI connection for bit integrity so you won't even bring up any doubt
My DAC has a bit-meter built in, and will report whether the signal being played is 16-bit, 24-bit, something in-between 16-24 bit, or below 16-bit.
With a WASAPI signal and no DSP applied it is bit-perfect 16-bit until you adjust the volume in Media Center at which point it reports 24-bit.
I don't think there is anything to suggest that Media Center's WASAPI output is not bit-perfect.
 
Of course I have used digital gain for different types of analyses, but I've done my homework, done it completely properly and with proper dithering. But in your case, since you are avoiding testing your interfaces and cleaning that part of your connections up, I think it's a lot safer for you to do analog gain.
I am specifically trying to avoid anything which could invalidate the results. If you're testing with analog amplification you could be hearing something else in your setup (the DAC or other connected equipment) that is causing a problem in the depths of the signal.
 
I provided the source file and described exactly what my methods were so that you could reproduce the results if you don't trust that I've done things correctly.

Furthermore, since I have found no problems hearing the difference between truncating or dithering at 24 bit at NORMAL listening levels, I think that you should be able to find a way to get 10 or 20 dB of reasonable listening analog gain to your analysis procedure and leave no room for doubt in your testing methods. Headphones with a good headphone amp and analog gain should do the job.
I have confirmed this easily with 16-bit. I haven't tested 24-bit.
I can get an extra 20dB out of my headphone amp but it's a pain to do since you have to open it up and move a couple of jumpers around.

Are your examples of comparison of JRiver's 24 bit dither versus Elephant's 24 bit dither?
Across the zip files I linked to in my previous post, I have included:
 

For all of these, the peak level of the source track was pushed down to -120dB (105.6dB attenuation, as the peak is -14.4dB) and a 24-bit file was exported using each dither method.
All 24-bit files were imported into Audacity (for the sake of neutrality) 100dB gain was applied, and a 16-bit file was exported.
Audacity's output is of sufficient quality that it has no bearing on these results.
 

 
The noise-shaped dithers were just used for comparison, and out of curiosity more than anything else.
I'm not asking for noise-shaped dithering in Media Center, only a good TPDF implementation.

At normal gains I've no problems hearing the differences between 24 bit properly dithered and truncated, but I have never tried to identify a "defective" 24 bit dither versus a proper one.
Which is exactly why I tested the dither algorithms this way.
I'm not testing to see whether the output is dithered or not, I'm testing the quality of the dithering.
 
And I know that amplification can invalidate the results with noise-shaped dithering, but even if that were true, I don't believe that it applies to Media Center's output, and I'm not sure that it's true of the noise-shaped examples here - but that is subjective and not the point of discussion here.
 
 
I could respond to the rest of your comments, but I don't think there is much point if you have not downloaded the files in my previous post and compared them. Without having listened to them, I don't think you understand exactly what I'm trying to demonstrate here.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 28, 2014, 09:57:20 pm
Please forgive the excess quoting below. I'm on my iPhone tonight. One thing which is not clear from your post is whether the dithers you were comparing were 16 or 24 bit.

Anyway, I don't think it necessary to prove any more points by listening to an exaggerated signal. My tests showed serious defects in MCs 16 bit output. The defects would be clear to anyone viewing the bitscope and the noise modulation and distortion in the mov. So JRiver will decide if this is something they want to tackle.

I would only bother to listen to your demo comparisons if they were 24 bit. Then my ears would perk up. I'm already convinced there are problems with 16. Please elaborate.

Bob
I'm not trying to analyze (i.e. use FFT analysis) I'm trying to listen to what is happening in the lower bits.
Since both iZotope and Voxengo produce near-identical results when applying their TPDF dither, I am certain that the results from using this method are valid.I'm
 
The only variable which could affect this, is if Media Center's file conversion output is broken, but I don't believe that it is.Of course there's nothing wrong with it.
It's just a lot more difficult to hear the lower 4-bits in a 24-bit signal if you're using analog amplification than adding gain to a digital file. And as I previously explained, I'm using the lower 4 bits because Matt/Jim did not hear a difference in the file that I initially provided.
It's much easier to hear this with 16-bit playback, but as you insist that non-ASIO outputs are invalid, and there is no option to output 16-bit with ASIO, I am using file conversions instead. I also think that method should produce more accurate results.
 
I used 24-bit even though it makes virtually no difference in these tests (assuming -120dB for 24-bit, and -72dB for 16-bit) because you say that the 24-bit output does not suffer from the same issues that 16-bit does.
 
I will state once again that the differences between testing a 16-bit WASAPI output with analog amplification, and 16-bit file conversion were negligible, so I don't think it really matters.
 
You're too focused on the aspects of this which don't matter, and if they make any difference at all, it does not contribute to the results. The differences I'm demonstrating are big and obvious, not subtle changes.
 Audacity does dither when exporting. It's not as clean as iZotope's TPDF dither, but it is sufficient because only the upper bits are in use when exporting the file after adding 100dB gain.
My DAC has a bit-meter built in, and will report whether the signal being played is 16-bit, 24-bit, something in-between 16-24 bit, or below 16-bit.
With a WASAPI signal and no DSP applied it is bit-perfect 16-bit until you adjust the volume in Media Center at which point it reports 24-bit.
I don't think there is anything to suggest that Media Center's WASAPI output is not bit-perfect.
 I am specifically trying to avoid anything which could invalidate the results. If you're testing with analog amplification you could be hearing something else in your setup (the DAC or other connected equipment) that is causing a problem in the depths of the signal.
 
I provided the source file and described exactly what my methods were so that you could reproduce the results if you don't trust that I've done things correctly.
I have confirmed this easily with 16-bit. I haven't tested 24-bit.
I can get an extra 20dB out of my headphone amp but it's a pain to do since you have to open it up and move a couple of jumpers around.
Across the zip files I linked to in my previous post, I have included:
 
  • Media Center 20's dithering
  • iZotope's TPDF dither
  • iZotope's "Ultra" noise-shaped MBIT+ dither
  • Voxengo Elephant's TPDF dither
  • Voxengo Elephant's "Gaussian Equal" noise-shaped dither
  • An undithered file for reference

For all of these, the peak level of the source track was pushed down to -120dB (105.6dB attenuation, as the peak is -14.4dB) and a 24-bit file was exported using each dither method.
All 24-bit files were imported into Audacity (for the sake of neutrality) 100dB gain was applied, and a 16-bit file was exported.
Audacity's output is of sufficient quality that it has no bearing on these results.
 
  • Both TPDF implementations sound near-identical.
  • The undithered file sounds heavily distorted, as you would expect.
  • Media Center's dither is clearly different from the two TPDF implementations, and lies somewhere in-between the two. It sounds distorted, but nothing like the undithered file.

 
The noise-shaped dithers were just used for comparison, and out of curiosity more than anything else.
I'm not asking for noise-shaped dithering in Media Center, only a good TPDF implementation.
Which is exactly why I tested the dither algorithms this way.
I'm not testing to see whether the output is dithered or not, I'm testing the quality of the dithering.
 
And I know that amplification can invalidate the results with noise-shaped dithering, but even if that were true, I don't believe that it applies to Media Center's output, and I'm not sure that it's true of the noise-shaped examples here - but that is subjective and not the point of discussion here.
 
 
I could respond to the rest of your comments, but I don't think there is much point if you have not downloaded the files in my previous post and compared them. Without having listened to them, I don't think you understand exactly what I'm trying to demonstrate here.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 28, 2014, 10:25:16 pm
This is my second post. I re studied your post until it made sense. Im still on my iPhone traveling. Let me see if I understand. You attenuated a signal in JRiver (how was that done again?). You used various 24 bit dithers and exported them 24 bits to audacity. Then raised digital gain about 100 dB (dithered) in audacity and output a 16 bit file for convenience because (probably correct) 24 would be unnecessary. And you want us to listen to near the noise floors of the various 24 bit dithers to show (as you observed) that JRiver doesn't do the job as well as the others. Is that correct?

Seems like a fair method. Except in my mind a 100 dB (think about that. 100 dB) boost to decide if the distortions in one are actually significant at normal gains strikes me as a stretch. I don't think you'll prove anything about the performance of the dithers as long as JRiver produces a "passable" output. Because you've amplified a flea's wings to a lion's roar! I think you should concentrate on getting a similar 16 bit test to work, dropping gain something fair, like 40 dB and raising it 40.

I'm equipped to do that accurately at 16 bits without any technical obstacles that you may have introduced. I'll do it for you soon. I would attenuate 40 dB in JRiver, set the parametric to 16 bit simulation with dither,. Feed AES out to sequoia, observe a bitscope in sequoia to confirm the reduction to 16, and record that. Then do the same with elephant. Forget about noise shaped because they sound real sucky when amplified. Then boost 40 dB in Sequoia re dithered probably to 24 to avoid any question. Listen to the two and compare.

I might try the same with 24 bit just for curiosity but continue with the 40 dB pair of atten/boost because in my mind that's the fairest reasonable amount to exaggerate what anyone could ever hear and is probably 20 to 30 dB greater than real life already. I'm not trying to hide any defects at 24 but just being realistic. Let's say we're trying to prove if you can hear my pen scratching on the desk next to you, not whether you can hear me rub my fingers together while sitting in the next room from you! Sound fair?

Bob

 leave the 24 bit checkbox on
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 29, 2014, 07:39:56 am
Please forgive the excess quoting below. I'm on my iPhone tonight. One thing which is not clear from your post is whether the dithers you were comparing were 16 or 24 bit.
[…]
I would only bother to listen to your demo comparisons if they were 24 bit. Then my ears would perk up. I'm already convinced there are problems with 16. Please elaborate.
They were created as 24-bit files.
 
The Media Center example was created using the “convert format” option with the output bit-depth set to 24-bit (not the simulator) and the volume reduction applied via the Parametric EQ’s “adjust volume” option, as it lets you be more specific with the attenuation.
 
The other files were created in iZotope RX, since it lets me specify the dither being used when exporting a file.
 
The “no dither” file was created to confirm that iZotope’s “no dither” output is undithered, and confirming that ensured that the program was suitable for applying the Voxengo Elephant dither. (Since it would not be dithered twice)
 
 
Note: loading these files into Audacity to add 100dB of gain and exporting as a 16-bit file will have probably added some dither to the final "no dither" file. It only needed to be undithered at iZotope's export, which I was able to confirm. This dither after adding 100dB of gain to the file has no bearing on the results.
 
This is my second post. I re studied your post until it made sense. Im still on my iPhone traveling. Let me see if I understand. You attenuated a signal in JRiver (how was that done again?). You used various 24 bit dithers and exported them 24 bits to audacity. Then raised digital gain about 100 dB (dithered) in audacity and output a 16 bit file for convenience because (probably correct) 24 would be unnecessary. And you want us to listen to near the noise floors of the various 24 bit dithers to show (as you observed) that JRiver doesn't do the job as well as the others. Is that correct?
Correct.

Seems like a fair method. Except in my mind a 100 dB (think about that. 100 dB) boost to decide if the distortions in one are actually significant at normal gains strikes me as a stretch. I don't think you'll prove anything about the performance of the dithers as long as JRiver produces a "passable" output. Because you've amplified a flea's wings to a lion's roar! I think you should concentrate on getting a similar 16 bit test to work, dropping gain something fair, like 40 dB and raising it 40.
Bob, for you and I, 40dB should be more than enough, but my initial test was 60dB in 16-bit, and Matt & Jim had a difficult time discerning the difference.

As you perform greater attenuation and gain to the file, such as 100dB in 24-bit in these latest examples, it just makes things more obvious and means that you don't have to play things back so loud.

It’s not at all necessary for it to be this much, it just makes it easier to hear the difference.
Since all I'm trying to do is confirm that A) There is distortion being introduced and B) Media Center is not using TPDF dither, the more obvious these differences are, the better.
 
I’m not at my PC right now either, but I can create files using much less attenuation if you wish—but the results are the same, it just becomes more difficult to discern which dither is being used, rather than whether or not the dither is being performed correctly.

I'm equipped to do that accurately at 16 bits without any technical obstacles that you may have introduced. I'll do it for you soon. I would attenuate 40 dB in JRiver, set the parametric to 16 bit simulation with dither,[…]
Well Matt did say that the bit-depth simulator is less accurate than the output on playback, which is why I used the file convert format tool instead, as that lets you specify an output bit-depth without using the simulator.

[…] Sound fair?
Sounds fair.

I should be back at my PC soon and will create some 16-bit, -40dB files for you if it saves you some time.
I'm probably not going to have a chance to do this today now.
 
I’d still recommend that you try listening to the 100dB files though, since it makes the differences so apparent.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 29, 2014, 09:00:19 am
I've thought some more about the threshold of audibility issue and after discussing it with some psychoacoustic experts off list I've slightly revised my recommendations, but the theme is the same.

It is "ok" to exagerrate gain in order to train the ears to recognize certain artifacts. However, it is not ok to assume that this means that these artifacts are audible at normal gains. I would find it hard to believe that the trained listeners at JRiver had trouble identifying the particular 16-bit problem that I measured. It's definitely a problem. I suggest a simple compromise: If trained ears can hear the artifact at normal monitor gains, then it's a problem, OR, if trained ears can detect the artifact at 20 dB attenuation followed by 20 dB boost, then it's a problem. I submit that 20 dB attenuation/boost is already at least 10 dB more than we would EVER expect a digital reproduction system to be adjusted. It is therefore a "safe extreme" threshold for audibility testing. It accounts for listeners who completely misuse the gain structure of their playback system (e.g. turning up their analog gain far too much and attenuating digitally far too much). It accounts for listeners with extreme hearing sensitivity. It accounts for listeners with very quiet rooms. It accounts for listeners with better DACs than you used for your own audibility tests. Etc. etc. etc. 20 dB is an excellent margin of error. And it avoids the question of suggesting anything more, and I was much too generous to suggest 40 dB attenuation/boost. 100 is completely stupid. Our digital tools give us the power to amplify things which are completely masked in normal circumstances, and so we must be fair to reality.

I propose a standard test for proper dithering where:

1) The user trains his ears to hear the artifacts under question

2) the user attenuates his source 20 dB using the normal tools in the application under test.

3) feeds it out through a DAC (which is a real world situation) testing with/without dither/with various flavors of dither, etc.

4) Re-records it through an ADC

5) Boosts it 20 dB with 24 bit dither

5) Auditions the result at normal monitor gains

If the artifacts are then inaudible, we deem them to be inaudible and completely acceptable.

Unfortunately, I am completely unfamiliar with the parts of MC which are used to export files and the only section of the program that does 16 bits that I am familiar with is the parametric bit simulator in the preferences. I would like to ask 62xxx realistically exactly what his goals are, how he would possibly be using JRiver to generate a 16-bit signal, and how he would be using the program day to day. Exactly what real-world goals are you trying to use JRiver Media Center for? Please Educate me. Until you convince me that there are really applications that a reasonable person would expect JRiver to do, I'm not convinced that 16-bit output is useful. And if you want to be a perfectionist feeding cheap Airplay to cheap speakers in your den, then go ahead and buy Elephant, or Izotope, or PSP's X dither and insert it as a plugin in DSP's signal chain.
-----------

For goodness sakes, let's be realistic! Expecting JRiver to be a DAW is unrealistic. It was not intended to be a DAW.  Although its bit-integrity and resolution for reproduction at 24 bits or feeding 64-bit float via ASIO to another application are impeccable. I use MC to play back music, feeding Acourate Convolver via Acourate at 64 bit float, convolve the audio with a room correction filter, and then dither within Acourate Convolver to 24 bits on the way to my monitor DACs. I also have Acourate filters built in a zone choice in MC to play back motion pictures with 5.1 sound.

However, JRiver is not a DAW, and for $39.95 or whatever the current price I would never expect its tools for wordlength reduction to 16 bits or export of sample rate converted or wordlength-reduced files to be of professional quality. I never heard such a claim and I would be skeptical of a $40 program that claimed to do this. With a bit of work, I bet JRiver could come up to that quality, and that would truly be a bargain. But do you really expect the developers to work on DAW features when that is not their target audience?

For DAWs:

Does Audacity have "automatic dither" that cannot be turned off by the user? If so, then I would not consider Audacity to be professional quality. Does it have the options of exporting floating point files without any dither? If not, then I would not consider Audacity to be professional quality.

The most reasonably-priced PC-based DAW application with these features and good bit-integrity that I would recommend is probably Samplitude. I say probably because I have never used regular samplitude and you would have to look in the preferences to see if regular Samplitude offers the dithering option. I say that because I know that Samplitude Pro and Sequoia do have the dithering options.

OK, back to the listening tests. If MC does not have a built-in way to reduce wordlength to 16 bit in normal reproduction except through a plugin, then why are you going through this exercise? Again, I ask, what real-world use are you asking JRiver to give you for 16-bit real-time reduction? I've already demonstrated that the 24-bit is perfect. if it's feeding another zone that must be 16-bit, then buy a plugin for goodness sake.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: Mitchco on September 29, 2014, 09:34:16 am
...
I’d still recommend that you try listening to the 100dB files though, since it makes the differences so apparent.

Hi 6233638, I can hear the differences you describe in the files you have provided, but I feel the context of your tests do not represent typical day to day usage of JRiver.
 
The context should be comparing dithers at typical program levels.  In other words, typical program levels that 99.9% of JRiver users would listen to on a day to day basis better represents a typical listening scenario.  Especially if one is looking to compare audibility in a typical listening scenario and not under a microscope with 1000X loudness magnification (i.e. 100dB gain) applied. http://www.sengpielaudio.com/calculator-levelchange.htm 
 
Your test effectively takes an amplitude that is typically inaudible, relative to regular program levels, amplifies the loudness by a factor of 1000, which makes it audible and compares.  I feel the test should be the other way around, compare dithers at typical program levels.  Program levels that we all listen to on a day to day basis, not amplifying microscopic amplitudes by a loudness factor of 1000X.
 
I would argue this approach: http://www.computeraudiophile.com/content/520-fun-digital-audio-%96-bit-perfect-audibility-testing/ for testing audibility artifacts better represents the typical listening scenario most listeners would find themselves in on a daily basis.  In other words comparing changes at regular program levels.

Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 29, 2014, 11:32:07 am
Hi 6233638, I can hear the differences you describe in the files you have provided, but I feel the context of your tests do not represent typical day to day usage of JRiver.
 
The context should be comparing dithers at typical program levels.  In other words, typical program levels that 99.9% of JRiver users would listen to on a day to day basis better represents a typical listening scenario.  Especially if one is looking to compare audibility in a typical listening scenario and not under a microscope with 1000X loudness magnification (i.e. 100dB gain) applied. http://www.sengpielaudio.com/calculator-levelchange.htm 
Again, I understand this. It is audible to me at normal playback levels with a 16-bit output.
In most situations, I would expect that the error at 24-bit should be inaudible, though I do think there are some scenarios where it might become audible.
 
Magnifying things this much does two things:
 

Not that Media Center must use a standard TPDF implementation, but the dither currently in use sounds worse than it.

I would find it hard to believe that the trained listeners at JRiver had trouble identifying the particular 16-bit problem that I measured. It's definitely a problem. I suggest a simple compromise: If trained ears can hear the artifact at normal monitor gains, then it's a problem, OR, if trained ears can detect the artifact at 20 dB attenuation followed by 20 dB boost, then it's a problem.
Well I'm glad that we agree on this point.

If MC does not have a built-in way to reduce wordlength to 16 bit in normal reproduction except through a plugin, then why are you going through this exercise? Again, I ask, what real-world use are you asking JRiver to give you for 16-bit real-time reduction?
WASAPI and Kernel Streaming output 16-bit. Both should be bit-perfect, and I know that WASAPI is for sure.
Only ASIO/DirectSound do not offer a 16-bit output.
 
I would like to ask 62xxx realistically exactly what his goals are, how he would possibly be using JRiver to generate a 16-bit signal, and how he would be using the program day to day. Exactly what real-world goals are you trying to use JRiver Media Center for?
To fix 16-bit playback. Maybe not daily, but I use it often enough that I have noticed this before, but assumed it was the hardware at fault rather than Media Center.
Now that I know it's a software issue rather than hardware, I'd like to see it fixed.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 29, 2014, 12:56:14 pm

WASAPI and Kernel Streaming output 16-bit. Both should be bit-perfect, and I know that WASAPI is for sure.
Only ASIO/DirectSound do not offer a 16-bit output.
To fix 16-bit playback. Maybe not daily, but I use it often enough that I have noticed this before, but assumed it was the hardware at fault rather than Media Center.
Now that I know it's a software issue rather than hardware, I'd like to see it fixed.

I see. Well, I propose that when you need simple 16-bit playback with high quality you use a plugin which dithers to 16 bit. Assuming that you can turn off MC's own dither in that condition. Were you able to? I've forgotten, it's somewhere in your posts.

If you can do a workaround with a plugin, then I would say this request is not at all urgent. Send a request to fix 16-bit playback to JRiver, they will prioritize it and see if they can fix it. If there is a good workaround (Elephant, Izotope or PSP X-dither) I think you should send the request and move on. 16-bit playback is not that important to the vast majority of MC users. With a workaround this cannot be an urgent, high priority request in my point of view.

I'll create a +/- 20 dB listening test with Wasapi versus Elephant at 16 bit and report here as well do a listening test at normal levels. (In my copious free time  :-))

You're not going to get anywhere trying to convince JRiver that a 100 dB boosted signal (or anything more than, say, 20 dB) means an urgent fix.

Honestly, hope this helps,

BK
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 29, 2014, 02:20:49 pm
You're not going to get anywhere trying to convince JRiver that a 100 dB boosted signal (or anything more than, say, 20 dB) means an urgent fix.
I'm not trying to. I'm trying to provide something that Matt/Jim will actually hear the difference in, as they did not hear it in my original example, which I thought was already boosted too much in an attempt to make it obvious.
 
At this stage I think we both agree that it's an audible problem with 16-bit, and I would hope that alone is enough to get this fixed.
 
The further examples are simply to give a better idea of what's happening in the lower bits, and show that it's not using standard TPDF.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 29, 2014, 03:03:22 pm
I'm not trying to. I'm trying to provide something that Matt/Jim will actually hear the difference in, as they did not hear it in my original example, which I thought was already boosted too much in an attempt to make it obvious.
 
At this stage I think we both agree that it's an audible problem with 16-bit, and I would hope that alone is enough to get this fixed.
 
The further examples are simply to give a better idea of what's happening in the lower bits, and show that it's not using standard TPDF.

Gotcha. Sounds fair enough. Don't expect a high priority response as I doubt that 16 bit is a high priority for them. Unless you can prove there is no workaround with a plugin.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 30, 2014, 09:46:51 am
Gotcha. Sounds fair enough. Don't expect a high priority response as I doubt that 16 bit is a high priority for them. Unless you can prove there is no workaround with a plugin.
Well there's no option to output an undithered signal in Media Center any more, so wouldn't that mean it is being dithered twice when using Voxengo Elephant?
 
And I really don't want to buy a separate program to fix a problem in Media Center.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 30, 2014, 11:23:28 am
Well there's no option to output an undithered signal in Media Center any more, so wouldn't that mean it is being dithered twice when using Voxengo Elephant?
 
And I really don't want to buy a separate program to fix a problem in Media Center.

In my opinion it is fair to buy a plugin if you are a minority user needing a particular feature that can be covered by a plugin. At least until JRiver gets its act. I purchased Elephant myself during the time when JRiver's 24 bit dither was not up to snuff, because I was a perfectionist. So I think you have to step up to the plate. However, as I suggested, if you can demonstrate there is an obstacle (such as not turning off the 16 bit dither) to doing it properly, then the urgency of the request should go up.

I think it is Kosher to set the output to 24 bits and apply a plugin doing 16 bit dither. I think that just adds insignificant 24 bit noise without disturbing the integrity of the 16 bit output, but I could be wrong, I would have to think about that and test to be sure.

BK
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on September 30, 2014, 11:36:07 am
I think it is Kosher to set the output to 24 bits and apply a plugin doing 16 bit dither. I think that just adds insignificant 24 bit noise without disturbing the integrity of the 16 bit output, but I could be wrong, I would have to think about that and test to be sure.
I had considered that,but I don't know what the driver will do when receiving a 24-bit signal rather than a 16-bit one.
 
Hopefully now that it has been brought to their attention, some effort will be focused on rectifying this problem with their dither.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: bobkatz on September 30, 2014, 02:15:39 pm
I had considered that,but I don't know what the driver will do when receiving a 24-bit signal rather than a 16-bit one.
 
Hopefully now that it has been brought to their attention, some effort will be focused on rectifying this problem with their dither.

I can tell you one thing for sure. If it is a legitimate 16 bit signal in a 24 bit container, then it will survive truncation to 16 bit when you send it to Airplay or some other 16-bit destination you have in mind.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on October 02, 2014, 01:28:08 pm
1.  People are overlooking that Matt said (http://yabb.jriver.com/interact/index.php?topic=76912.msg633839#msg633839), "Yes, the bitdepth simulator is rough and dirty.  It definitely shouldn't be used in critical trials."
Bob Katz used JRiver's regular dither for 24 bit, but the bitdepth simulator for 16 bit.

2.  The 16 bit noise Bob did find, with the "rough and dirty" simulator is at -172dBFS to -173dBFS.
"16-bit:
However, whatever code MC is using appears to develop problems when extended to 16 bit. It exhibits significant noise modulation and some distortion when set to 16 bits. I recommend that any user who feels the need to feed 16-bit devices purchase Voxengo Elephant, which is very reasonably priced. There are no DACs currently available which are limited to 16-bit performance, and the only units which may limit performance to 16 bit are confined to things like Airplay, which should be improved. I would recommend the perfectionist user set up multiple zones, put Voxengo on the zones going to Airplay etc. And set the zone going to his high quality home theatre to 24 bit checkbox without any need for Voxengo. He could insert Voxengo if he thinks he can hear -172 dBFS distortion, but that would be truly anal-retentive behavior."


"The only thing I am disputing is whether you can hear distortion products which are 173 dB down, if you get my drift."

"I think it is completely safe to say that the distortion products in MC which I measured at -173 dBFS, which are 33 dB below the 24 bit noise floor, and 53 dB below the DAC noise floor, are inaudible."

3.  Nobody ever had an issue that I'm aware of before JRiver introduced dither in 18.0.106. They used to truncate which now looks "terrible." 

4.  As mentioned previously, 6233638 testing methodology does not isolate the dither to only dither or distortion produced by JRiver. The test file is modified subsequent to JRiver's dither at least two more times and possibly by WASAPI.

5.  Conclusion from Bob Katz:
24 bit:  "I use JRiver as a high-fidelity player in my mastering room, which is one of the best-sounding rooms and playback systems in the country and I'm thrilled with the purity of tone and sound quality of JRiver when set to 24 bits."

16 bit:  "Where would you draw the line in perfection?  :-) That's why I think Matt has far more important things on his plate than to "fix" problems which are at -173 dBFS."
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on October 02, 2014, 02:16:52 pm
I got to do a little testing earlier today and I am quite confident that Media Center is using 1LSB RPDF for its dither - or something which sounds very similar to it.
 
Increasing this to 2LSB would be a big improvement, eliminating the obvious distortion, and greatly reducing the severity of noise modulation.

At 2LSB, switching from RPDF to TPDF seems to eliminate the noise floor modulation too.
 
Perceptual dithers are interesting, but I think that the best overall results may just be TPDF. Or at least, they are the most consistent.
 
4.  As mentioned previously, 6233638 testing methodology does not isolate the dither to only dither or distortion produced by JRiver. The test file is modified subsequent to JRiver's dither at least two more times and possibly by WASAPI.
For all intents and purposes, it does. Dither has little-to-no effect on the upper bits in the signal.
MC's conversion function was used as my primary means of testing, not capturing its output during playback.
 
16 bit:  "Where would you draw the line in perfection?  :-) That's why I think Matt has far more important things on his plate than to "fix" problems which are at -173 dBFS."
-173 dBFS is for 24-bit, not 16-bit. And I don't agree that the problems only begin that low in the signal even with 24-bit.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on October 02, 2014, 03:18:38 pm
-173 dBFS is for 24-bit, not 16-bit. And I don't agree that the problems only begin that low in the signal even with 24-bit

JRiver is being attenuated by 82dB for the tests. Bob says in the 16-bit conclusion section that there is some distortion and one could use Voxengo to bypass the 16-bit distortion. He then says one would only use Voxengo if they think they can hear -172dBFS distortion. Why would he recommend Voxengo for 24 bit when he said it is an academic argument to ask to improve JRiver's 24-bit dither? What makes you think he is talking about 24-bit?  Here is the entire quote again:

Conclusions:

My opinion has not changed regarding MC's performance on PC at 24 bits (measured with ASIO). I am thrilled with its sound and measured performance. I have measured insignificant distortion, many dB below the threshold of hearing, in fact likely masked by the DAC noise. There is no noise modulation whatsoever. MC's measured performance is exceeded only by Voxengo by the tiniest measurable but inaudible margin. It's an academic argument to ask JRiver to improve the 24-bit performance. I own some professional-quality, high integrity DSP products which show slightly more distortion on the FFT that is still well below threshold of hearing and whose sound is also excellent.

16-bit:
However, whatever code MC is using appears to develop problems when extended to 16 bit. It exhibits significant noise modulation and some distortion when set to 16 bits. I recommend that any user who feels the need to feed 16-bit devices purchase Voxengo Elephant, which is very reasonably priced. There are no DACs currently available which are limited to 16-bit performance, and the only units which may limit performance to 16 bit are confined to things like Airplay, which should be improved. I would recommend the perfectionist user set up multiple zones, put Voxengo on the zones going to Airplay etc. And set the zone going to his high quality home theatre to 24 bit checkbox without any need for Voxengo. He could insert Voxengo if he thinks he can hear -172 dBFS distortion, but that would be truly anal-retentive behavior.

Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mattkhan on October 02, 2014, 03:53:38 pm
frankly I have no idea how dither should be implemented or whether I'd even hear the difference with normal listening material. However I do have one question; if 2LSB TPDF is the one true way then why wouldn't jriver just implement that? Is it computationally expensive? have some other undesirable downside? or is it just because dither is an unusually esoteric subject that few people really know how to implement?
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: 6233638 on October 02, 2014, 03:59:05 pm
When doing some further reading on the subject, there was a post from Bruno which, to paraphrase, said that the random noise generator was the computationally expensive part of dithering, and that the cost of using 1 or 2 LSB, RPDF or TPDF would be negligible.
 
There are potentially better ways than 2LSB TPDF, such as using noise shaping, but that is beyond the scope of what I would expect JRiver to change, and I'm not sure that it's important at all.
 
2LSB TPDF avoids both distortion and noise modulation, which is the main issue.
Anything else you do is a trade-off for where the noise is (trying to make it less audible by shifting it to higher frequencies) and other changes could potentially make things worse.
Title: Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
Post by: mojave on October 02, 2014, 05:04:48 pm
16-bit gets you around 96dB of dynamic range undithered.
Bob used tones encoded at -32dbFS. After the 82dB attenuation in JRiver the signal level is now at -114 dBFS. One would expect the distortion to be lower. The distortion is now at -172dBFS. This has nothing to do with the dynamic range of 16-bit audio being 96 dB.

To go the opposite direction, I can listen to my Blu-ray of Cream: Live at Royal Albert Hall that is 16-bit. Drum beats are in excess of 120 dB in my room. Does that mean they really aren't in excess of 120 dB since 16-bit has a dynamic range of 96 dB? No, they don't have anything to do with each other.