file/stream info issues and audio processing logic confusion

Submit your proposals and ideas here.
Post Reply
o0o
Posts: 5
Joined: Mon Feb 06, 2012 7:45 pm

file/stream info issues and audio processing logic confusion

Post by o0o » Thu Feb 11, 2016 2:58 pm

Hi Дима!

I would like to sort out some mess with file/stream information displayed under the seek-bar (when 3 dots are clicked under controls).

When 64-bit processing is enabled the following info is being showed: AAC@16 bits, MPC@64, OPUS@32, MPEG@64, OGG@32- all that is very confusing since non-PCM formats have no associated bit depths and most decoders usually output data @ 32 float-point. So what decoder is used in Neutron for all these formats? Is it 32 bit float-point or 64-bit or varies :?:

I believe, there should be no bit depth specified for non-PCM formats! But it should be clear what bit depth decoder produces for each format. in 32-bit mode or 64-bit (if decoder outputs in such bit depth).

Also i don't understand the point of using dithering as a quality option. If output device is limited to 16-bit it should be enabled automatically for anything higher than 16-bit by default (32/64-bit non-pcm decoder out, 24 bit files, enabled 64-bit processing). Since Android 5< allows for 32bit output, there's no need for dithering at all and no need for option to enable 32-bit output as well, imo, it should be outputting 32bit as default. 8-)

Btw OGG shouldn't be used as description of an audio stream, since it's a container. Vorbis would be the correct indication (in case it's Vorbis) :)

Also it would be nice to have option to completely turn off internal sample rate conversion.

Дим, clarify this stuff, пожалуйста.

Very kind regards.

dmitrykos
Site Admin
Posts: 1914
Joined: Mon Apr 25, 2011 6:15 pm

Re: file/stream info issues and audio processing logic confu

Post by dmitrykos » Tue Feb 16, 2016 4:51 pm

Hi!

> So what decoder is used in Neutron for all these formats? Is it 32 bit float-point or 64-bit or varies

It varies depending on underlying decoder. Some decoders are compiled with fully 64-bit floating point math for 64-bit mode of Neutron and thus those are showing 64-bit (MPC, MP3), OGG/Vorbis is compiled with 32-bit floating point math and thus is showing 32-bits, AAC decoder does not have such possibility and thus outputs with basic 16-bit resolution. Neutron is showing the source bits which decoder provides to the Neutron's audio engine.

> I believe, there should be no bit depth specified for non-PCM formats

You can always press 3-dots button and hide the detailed description if that is not important/needed :)

> If output device is limited to 16-bit it should be enabled automatically for anything higher than 16-bit by default

It depends on user's preferences. Using or not using Dithering is not a must for conversion to the 16-bit from 32/64-bits because dithering will apply an additional random noise (its nature). Some users may be using for different experiments, some may not like the fact for enforced dithering - so it is optional. Actually the whole nature of Neutron, if you noticed it, - to not force anything to the user and provide options instead. To my view it fair enough.

> Since Android 5< allows for 32bit output, there's no need for dithering at all

There is no dithering added for 32-bit output, even if it is switched on. Also even though Android provides 32-bit fp output it does not mean that firmware of a given device will not convert it to 16-bits. Nobody knows how this conversion will be done, will dithering be applied or not, how min/max truncation will be done, so basically it is a black-box which depends solely on driver and firmware developer. So if you enable 32-bit fp output in Android it does not mean that 100% quality of audio output will be improved. So those users who know that device's DAC is 16-bit could prefer conversion on Neutron's side with expected guaranteed quality and inside an Android OS it will be a pass by operation. Another cons for 32-bit fp output by default on all 5+ Android devices is that there are devices/firmwares with buggy implementation which results in garbled audio. Thus the best and safest defaultoutput format on Android platform for Neutron is still 16-bit for all supported Android versions and devices. User is provided with option to try and enable 32-bit fp output instead.

> OGG shouldn't be used as description of an audio stream, since it's a container. Vorbis would be the correct indication (in case it's Vorbis)

It is true, but OGG is more known and associated with OGG/Vorbis while Vorbis is almost not known by a generic user (from the experience) so that OGG is displayed. May be displaying Vorbis would be more correct I agree, will consider it to change in the future.

> to have option to completely turn off internal sample rate conversion

You can not turn it off because if you try playing source music file sampled with 44100 Hz frequency and your device outputs/works with 48000 Hz without SR conversion you will get quickly playing music with pitch/tempo ratio 48000/44100 = 1,08843537414966. Neutron will not do any re-sampling if frequency is equal to the output format frequency. But if it is different it must always be done.

Best regards,
Dmitry.

Mobile
Posts: 50
Joined: Mon Aug 31, 2015 8:58 am

Re: file/stream info issues and audio processing logic confu

Post by Mobile » Tue Feb 16, 2016 7:45 pm

Is that a limitation of some devices or Android? Under iOS I requested the same because my USB DAC will happily switch to any sample rate that is requested, in real-time and without noise problems. This is working since years, and right now with apps like nPlayer (version 2.x) or FileBrowser (current), and some others. AFAIR Onkyo HF Player does that too if you disable 'Upsampling'.

So why not such an option in Neutron?

dmitrykos
Site Admin
Posts: 1914
Joined: Mon Apr 25, 2011 6:15 pm

Re: file/stream info issues and audio processing logic confu

Post by dmitrykos » Wed Feb 17, 2016 8:45 pm

Mobile, if USB DAC is connected and 'Direct USB Driver' option is active then Neutron will pass by the Android's audio layer and will talk to USB device directly (next update will improve compatibility with many UAC 2.0 and 1.0 devices). Currently you can set fixed rate in Neutron when USB DAC is connected and thus it can operate in Upsampling mode. I would prefer to use always Upsampling in Neutron because in such case its audio engine is working with the Upsampling frequency (for example 384 kHz) and all DSP processing is done with that frequency as well that results in better quality. In to-do though there is a task to implement switching DAC to the freq. of the music source but in such case you will loose crossfading, fading effects as well as true gapless playback and thus it is currently undesirable.

> AAC@16 bits

o0o, I made mistake, for me Neutron is showing 32-bits in details, not 16.

Mobile
Posts: 50
Joined: Mon Aug 31, 2015 8:58 am

Re: file/stream info issues and audio processing logic confu

Post by Mobile » Thu Feb 18, 2016 6:40 pm

dmitrykos wrote:Mobile, if USB DAC is connected and 'Direct USB Driver' option is active then Neutron will pass by the Android's audio layer
Sorry, but I asked about iOS.
dmitrykos wrote:In to-do though there is a task to implement switching DAC to the freq. of the music source but in such case you will loose crossfading
Obviously, and as I don't use that...no problem.
dmitrykos wrote:as well as true gapless playback and thus it is currently undesirable.
????
Gapless playback is based on files from one source, means they have identical sample rate. I can't imagine where this would be needed with totally different files which not 'belong together', so to say.

IMHO there is no valid argument to deny a feature that works without a problem in other apps.

Post Reply

Who is online

Users browsing this forum: No registered users and 16 guests