INTERACT FORUM

Please login or register.

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

Author Topic: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....  (Read 132039 times)

bobkatz

  • World Citizen
  • ***
  • Posts: 213

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?
Logged

Matt

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 42444
  • Shoes gone again!
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #1 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.
Logged
Matt Ashland, JRiver Media Center

Matt

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 42444
  • Shoes gone again!
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #2 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?
Logged
Matt Ashland, JRiver Media Center

mojave

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 3732
  • Requires "iTunes or better" so I installed JRiver
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #3 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.
Logged

hulkss

  • Galactic Citizen
  • ****
  • Posts: 451
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #4 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
Logged

mojave

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 3732
  • Requires "iTunes or better" so I installed JRiver
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #5 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
But if you can't choose between dither or truncate with JRiver, then you can't measure the difference.
Logged

bobkatz

  • World Citizen
  • ***
  • Posts: 213
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #6 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?
Logged

JimH

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 72544
  • Where did I put my teeth?
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #7 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
Logged

bobkatz

  • World Citizen
  • ***
  • Posts: 213
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #8 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 :-).
Logged

Matt

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 42444
  • Shoes gone again!
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #9 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.
Logged
Matt Ashland, JRiver Media Center

JimH

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 72544
  • Where did I put my teeth?
Logged

Matt

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 42444
  • Shoes gone again!
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #11 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.
Logged
Matt Ashland, JRiver Media Center

Matt

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 42444
  • Shoes gone again!
Logged
Matt Ashland, JRiver Media Center

gappie

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 4583
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #13 on: January 03, 2013, 04:17:11 pm »

i like the topic.... and how quickly it got added in mc.. gottotest :)
Logged

Dr Tone

  • World Citizen
  • ***
  • Posts: 164
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #14 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
Logged

gappie

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 4583
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #15 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
Logged

bobkatz

  • World Citizen
  • ***
  • Posts: 213
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #16 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
Logged

Listener

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 1084
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #17 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
Logged

Matt

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 42444
  • Shoes gone again!
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #18 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).
Logged
Matt Ashland, JRiver Media Center

dean70

  • Citizen of the Universe
  • *****
  • Posts: 508
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #19 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?  ?
Logged

Matt

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 42444
  • Shoes gone again!
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #20 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).
Logged
Matt Ashland, JRiver Media Center

dean70

  • Citizen of the Universe
  • *****
  • Posts: 508
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #21 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.
Logged

Videophile

  • Recent member
  • *
  • Posts: 11
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #22 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.
Logged

bobkatz

  • World Citizen
  • ***
  • Posts: 213
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #23 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.
Logged

mojave

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 3732
  • Requires "iTunes or better" so I installed JRiver
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #24 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.

Logged

bobkatz

  • World Citizen
  • ***
  • Posts: 213
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #25 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
Logged

bobkatz

  • World Citizen
  • ***
  • Posts: 213
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #26 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
Logged

Matt

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 42444
  • Shoes gone again!
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #27 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.
Logged
Matt Ashland, JRiver Media Center

mojave

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 3732
  • Requires "iTunes or better" so I installed JRiver
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #28 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
Logged

Matt

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 42444
  • Shoes gone again!
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #29 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"?
Logged
Matt Ashland, JRiver Media Center

mojave

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 3732
  • Requires "iTunes or better" so I installed JRiver
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #30 on: January 25, 2013, 02:21:51 pm »

Here is some info from the Lynx Frequency Asked Questions:

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.
Logged

mojave

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 3732
  • Requires "iTunes or better" so I installed JRiver
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #31 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.
Logged

bobkatz

  • World Citizen
  • ***
  • Posts: 213
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #32 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.
Logged

dean70

  • Citizen of the Universe
  • *****
  • Posts: 508
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #33 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?
Logged

Matt

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 42444
  • Shoes gone again!
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #34 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?
Logged
Matt Ashland, JRiver Media Center

bobkatz

  • World Citizen
  • ***
  • Posts: 213
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #35 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!
Logged

dean70

  • Citizen of the Universe
  • *****
  • Posts: 508
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #36 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?
Logged

mojave

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 3732
  • Requires "iTunes or better" so I installed JRiver
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #37 on: January 25, 2013, 10:06:39 pm »

Bob, Voxengo's 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.
Logged

TheLion

  • MC Beta Team
  • Galactic Citizen
  • *****
  • Posts: 437
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #38 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!
Logged

bobkatz

  • World Citizen
  • ***
  • Posts: 213
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #39 on: January 26, 2013, 08:08:36 am »

Bob, Voxengo's 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.
Logged

hulkss

  • Galactic Citizen
  • ****
  • Posts: 451
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #40 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.
Logged

mojave

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 3732
  • Requires "iTunes or better" so I installed JRiver
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #41 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.
Logged

Matt

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 42444
  • Shoes gone again!
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #42 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?
Logged
Matt Ashland, JRiver Media Center

bobkatz

  • World Citizen
  • ***
  • Posts: 213
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #43 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
Logged

Matt

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 42444
  • Shoes gone again!
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #44 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 :)
Logged
Matt Ashland, JRiver Media Center

mojave

  • MC Beta Team
  • Citizen of the Universe
  • *****
  • Posts: 3732
  • Requires "iTunes or better" so I installed JRiver
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #45 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).
Logged

dean70

  • Citizen of the Universe
  • *****
  • Posts: 508
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #46 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).
Logged

Matt

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 42444
  • Shoes gone again!
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #47 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.
Logged
Matt Ashland, JRiver Media Center

Matt

  • Administrator
  • Citizen of the Universe
  • *****
  • Posts: 42444
  • Shoes gone again!
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #48 on: January 30, 2013, 08:55:21 pm »

drgalexo Asio4All question split here:
http://yabb.jriver.com/interact/index.php?topic=77809.0
Logged
Matt Ashland, JRiver Media Center

hulkss

  • Galactic Citizen
  • ****
  • Posts: 451
Re: When reducing bitdepth from 64-bit to 24-bit in ASIO, does JRiver....
« Reply #49 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.
Logged
Pages: [1] 2 3 4   Go Up