Jump to content
IGNORED

MQA technical analysis


mansr

Recommended Posts

5 hours ago, mansr said:

Precisely. Low-pass filtering this signal produces properly interpolated samples.

 

The MQA "rendering" normally starts with a sample rate of 88.2/96 kHz, so the aliases will begin at 44.1/48 kHz. Any real signal content at these frequencies was lost in the MQA encoding process. It is likely that the 0-48 kHz spectrum encoded by MQA also contains aliases of higher frequencies if they were present in the recording, assuming the downsampling filters are similarly poor. The band splitting at 24 kHz might also introduce aliases.

 

That's almost exactly what I said too.

Hi,

Thanks for confirming. I am surprised the MQA system is so poor, given the claims made for the superiority.

Regards,

Shadders.

Link to comment
38 minutes ago, Ralf11 said:

I'm inclined believe someone who has compared a regular recording with an MQA one.

 

It's been 21 pages now, so has anyone been able to do that?

If you mean, has anyone actually compared them by listening, then probably not. That's not what this thread is for. It's about how it works, not how it sounds.

"People hear what they see." - Doris Day

The forum would be a much better place if everyone were less convinced of how right they were.

Link to comment

I checked the 2L MQA samples for which rendering (aka upsampling) filter they request:

2L-038_01_stereo_DXD_FLAC.mqa.flac		6
2L-038_MQA2016-352k-24b_01.mqa.flac		5
2L-048_14_stereo_96kHz_FLAC.mqa.flac		4
2L-050_01_stereo_DXD_WAV.mqa.flac		8
2L-053_04_stereo-DXD.mqa.flac			8
2L-056_03_stereo_DXD_mqa.flac			8
2L-056_04_stereo_DXD_mqa.flac			8
2L-064_08_stereo_DXD_WAV.mqa.flac		8
2L-082_stereo_DXD_01.mqa.flac			8
2L-087_06_stereo_DXD_FLAC.mqa.flac		8
2L-092_01_stereo_DXD_FLAC.mqa.flac		8
2L-106_04_stereo_DXD_FLAC.mqa.flac		8
2L-109_05_stereo_DXD_FLAC.mqa.flac		6
2L-110_04_stereo_DXD_FLAC.mqa.flac		6
2L-111_15_stereo_DXD_FLAC.mqa.flac		6
2L-120_01_stereo-44k-24b.mqa.flac		4
2L-125_stereo-352k-24b_04.mqa.flac		4

Filter 8 is by far the most commonly used here with 6 and 4 in distant second and third places. Curiously, the remastered version of 2L-038 uses a different filter (5) than the original version (6). The two samples, 2L-048 and 2L-120, that are not originally 352 kHz both use filter 4, although that may well be a coincidence.

Link to comment
1 minute ago, mansr said:

I have spotted filter 11 in the wild. Stay tuned.

 

Sounds like the comments pages of Audubon Magazine. :)

One never knows, do one? - Fats Waller

The fairest thing we can experience is the mysterious. It is the fundamental emotion which stands at the cradle of true art and true science. - Einstein

Computer, Audirvana -> optical Ethernet to Fitlet3 -> Fibbr Alpha Optical USB -> iFi NEO iDSD DAC -> Apollon Audio 1ET400A Mini (Purifi based) -> Vandersteen 3A Signature.

Link to comment
On 12/7/2017 at 5:39 PM, mansr said:

I've made some software tools to help explore MQA files and devices:

https://code.videolan.org/mansr/mqa

  • mqascan: parse the control bitstream of an MQA file
  • mqbscan: parse the renderer instructions of a decoded MQA file
  • mqbgen: encode renderer instructions in an existing file

If you have a suitable ARM system and a copy of the Bluesound MQA library, wrappers to decode and render MQA files are also built.

 

Have fun.

 

Great job!

Can't get the .so file from the BS firmware working, not recognised as dynamic library even though it is a dynamic lib using 4 others:

$ ldd /usr/lib/libbluos_ssc.so
        not a dynamic executable
$ ./mqadec
./mqadec: error while loading shared libraries: libbluos_ssc.so: cannot open shared object file: No such file or directory

 

Strace:

open("/usr/lib/libbluos_ssc.so", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\10\32\0\0004\0\0\0"..., 512) = 512
lseek(3, 220932, SEEK_SET)              = 220932
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1080) = 1080
lseek(3, 220648, SEEK_SET)              = 220648
read(3, "A4\0\0\0aeabi\0\1*\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\3\f"..., 53) = 53
close(3)                                = 0
stat64("/usr/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
writev(2, [{"./mqadec", 8}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libbluos_ssc.so", 15}, {": ", 2}, {"cannot open shared object file", 30}, {": ", 2}, {"No such file or directory", 25}, {"\n", 1}], 10./mqadec: error while loading shared libraries: libbluos_ssc.so: cannot open shared object file: No such file or directory
) = 123
exit_group(127)                         = ?
+++ exited with 127 +++
$ uname -m
armv7l
$ ldd ./mqadec
        linux-vdso.so.1 (0x7eff7000)
        /usr/lib/arm-linux-gnueabihf/libarmmem.so (0x76fae000)
        libsndfile.so.1 => /usr/lib/arm-linux-gnueabihf/libsndfile.so.1 (0x76f3c000)
        libbluos_ssc.so => not found
        libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x76dfb000)
        libFLAC.so.8 => /usr/lib/arm-linux-gnueabihf/libFLAC.so.8 (0x76dbf000)
        libvorbisenc.so.2 => /usr/lib/arm-linux-gnueabihf/libvorbisenc.so.2 (0x76d2d000)
        libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0x76cb1000)
        /lib/ld-linux-armhf.so.3 (0x54b0a000)
        libogg.so.0 => /usr/lib/arm-linux-gnueabihf/libogg.so.0 (0x76ca3000)
        libvorbis.so.0 => /usr/lib/arm-linux-gnueabihf/libvorbis.so.0 (0x76c6b000)

 

readelf -a /usr/lib/libbluos_ssc.so

Dynamic section at offset 0x35a60 contains 28 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libasound.so.2]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.so.6]
 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]


 

What ARM hardware are you building and/or testing on?

Link to comment
6 hours ago, mansr said:

There might be some incompatibility with your system. What does "readelf -A" say for libbluos_ssc.so and /lib/libc.so?


Libc is in several places on raspberry, but it is
 

pi@mqb:~ $ ldd /bin/ls
...
        libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x76df1000)

 

LIBC:

pi@mqb:~ $ readelf -A /lib/arm-linux-gnueabihf/libc.so.6
Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "6"
  Tag_CPU_arch: v6
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-1
  Tag_FP_arch: VFPv2
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_rounding: Needed
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_enum_size: int
  Tag_ABI_HardFP_use: SP and DP
  Tag_ABI_VFP_args: VFP registers
  Tag_CPU_unaligned_access: v6

 

BLEUSOUND:

 

pi@mqb:~ $ readelf -A /usr/lib/libbluos_ssc.so
Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "7-A"
  Tag_CPU_arch: v7
  Tag_CPU_arch_profile: Application
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-2
  Tag_FP_arch: VFPv3
  Tag_Advanced_SIMD_arch: NEONv1
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_align_preserved: 8-byte, except leaf SP
  Tag_ABI_enum_size: int
  Tag_ABI_HardFP_use: SP and DP
  Tag_ABI_optimization_goals: Aggressive Speed
  Tag_DIV_use: Not allowed

 

Now looking at the firmware of BLEUSOUND, it seems their LIBC is also cpu v7:

# readelf -A libc.so.6
Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "7-A"
  Tag_CPU_arch: v7
  Tag_CPU_arch_profile: Application
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-2
  Tag_FP_arch: VFPv3
  Tag_Advanced_SIMD_arch: NEONv1
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_align_preserved: 8-byte, except leaf SP
  Tag_ABI_enum_size: int
  Tag_ABI_HardFP_use: SP and DP
  Tag_DIV_use: Not allowed

Technically the raspberry 2 and 3 can do chroot into an untarred bluesound rootfs, and run v7 code.

So all we need to do is find a raspberry pi 2 or 3 "specific" distro which has a v7 glibc.
I believe this distro is still v6 to make it compatible with the older raspberrry 1.

Link to comment

To those wishing to use my mqadec and mqarender tools with the Bluesound library, note that there are (at least) two versions of this library with incompatible interfaces. If it doesn't work properly, you likely have the older variant. For copyright reasons, I can unfortunately not redistribute the file.

Link to comment

To get some idea of the filter and sample rate distribution, I grabbed some samples from the Tidal Masters Essentials and New Arrivals playlists. The table below shows the number of tracks with each combination of filter and sample rate, totals on the right and bottom.

  |    44.1      48    88.1      96     192   352.8|
--+------------------------------------------------+----
 4|      36      14       4      35                |  89
 6|                                               1|   1
 8|                                      19        |  19
11|                                       2        |   2
--+------------------------------------------------+----
  |      36      14       4      35      21       1| 111

A few observations:

  • Nearly half the tracks (50 of 111) have an original sample rate of 44.1 or 48 kHz.
  • All tracks with an original rate of 96 kHz or less use filter 4.
  • In tracks with an original rate above 96 kHz filter 8 is the most common.
  • Filters 6 and 11 make rare appearances.

We have previously seen filter 6 in a few of the 2L samples. Here it is used in a track from the INTERACTIONS album, also a 2L recording. Filter 11 is found on The Doors and New York by Lou Reed.

 

Looking at the Lou Reed album, we find this distribution:

  |     192|
--+--------+----
 8|       5|   5
 9|       3|   3
11|       6|   6
--+--------+----
  |      14|  14

In addition to filter 11, we also find filter 9, another rarity.

Link to comment
1 hour ago, mansr said:

To get some idea of the filter and sample rate distribution, I grabbed some samples from the Tidal Masters Essentials and New Arrivals playlists. The table below shows the number of tracks with each combination of filter and sample rate, totals on the right and bottom.


  |    44.1      48    88.1      96     192   352.8|
--+------------------------------------------------+----
 4|      36      14       4      35                |  89
 6|                                               1|   1
 8|                                      19        |  19
11|                                       2        |   2
--+------------------------------------------------+----
  |      36      14       4      35      21       1| 111

A few observations:

  • Nearly half the tracks (50 of 111) have an original sample rate of 44.1 or 48 kHz.
  • All tracks with an original rate of 96 kHz or less use filter 4.
  • In tracks with an original rate above 96 kHz filter 8 is the most common.
  • Filters 6 and 11 make rare appearances.

We have previously seen filter 6 in a few of the 2L samples. Here it is used in a track from the INTERACTIONS album, also a 2L recording. Filter 11 is found on The Doors and New York by Lou Reed.

 

Looking at the Lou Reed album, we find this distribution:


  |     192|
--+--------+----
 8|       5|   5
 9|       3|   3
11|       6|   6
--+--------+----
  |      14|  14

In addition to filter 11, we also find filter 9, another rarity.

Hi,

Thanks for this.

So, if people like the 44.1kHz or 48kHz original samples in MQA format, then they subjectively like ultrasonic noise ?

For the Lou Reed album, are we then saying that the 5 track, 3 track, and 6 track groups, each had a different mastering and temporal smear, and as such those groups have a different filter ?

How did the record company know this to select the right filter to deblur ?.

Or, are we being played - each filter is meant to make the tracks sound "nice" so subjectively we think MQA is great ?

Regards,

Shadders.

Link to comment
46 minutes ago, Shadders said:

Hi,

Thanks for this.

So, if people like the 44.1kHz or 48kHz original samples in MQA format, then they subjectively like ultrasonic noise ?

For the Lou Reed album, are we then saying that the 5 track, 3 track, and 6 track groups, each had a different mastering and temporal smear, and as such those groups have a different filter ?

How did the record company know this to select the right filter to deblur ?.

Or, are we being played - each filter is meant to make the tracks sound "nice" so subjectively we think MQA is great ?

Regards,

Shadders.

 

Remember that MQA is a process and that there are three potential places a file may have filters applied:

 1) The post mastering, remove "ADC blur" stage

 2) The SRC stage (i.e. converting a 192kHz MQA file into a 96Khz core)

 3) The DAC stage

 

I believe mansr is describing the filter which is applied by the MQA DAC. The majority of the deblurring already happened at stage 1 (and optionally 2).

 

My own guess is that the selection of the filter may depend on the content itself (i.e. what type of music) as well as any technical criteria (original sample rate etc). Probably selected by ear ("this ones sounds the best"). But just my guess.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...