Speed up sample rate - Audio Output over HDMI

I have a strange Problem and I dont know the source, so I have to be vague at first.
Setup:

Desktop PC running Manjaro 6.1.85-1
Hyprland DE
Pavucontrol for Audio Management
Readon RX 580 GPU
Onkyo TX-NR686 AV-Receiver
Samsung UE48JU6550U TV

In my current setup, whenever I have plugged a HDMI Output from my GPU into a HDMI Input of the AV Receiver and its Output into the TV.
Whenever I connect the HDMI to the TV, every played media speeds up resulting in a distorted, speed up and high pitched output on the AV-Receivers Audio-Output.
In Youtube this even effects the speed of the progress bar, that is increased without Youtube itself indicating a change in playback speed. Also Spotify and all other media behave the same.

This Problem does not occur, if I unplug the HDMI to the TV and keep the connection to the AV-Receiver.
It also does not happen, if I log into KDE-Plasma or boot into Windows in the same config. Exclusively in Hyprland, so it seems to be a software issue. I am happy to provide additional logs and info to anybody willing to help.
I will also ask in the Hyprland forum, but since I don’t know the exact problem, I don’t know the source yet.

Welcome to Manjaro forum @p.k

Speeded Up audio playback is most likely due to PulseAudio/PipeWire not resampling audio from audio applications to match the output sink sample-rate for output devices

For example: If HDMI output wants 48000 audio samples per second, but it is getting only 44100 samples per second. 1 second of audio is played in 44100/48000= 0.91875 seconds

I suggest check sample-rates of input and output playback streams in PulseAudio/PipeWire whilst audio is playing

pactl list sink-inputs; pactl list sinks 

Run commands before and after HDMI monitor is connected and compare sample-rates

Thanks for the help. I tried it, but this doesn’t seem to be it. Although it is something sample rate related for sure.

Output:

Sink #1
	State: RUNNING
	Name: alsa_output.pci-0000_2d_00.1.hdmi-stereo-extra3
	Description: Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] Digital Stereo (HDMI 4)
	Driver: module-alsa-card.c
	Sample Specification: s16le 2ch 44100Hz
	Channel Map: front-left,front-right
	Owner Module: 7
	Mute: no
	Volume: front-left: 65536 / 100% / 0,00 dB,   front-right: 65536 / 100% / 0,00 dB
	        balance 0,00
	Base Volume: 65536 / 100% / 0,00 dB
	Monitor Source: alsa_output.pci-0000_2d_00.1.hdmi-stereo-extra3.monitor
	Latency: 0 usec, configured 980000 usec
	Flags: HARDWARE DECIBEL_VOLUME LATENCY SET_FORMATS 
	Properties:
		alsa.resolution_bits = "16"
		device.api = "alsa"
		device.class = "sound"
		alsa.class = "generic"
		alsa.subclass = "generic-mix"
		alsa.name = "AV Receiver"
		alsa.id = "HDMI 3"
		alsa.subdevice = "0"
		alsa.subdevice_name = "subdevice #0"
		alsa.device = "9"
		alsa.card = "1"
		alsa.card_name = "HDA ATI HDMI"
		alsa.long_card_name = "HDA ATI HDMI at 0xfce60000 irq 102"
		alsa.driver_name = "snd_hda_intel"
		device.bus_path = "pci-0000:2d:00.1"
		sysfs.path = "/devices/pci0000:00/0000:00:03.1/0000:2d:00.1/sound/card1"
		device.bus = "pci"
		device.vendor.id = "1002"
		device.vendor.name = "Advanced Micro Devices, Inc. [AMD/ATI]"
		device.product.id = "aaf0"
		device.product.name = "Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590]"
		device.string = "hdmi:1,3"
		device.buffering.buffer_size = "352768"
		device.buffering.fragment_size = "176384"
		device.access_mode = "mmap+timer"
		device.profile.name = "hdmi-stereo-extra3"
		device.profile.description = "Digital Stereo (HDMI 4)"
		device.description = "Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] Digital Stereo (HDMI 4)"
		module-udev-detect.discovered = "1"
		device.icon_name = "audio-card-pci"
	Ports:
		hdmi-output-3: HDMI / DisplayPort 4 (type: HDMI, priority: 5600, available)
	Active Port: hdmi-output-3
	Formats:
		pcm

Input:

Sink Input #0
	Driver: protocol-native.c
	Owner Module: 15
	Client: 3
	Sink: 1
	Sample Specification: float32le 2ch 44100Hz
	Channel Map: front-left,front-right
	Format: pcm, format.sample_format = "\"float32le\""  format.rate = "44100"  format.channels = "2"  format.channel_map = "\"front-left,front-right\""
	Corked: no
	Mute: no
	Volume: front-left: 26211 /  40% / -23,88 dB,   front-right: 26211 /  40% / -23,88 dB
	        balance 0,00
	Buffer Latency: 1003424 usec
	Sink Latency: 1356803 usec
	Resample method: copy
	Properties:
		media.role = "music"
		media.name = "Spotify"
		application.name = "spotify"
		native-protocol.peer = "UNIX socket client"
		native-protocol.version = "33"
		application.process.id = "2355"
		application.process.user = "pk"
		application.process.host = "pk-ms7c37"
		application.process.binary = "spotify"
		application.language = "en_GB.UTF-8"
		window.x11.display = ":1"
		application.process.machine_id = "76a3354c3b4f407a93ff23cf570a52f8"
		application.process.session_id = "2"
		module-stream-restore.id = "sink-input-by-media-role:music"

So actually they do match up, no matter if the HDMI is connected or not.
Also, the offset is audibly higher than a factor of 0.918. It sounds like more like double the speed.

Sample Specification shows different bit-rates for sink-input (float32le) and sink (s16le)
PulseAudio normally uses default-sample-format = s16le
Please post more information about PulseAudio configuration

pulseaudio --dump-conf | grep sampl

Specifications for TX-NR686 Receiver state it has a 384 kHz/32-bit audio DAC
so it may not be very happy with only 44.1 kHz/16-bit audio over HDMI

I suggest reconfigure PulseAudio to output 48 KHz/24-bit audio

tee ~/.config/pulse/daemon.conf <<< 'resample-method = speex-float-3
default-sample-format = s24le
default-sample-rate = 48000
alternate-sample-rate = 48000

and restart pulseadio service to load new configuration

systemctl --user restart pulseaudio

and check output in pact list sinks

Also suggest connect system to receiver with a USB cable, check if USB audio device shows any audio controls in alsamixer and test audio playback via USB instead of HDMI

Thanks a lot for the long answer. Sadly I couldn’t make it work yet.

Output of config dump after adjusting the sample-format and rate:

resample-method = speex-float-3
avoid-resampling = no
default-sample-format = s24le
default-sample-rate = 48000
alternate-sample-rate = 48000
default-sample-channels = 2

default sample rate was 44100 indeed, but there is no difference with 48000.

I am not aware of any option to connect to the device via USB.

Specifications for the receiver shows many different audio inputs

Onkyo | TX-NR686

Connectivity
Analog Audio IN 8
Phono Input
Digital Audio IN (OPT/COAX) 2 / 1
Front Panel HDMI
Front-Panel A/V 1 (Analog)
USB Input ✓ (Rear)
HDMI I/O 7 / 2 (Main/Sub)

So there are 4 simple ways to send audio from the system to the receiver
(not including network or Bluetooth connections)

  1. GPU audio device over HDMI
  2. On-board audio device digital S/PDiF output (if suppported)
  3. On-board audio device analog output
  4. USB output direct to DAC in the receiver

Options 1 & 2 have no control over Digital to Analog Conversion process in the receiver
Option 3 is most likely to work without sample-rate issues
and the on-board audio device can be configured for high quality audio output
but not likely sound as good as using the audio receiver direct via USB

Ok
The Receiver is standing facing forward to a wall and is hard to move in the current setup. I had never noticed the USB Port back there, but you are absolutely right. I will have to find a suitable cable and move a lot of stuff, but I’ll try your suggestion above and report the results as soon as I get to it.

Connecting via USB did not resolve the issue, at least without a lot of potential further stuff to make that work. However just not using the HDMI audio and using the onboard Audio Device Analog Output instead resolves the issue as it does not suffer from the sampling problem.
It is not the nicest fix, but it works for now, so I would call this issue solved.
Thanks a lot for the Input @nikgnomic ^-^

This topic was automatically closed 36 hours after the last reply. New replies are no longer allowed.