evilphish/sennheiser-gsx-1000

Hi-fi audio 2.0HD

EnriqueWood opened this issue · 7 comments

When you output high resolution audio in 24bit 96khz in stereo mode, the Gsx1000 recognizes it and turns the HD led on at the right side of the 2.0, which I get on Windows when I configure the device to 24bit 96khz AND play some hi res flac file (if I just plan a regular 320kps mp3 the HD led won't turn on).

In Linux the HD led won't turn on, which makes me think it needs proper configuration to be able to output 24bit audio.

I haven't found any solutions to this yet and what I think happens is that it downgrades the quality to 16bit.

I have been trying to do this for the last two hours, It seems interesting that @EnriqueWood posted about the same time. I think that the problem lies on how ALSA starts the DAC.

XX@XXX:~$ cat /proc/asound/card2/pcm1p/sub0/hw_params 
access: MMAP_INTERLEAVED
format: S16_LE  
subformat: STD
channels: 8
rate: 44100 (44100/1)
period_size: 32768
buffer_size: 65536

I was able to find this GitHub and being specific, the script alsa_capabilites.

https://github.com/ronalde/mpd-configure

When I ran the script I got this:

X) USB Audio Class Digital alsa audio output interface `hw:2,1'
 - device name       = GSX1000                                                     
 - interface name    = USB Audio                                                   
 - usb audio class   = 1 - isochronous adaptive                                    
 - character device  = /dev/snd/pcmC2D1p                                           
 - encoding formats  = S16_LE, S24_3LE                                             
 - monitor file      = /proc/asound/card2/pcm1p/sub0/hw_params                     
 - stream file       = /proc/asound/card2/stream1                                  

But for the life of me, I have not been able to find how to enable S24_3LE . I have my suspicions is that we have a profile with two channels with that codec, the DAC will show 2.0 HD option

Any help on this would be greatly appreciated.

So, it seems that the AltSet used in 3 when the 2 is the HD one. I will continue my research tomorrow to see how this can be changed. Again, - being completely transparent - , I have zero experience with ALSA / Pulseaudio, so there will be a lot of google and try, crash and error :P

If you have any experience with this , any help would be appreciated.

cat /proc/asound/card2/stream1
Sennheiser GSX 1000 Main Audio at usb-0000:00:14.0-7, full speed : USB Audio #1

Playback:
  Status: Running
    Interface = 4
    Altset = 3
    Packet Size = 768
    Momentary freq = 44100 Hz (0x2c.199a)
  Interface 4
    Altset 1
    Format: S16_LE
    Channels: 2
    Endpoint: 2 OUT (ADAPTIVE)
    Rates: 44100, 48000
  Interface 4
    Altset 2
    Format: S24_3LE
    Channels: 2
    Endpoint: 2 OUT (ADAPTIVE)
    Rates: 44100, 48000, 96000
  Interface 4
    Altset 3
    Format: S16_LE
    Channels: 8
    Endpoint: 2 OUT (ADAPTIVE)
    Rates: 44100, 48000

I found a workaround to get hi res audio to work on this device.

I wouldn't recommend it though, because it is not possible to easily change between 7.1 surround and 2.0HD as you would have to modify the file in the step 2 back and forth.

The steps are the following:

  1. Create a stereo profile:

Edit /usr/share/pulseaudio/alsa-mixer/profile-sets/sennheiser-gsx-1000.conf and add the following:

[Mapping stereo-output]
description = 2.0 HD
device-strings = hw:CARD=GSX1000,DEV=1
#device-strings = hw:%f,1
channel-map = stereo
priority = 3

# 2.0 HD profile
[Profile output:stereo-output+output:analog-output-chat+input:analog-input]
description = 2.0 HD
output-mappings = stereo-output analog-output-chat
input-mappings = analog-input
priority = 88
skip-probe = yes

  1. Set global pulseaudio values to 24bit 96k:

Edit /etc/pulse/daemon.conf and add/replace this variables (to go back to 7.1, it's necessary to go back to the original values in this file):

default-sample-format = s24le
default-sample-rate = 96000

After that, reboot pulseaudio using pulseaudio -k and enjoy some hi res flac file

Now, you can see that it actually is using the Altset 2 instead of Altset 3

➜  cat /proc/asound/GSX1000/stream1
Sennheiser GSX 1000 Main Audio at usb-0000:00:14.0-2, full speed : USB Audio #1

Playback:
  Status: Running
    Interface = 4
    Altset = 2
    Packet Size = 576
    Momentary freq = 96000 Hz (0x60.0000)
  Interface 4
    Altset 1
    Format: S16_LE
    Channels: 2
    Endpoint: 2 OUT (ADAPTIVE)
    Rates: 44100, 48000
    Bits: 16
  Interface 4
    Altset 2
    Format: S24_3LE
    Channels: 2
    Endpoint: 2 OUT (ADAPTIVE)
    Rates: 44100, 48000, 96000
    Bits: 24
  Interface 4
    Altset 3
    Format: S16_LE
    Channels: 8
    Endpoint: 2 OUT (ADAPTIVE)
    Rates: 44100, 48000
    Bits: 16

I would like to say that this is not a definitive solution as it implies making global changes, but it serves as a workaround in the meantime.

Didn't know our device was capable of 24-bit streams. I'm mostly listening to spotify, so my question is that if Spotify is capable of outputting 24bit streams.

What I have understood is that I loose the virtual surround if I enable 24 bit, right?

What I have understood is that I loose the virtual surround if I enable 24 bit, right?

Yep, that's right. Anyways you would have to play your own HiFi flac (or any other hires format) or use some HiFi streaming service like Tidal or Deezer to get the 24 bit music working

@EnriqueWood can this be redone using PipeWire? it seems easier to switch between on it