Local vs internet streaming SQ

It’s here in the sample rate conversion settings

1 Like

Hrm. That was my best guess. Do you have a way to upload the track from each version to Google Drive or similar and give me a download link? Happy to dig into it.

And here for DSD (an example):

Maybe I am missing something, but all I see is DSD to PCM, not PCM to DSD like the OP talked about.

Does it show something like the following screenshot:

Btw, your PC/Mac CPU usage will shoot up if you do DSD upsampling.

If you have the time I certainly have the curiosity! :slight_smile:

Just OK @Richard.Dane sending me your email by PM and I’ll send them using WeSendIT.

Mike

With thanks in advance to Richard…

I am curious too if I can figure it out. @Richard.Dane you have my email in my profile, please kindly provide to Michaelb

1 Like

All files have to be convered to raw LPCM before they are sent on to the DAC stage as a DAC can only input LPCM. There for it has to be decompressed. WAV and AIFF are also decoded but as the are not file compressed its just wrapping it differenntly which is less cpu work.

2 Likes

Just sent the files using WeTransfer!

Cheers

1 Like

Ok, i am convinced of course, till some posts now.
So maybe, even if Flac need to be decompressed, and that need additional processing, maybe Flac are easier to stream, or something like that.
In the case of MQA for instance, the files are easier to stream, because they are quicker to decode, vs for example a hires 24/192 file. With a fully MQA capable dac, many found these files equal or sometimes superior to true hires.

I had my SU for almost 6 months (QNAP/Asset) before I tried transcoding. I read so many posts here about legacy streamers and transcoding to WAV. My library is primarily AIFF and FLAC. And one day I gave it a try and sure enough the music sounded so much better. I was pretty meh about the SU up to this point. Add to that getting a switch and BJC ethernet cables and all of a sudden the SU was quite a formidable one box hifi machine.

MQA requires more processing to decode. As a Roon user the amount of CPU usage is shown and FLAC requires very little to decompress.

1 Like

What I can read on an audiophile french site: “
The interest of the MQA format is not so much to offer the listener higher quality sound, as to produce smaller file sizes, which is of interest for streaming ”

That’s certainly the case with MQA file sizes, smaller than Hires FLAC. With today’s typical broadband speeds it’s pretty much irrelevant though.

1 Like

I am back at work now YB,will check if I see that screen tomorrow. I don’t like the idea of the computer working much harder,might not be a worth the hassle in the end I guess.

Honestly can’t tell the difference.

And often surprised how good bluetooth sounds! I know how very dare I. I may be the only forum member to use bluetooth! But my wife often connects her phone with Bluetooth because the casting can be a bit clunky

Thanks to @Michaelb for sending the mysterious flac files for analysis. Here it comes. I did this in Linux, you can do the same with the “flac” command line programs on Windows or the Terminal on Mac. (On the Mac it will most likely work verbatim as it has a similar terminal to Linux. On Window you would have to use their atrocious command line syntax). I will post each step so that the inclined reader can see everything I do in detail. Using the Linux terminal makes this easier for me and I can copy all commands and results to this post, as it is just text. (There might be GUI programs to do this as well, I don’t know). I hope this does not make it too difficult to follow for those not used to the terminal commands - I will try to explain each step.

If you don’t want to know all the nitty-gritty, jump down to the summary in step #15

#1 To clarify first, I am doing all this while logged in as mario on my machine, chronic, in the flac_analysis directory. This is always signified by this in the subsequent copies of the commands:

mario@chronic:~/flac_analysis$

On the same line you will see the command that I issue, on the subsequent line(s) the results that the terminal outputs.

#2 The zip file sent by Michael was downloaded to this folder, it is 79 MB in size. The command is “ls -sh” for “list (ls) the size (s) in human-readable (h) units”:

mario@chronic:~/flac_analysis$ ls -sh
total 79M
 79M  wetransfer_those-two-files_2022-01-18_2016.zip

#3 Unzipping the zip

mario@chronic:~/flac_analysis$ unzip wetransfer_those-two-files_2022-01-18_2016.zip 
Archive:  wetransfer_those-two-files_2022-01-18_2016.zip
Written using ZipTricks 5.6.0
 extracting: 10 Cocteau Twins - Musette And Drums.flac  
 extracting: 01-10-Cocteau_Twins-Musette_and_Drums-LLS.flac 

#4 This results in two flac files, one is 32 MB in size, the other is 48 MB. (Attentive readers might notice that I have already moved the original zip out of the way for clarity)

mario@chronic:~/flac_analysis$ ls -sh
total 157M
32M  01-10-Cocteau_Twins-Musette_and_Drums-LLS.flac  48M '10 Cocteau Twins - Musette And Drums.flac'

(The 48 MB file shows the file name with enclosing quotes because the name contains spaces)

#5 We are ready to go. First I simply use the offical flac program to decode the two flac files to wav. This also strips out the album art that was embedded into the two flacs (which was not the same but very similar, and was not responsible for the different flac file sizes). The * in the decode command simply means “all files in this folder”:

mario@chronic:~/flac_analysis$ flac --decode *
flac 1.3.3
Copyright (C) 2000-2009  Josh Coalson, 2011-2016  Xiph.Org Foundation
flac comes with ABSOLUTELY NO WARRANTY.  This is free software, and you are
welcome to redistribute it under certain conditions.  Type `flac' for details.
01-10-Cocteau_Twins-Musette_and_Drums-LLS.flac: done         
10 Cocteau Twins - Musette And Drums.flac: done

#6 Let’s look at the sizes of the resulting wav files:

mario@chronic:~/flac_analysis$ ls -sh *.wav
48M  01-10-Cocteau_Twins-Musette_and_Drums-LLS.wav  48M '10 Cocteau Twins - Musette And Drums.wav'

Ha! They are both 48 MB.

#7 That’s a rough size in MB, we want to know exactly. The -l option is for “long”. This outputs the file permissions and ownership (ignore these), followed by the sizes in bytes:

mario@chronic:~/flac_analysis$ ls  -l *.wav
-rw-r--r-- 1 mario mario 49345004 Jan 18 21:16  01-10-Cocteau_Twins-Musette_and_Drums-LLS.wav
-rw-r--r-- 1 mario mario 49345004 Jan 18 21:16 '10 Cocteau Twins - Musette And Drums.wav'

Both wav files are 49345004 bytes! OK, this is a hint that they might be the same, but I could, e.g., write two entirely different novels with the same number of characters - are the files really the same?

#8 The “sha256sum” program reads files and computes a checksum (a so-called hash). It’s mathematically proven that if the resulting hash is the same, the files are bit-for-bit the same. This saves us from having to compare the two files bit for bit ourselves.

mario@chronic:~/flac_analysis$ sha256sum *.wav
0844e0c3765d0ef4dee9efaf075edf3e054d1074d81b58912d4ffb4f24f84fb9  01-10-Cocteau_Twins-Musette_and_Drums-LLS.wav
0844e0c3765d0ef4dee9efaf075edf3e054d1074d81b58912d4ffb4f24f84fb9  10 Cocteau Twins - Musette And Drums.wav

The same. The two flac files, despite having very different sizes, decode into the exact same wav file. Unless we are dealing with a cruel intelligence service with vast resources, who is intent on tricking us, we can assume that this means that the two flac files were also originally created from the same wav file.

#9 Well OK, but why, then, were the flac file sizes so different? Michael already wrote in a previous post that it’s not the album art embedded into the flac files, as it’s similar. I confirmed this, but am leaving out this part, in order to not make this write-up even longer.

Let’s look at the larger one of the flac files, together with the wav file that was decoded from it. (The spaces in the filename on the command line are escaped with backslashes so that the terminal is not confused about where the filename ends):

mario@chronic:~/flac_analysis$ ls -l 10\ Cocteau\ Twins\ -\ Musette\ And\ Drums.*
-rw-r--r-- 1 mario mario 49469913 Jan 18 21:16 '10 Cocteau Twins - Musette And Drums.flac'
-rw-r--r-- 1 mario mario 49345004 Jan 18 21:16 '10 Cocteau Twins - Musette And Drums.wav'

That’s mighty similar, 49469913 vs. 49345004 bytes. Without writing down further proof, let me state that the small difference is caused by the metadata tags and album art in the flac, which were stripped out when decoding it to wav. So the music data in the flac is not really smaller than the wav. How so?

#10 Let’s analyze the original flac files a bit more. The flac program has an analyze option, which outputs information about each compressed music data frame that’s contained in the flac file. Let’s generate this analysis data:

mario@chronic:~/flac_analysis$ flac --analyze *.flac
flac 1.3.3
Copyright (C) 2000-2009  Josh Coalson, 2011-2016  Xiph.Org Foundation
flac comes with ABSOLUTELY NO WARRANTY.  This is free software, and you are
welcome to redistribute it under certain conditions.  Type `flac' for details.
01-10-Cocteau_Twins-Musette_and_Drums-LLS.flac: done                    
10 Cocteau Twins - Musette And Drums.flac: done 

#11 This gives us two “.ana” files that are text files with analysis data:

mario@chronic:~/flac_analysis$ ls *.ana
 01-10-Cocteau_Twins-Musette_and_Drums-LLS.ana  '10 Cocteau Twins - Musette And Drums.ana'

Let’s look at them.

#12 I am omitting the command to read the .ana files, it’s just a text reader. Following are the beginnings of the files, including the first frame of music data. The rest is essentially the same within each file.

First the smaller flac file, 01-10-Cocteau_Twins-Musette_and_Drums-LLS.flac. This looks like normal flac. The frame=0 is just empty, the second frame, frame=1, is the start of the music data. The interesting part is the type=LPC. This is the type of compression algorithm that flac normally uses. The analysis shows that it read some music data in this frame, then in qlp_coeff made some guesses about the data, so that it can efficiently compress it, then started its work.

frame=0 offset=503      bits=2126728    blocksize=4608  sample_rate=44100       channels=2      channel_assignment=INDEPENDENT
        subframe=0      wasted_bits=0   type=CONSTANT   value=0
        subframe=1      wasted_bits=0   type=CONSTANT   value=0
frame=1 offset=266344   bits=93880      blocksize=4608  sample_rate=44100       channels=2      channel_assignment=INDEPENDENT
        subframe=0      wasted_bits=0   type=LPC        order=9 qlp_coeff_precision=12  quantization_level=8    residual_type=RICE      partition_order=6
                qlp_coeff[0]=801
                qlp_coeff[1]=-1210
                qlp_coeff[2]=1300
                qlp_coeff[3]=-1190
                qlp_coeff[4]=954
                qlp_coeff[5]=-668
                qlp_coeff[6]=407
                qlp_coeff[7]=-186
                qlp_coeff[8]=46
                warmup[0]=0
                warmup[1]=0
                warmup[2]=0
                warmup[3]=0
                warmup[4]=0
                warmup[5]=0
                warmup[6]=0
                warmup[7]=0
                warmup[8]=0
                parameter[0]=0
                parameter[1]=0
                parameter[2]=0
                parameter[3]=0
                parameter[4]=0
                parameter[5]=6
                parameter[6]=6
(and so on)

Let’s look at the larger flac file, the one that’s essentially the same size as the wav that it came from, ‘10 Cocteau Twins - Musette And Drums.ana’:

frame=0 offset=634      bits=902392     blocksize=4608  sample_rate=44100       channels=2      channel_assignment=INDEPENDENT
        subframe=0      wasted_bits=0   type=VERBATIM
        subframe=1      wasted_bits=0   type=VERBATIM
frame=1 offset=113433   bits=147536     blocksize=4608  sample_rate=44100       channels=2      channel_assignment=INDEPENDENT
        subframe=0      wasted_bits=0   type=VERBATIM
        subframe=1      wasted_bits=0   type=VERBATIM
frame=2 offset=131875   bits=147536     blocksize=4608  sample_rate=44100       channels=2      channel_assignment=INDEPENDENT
        subframe=0      wasted_bits=0   type=VERBATIM
        subframe=1      wasted_bits=0   type=VERBATIM
(and so on)

Well, that’s not doing much, does it. type=VERBATIM informs us that it just copied the original PCM music data from the wav file and put it into a flac, without compressing it. So that’s not much of a surprise then, that the flac is not smaller than the wav.

#13 How is that? If you look at the info on the web about using flac for encoding, you will see that flac has different compression levels, but even the value “0” does not mean that it does no compression at all.

However, the developers of dBPoweramp proposed using flac without any compression and also implemented this (which is fine because the flac format is free and open, and as long as their implementation does not break other software that wants to read these flac files, why not). Using this approach, the flac file only becomes a container for PCM data with the additional benefit of using the well-standarized metadata tags that the flac file format provides, while metadata support for wav files is more patchy among tagging software. This was not accepted by the flac developers into the official standard, as far as I can tell, because just using the existing “0” compression level has no downsides, anyway.

As @Michaelb wrote, this is what he is using as default in his dbPoweramp settings, so this makes sense. (I believe that the post-installation default in dbPoweramp is flac’s default level 5, but I would have to plug in my CD reader to check and I can’t be bothered :slight_smile: )

Nevertheless, although there is no official “no compression” option in the official, “upstream” flac software and specification, there are sets of options that achieve something very similar. So I will try these.

#14 Let’s try this by re-encoding the wav file into a flac with these options. First I simply create a new directory, copy the wav file into it, and change into the new directory:

mario@chronic:~/flac_analysis$ mkdir newflac
mario@chronic:~/flac_analysis$ cp '10 Cocteau Twins - Musette And Drums.wav' newflac/
mario@chronic:~/flac_analysis$ cd newflac/
mario@chronic:~/flac_analysis/newflac

Let’s encode:

mario@chronic:~/flac_analysis/newflac$ flac -l 0 --disable-constant-subframes --disable-fixed-subframes '10 Cocteau Twins - Musette And Drums.wav' 
flac 1.3.3
Copyright (C) 2000-2009  Josh Coalson, 2011-2016  Xiph.Org Foundation
flac comes with ABSOLUTELY NO WARRANTY.  This is free software, and you are
welcome to redistribute it under certain conditions.  Type `flac' for details.
10 Cocteau Twins - Musette And Drums.wav: wrote 49480084 bytes, ratio=1,003

Note the “ratio” output info. It’s not exactly 0 compression, but actually the flac is a tiny bit larger by fractions of percents. Let’s look at the file sizes:

mario@chronic:~/flac_analysis/newflac$ ls -l
total 96516
-rw-r--r-- 1 mario mario 49480084 Jan 18 23:25 '10 Cocteau Twins - Musette And Drums.flac'
-rw-r--r-- 1 mario mario 49345004 Jan 18 23:25 '10 Cocteau Twins - Musette And Drums.wav

Confirmed, the flac is a tiny bit larger than the wav. Probably because it contains the same PCM plus some info that the flac decoder needs to know what is going on. Let’s look at the data analysis, again with

mario@chronic:~/flac_analysis/newflac$ flac --analyze '10 Cocteau Twins - Musette And Drums.flac

What’s in the ‘10 Cocteau Twins - Musette And Drums.ana’ analysis file?

frame=0 offset=594      bits=102512     blocksize=1152  sample_rate=44100       channels=2      channel_assignment=INDEPENDENT
        subframe=0      wasted_bits=0   type=VERBATIM
        subframe=1      wasted_bits=0   type=VERBATIM
frame=1 offset=13408    bits=36944      blocksize=1152  sample_rate=44100       channels=2      channel_assignment=INDEPENDENT
        subframe=0      wasted_bits=0   type=VERBATIM
        subframe=1      wasted_bits=0   type=VERBATIM
frame=2 offset=18026    bits=36944      blocksize=1152  sample_rate=44100       channels=2      channel_assignment=INDEPENDENT
        subframe=0      wasted_bits=0   type=VERBATIM
        subframe=1      wasted_bits=0   type=VERBATIM
(and so on)

#15 Ca-ching! It’s not exactly the same analysis data as in Michael’s dbPoweramp rip, but there are other options that could be added to the encoding command, and anyway it’s close enough. To summarize:

  • Both flac files that Micheal provided decode into the same wav file, so they also came from the same original wav file.
  • The smaller flac from the Qobuz download used normal flac compression.
  • The larger flac from @MichaelB’s own rip from dbPoweramp used most likely an unoffical flac implementation by the dbPoweramp developers that performs no compression.
  • The two flac files should sound the same as they decode into the same PCM data.
  • I have no explanation for why his own rip sounds better to Michael. Suggestions welcome, but please try to be plausible :wink:

#16 Materials.

You can see the official technical specification for the subframe types (LPC and VERBATIM) here:

And fundamentals about the encoder design here:

A forum discussion with some knowledgeable posts that also explain a bit about the frame type=LPC vs type=VERBATIM and are not too technical, here:

(I hope this is OK to link, it’s old and unlikely to stir up controversy)

A discussion about the “no compression” suggestion by the dbPoweramp designer here on the Github site of the Xiph project (the official flac developers). (Github provides hosting for software projects):

7 Likes

@Suedkiez, are you a sw dev or qa by any chance?

Now managing the testing & support teams in a software development company. Very long ago also worked as a software developer in a different company (but was worse at it than my own expectations, so that made me unhappy).

1 Like

By the way, in case you already read the above and found mistakes, I also did while you were reading and made some edits. If you find any issues please let me know and I will fix it, I don’t want to confuse anyone.

2 Likes