Project

General

Profile

ALSA error with direct hw

Added by Cristiano De Alti almost 3 years ago

I'm trying to play 24/96 tracks with Audacious 3.7.2 compiled from sources on Linux Mint Nadia.
I want to use direct hw access without software conversions.

Deadbeef can play these tracks without problems both to my integrated audio and an external USB DAC (direct hw access without software conversions).

Audacious gives the following error:

ERROR util.cc:160 [audgui_simple_message]: ALSA error: snd_pcm_hw_params_set_format failed: Invalid argument.

Here is the output of aplay -L

default
    Playback/recording through the PulseAudio sound server
sysdefault:CARD=PCH
    HDA Intel PCH, ALC269VB Analog
    Default Audio Device
front:CARD=PCH,DEV=0
    HDA Intel PCH, ALC269VB Analog
    Front speakers
surround40:CARD=PCH,DEV=0
    HDA Intel PCH, ALC269VB Analog
    4.0 Surround output to Front and Rear speakers
surround41:CARD=PCH,DEV=0
    HDA Intel PCH, ALC269VB Analog
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=PCH,DEV=0
    HDA Intel PCH, ALC269VB Analog
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=PCH,DEV=0
    HDA Intel PCH, ALC269VB Analog
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=PCH,DEV=0
    HDA Intel PCH, ALC269VB Analog
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
hdmi:CARD=PCH,DEV=0
    HDA Intel PCH, HDMI 0
    HDMI Audio Output
dmix:CARD=PCH,DEV=0
    HDA Intel PCH, ALC269VB Analog
    Direct sample mixing device
dmix:CARD=PCH,DEV=3
    HDA Intel PCH, HDMI 0
    Direct sample mixing device
dsnoop:CARD=PCH,DEV=0
    HDA Intel PCH, ALC269VB Analog
    Direct sample snooping device
dsnoop:CARD=PCH,DEV=3
    HDA Intel PCH, HDMI 0
    Direct sample snooping device
hw:CARD=PCH,DEV=0
    HDA Intel PCH, ALC269VB Analog
    Direct hardware device without any conversions
hw:CARD=PCH,DEV=3
    HDA Intel PCH, HDMI 0
    Direct hardware device without any conversions
plughw:CARD=PCH,DEV=0
    HDA Intel PCH, ALC269VB Analog
    Hardware device with all software conversions
plughw:CARD=PCH,DEV=3
    HDA Intel PCH, HDMI 0
    Hardware device with all software conversions
sysdefault:CARD=Audio
    NAD USB Audio, USB Audio
    Default Audio Device
front:CARD=Audio,DEV=0
    NAD USB Audio, USB Audio
    Front speakers
surround40:CARD=Audio,DEV=0
    NAD USB Audio, USB Audio
    4.0 Surround output to Front and Rear speakers
surround41:CARD=Audio,DEV=0
    NAD USB Audio, USB Audio
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=Audio,DEV=0
    NAD USB Audio, USB Audio
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=Audio,DEV=0
    NAD USB Audio, USB Audio
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=Audio,DEV=0
    NAD USB Audio, USB Audio
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=Audio,DEV=0
    NAD USB Audio, USB Audio
    IEC958 (S/PDIF) Digital Audio Output
dmix:CARD=Audio,DEV=0
    NAD USB Audio, USB Audio
    Direct sample mixing device
dsnoop:CARD=Audio,DEV=0
    NAD USB Audio, USB Audio
    Direct sample snooping device
hw:CARD=Audio,DEV=0
    NAD USB Audio, USB Audio
    Direct hardware device without any conversions
plughw:CARD=Audio,DEV=0
    NAD USB Audio, USB Audio
    Hardware device with all software conversions

I want to use hw:CARD=Audio,DEV=0 but I get the above error no matter the settings in File | Settings | Audio.
My settings are:

Ouput plugin: Alsa Output
PCM Device: hw:CARD=Audio,DEV=0
Mixer device: hw:1
Mixer element: PCM

About the mixer settings, I've tried other combinations resulting in the same errors.
Note: I use the same configuration in Deadbeef and it works. However Deadbeef does not have any mixer options

The problem is not limited to the USB device. I have the same error using my integrated audio hw:CARD=PCH,DEV=0.
Note: I can use the integrated audio in Deadbeef

Following are some info on my USB DAC when playing one of the above tracks with Deadbeef:

$ cat /proc/asound/card1/stream0 
NAD Electronics NAD USB Audio at usb-0000:05:00.0-1, full speed : USB Audio

Playback:
  Status: Running
    Interface = 1
    Altset = 1
    Packet Size = 588
    Momentary freq = 96000 Hz (0x60.0000)
    Feedback Format = 10.14
    Packet Size = 0
    Momentary freq = 96000 Hz (0x60.0000)
  Interface 1
    Altset 1
    Format: S24_3LE
    Channels: 2
    Endpoint: 1 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000

$ cat /proc/asound/card1/pcm0p/info 
card: 1
device: 0
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0

$ cat /proc/asound/card1/pcm0p/sub0/hw_params 
access: RW_INTERLEAVED
format: S24_3LE
subformat: STD
channels: 2
rate: 96000 (96000/1)
period_size: 1024
buffer_size: 8192

$ cat /proc/asound/card1/pcm0p/sub0/info
card: 1
device: 0
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0

$ cat /proc/asound/card1/pcm0p/sub0/status 
state: RUNNING
owner_pid   : 17115
trigger_time: 849782.531341515
tstamp      : 850141.280350597
delay       : 7733
avail       : 1036
avail_max   : 2080
-----
hw_ptr      : 34442252
appl_ptr    : 34449408

$ cat /proc/asound/card1/pcm0p/sub0/sw_params 
tstamp_mode: NONE
period_step: 1
avail_min: 1024
start_threshold: 7168
stop_threshold: 8192
silence_threshold: 0
silence_size: 0
boundary: 4611686018427387904

Regards,
Cristiano


Replies (6)

RE: ALSA error with direct hw - Added by John Lindgren almost 3 years ago

It looks like deadbeef is using packed 24-bit audio, whereas Audacious uses unpacked (i.e. aligned to 32-bit word). That's the only difference I can think of. You could try using straight 32-bit instead; some chips support that.

RE: ALSA error with direct hw - Added by Cristiano De Alti almost 3 years ago

Unfortunately changing the bit depth doesn't make any difference.
The problem is not limited only to 24/96. I get the same error also playing 16/44.1.

To summarize:

USB DAC: Cannot play anything to hw:CARD=Audio,DEV=0
Integrated audio: Cannot play 24/96 to hw:CARD=PCH,DEV=0 but I can play 16/44.1

I confirm that playing 24/96 and 16/44.1 works fine with Deadbeef both on hw:CARD=Audio,DEV=0 and hw:CARD=PCH,DEV=0.

Regards,
Cristiano

RE: ALSA error with direct hw - Added by Cristiano De Alti almost 3 years ago

Hello,
Can you please help me understand if the following alternative is still bit perfect (equivalent to the deadbeef one)?

1. 24/96 flac
2. Output plugin: ALSA Output
3. Bit depth: 24
4. PCM Device: plughw:CARD=Audio,DEV=0
NAD USB Audio, USB Audio
Hardware device with all software conversions
5. hw:1 - NAD USB AUdio
6. Mixer element: PCM

The above config results in the following:

$ cat /proc/asound/card1/stream0 
NAD Electronics NAD USB Audio at usb-0000:05:00.0-1, full speed : USB Audio

Playback:
  Status: Running
    Interface = 1
    Altset = 1
    Packet Size = 588
    Momentary freq = 96000 Hz (0x60.0000)
    Feedback Format = 10.14
    Packet Size = 0
    Momentary freq = 96000 Hz (0x60.0000)
  Interface 1
    Altset 1
    Format: S24_3LE
    Channels: 2
    Endpoint: 1 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000

$ cat /proc/asound/card1/pcm0p/sub0/hw_params 
access: MMAP_INTERLEAVED
format: S24_3LE
subformat: STD
channels: 2
rate: 96000 (96000/1)
period_size: 1152
buffer_size: 4800

that looks similar to the deadbeef one of the first post.

Other info: both the system and Audacity volume controls do not affect the output level. Same for the alsamixer volume. This should be good.

Changing the bit depth in Audacity (setting 32 bit for example) does not change the output of the command above.

My guess is that the ALSA plug plugin is ONLY converting the bit format output by Audacity (S32_??) to S24_3LE which is the only supported by the NAD USB DAC,
and that this conversion is lossless

Are there other checks I should do to confirm the above guess?

a. If this is correct I'm fine but it requires some knowledge by the user to figure out if playback is bit-perfect.

a.1. Deadbeef works out of the box with hw:CARD=Audio,DEV=0 and has a reputation of being bit-perfect. I would humbly suggest to "copy" Deadbeef in this area. I'm happy to help testing patches and compile from sources in case you like it.

b. I'm also not sure about the usage of the Bit depth control in Audacious. Can you please advise what it is supposed to do and how it affects bit-perfection?

Thanks for your great work.

Regards,
Cristiano

RE: ALSA error with direct hw - Added by Cristiano De Alti almost 3 years ago

In the post above where I wrote mistakenly Audacity I actually meant Audacious. Sorry.

RE: ALSA error with direct hw - Added by Cristiano De Alti almost 3 years ago

I have a patch that I will submit soon to support the S24_3LE format (the one used by USB DACs).

    (1-6/6)