module-combine-sink halts pulseaudio
I'm the author of pulseaudio crossover rack. It uses ladspa plugins to setup speaker crossovers.
To split the signal to several branches (f.ex. to woofer/tweeter) i use the combine-sink module.
The version currently shipped in linux mint 20 crashes after the module-combine-sink is loaded. This was reproduced with a version freshly compiled from latest git just a few minutes ago.
Here's the most minimal example that I could come up with:
pactl load-module module-remap-sink sink_name=PaXoverRack.Output2 sink_properties=device.description=PaXoverRack.Output2 remix=no master=alsa_output.usb-ASUSTeK_ASUS_XONAR_U5-00.analog-surround-51 channels=2 master_channel_map=rear-left,rear-right channel_map=front-left,front-right
pactl load-module module-remap-sink sink_name=PaXoverRack.Output sink_properties=device.description=PaXoverRack.Output remix=no master=alsa_output.usb-ASUSTeK_ASUS_XONAR_U5-00.analog-surround-51 channels=2 master_channel_map=front-left,front-right channel_map=front-left,front-right
pactl load-module module-combine-sink sink_name=PaXoverRack.Input sink_properties=device.description=PaXoverRack.Input channels=2 channel_map=front-left,front-right slaves=PaXoverRack.Output2,PaXoverRack.Output
Sometimes the load succeeds and the halt occurrs at next playback time. By "halt" I mean that calling pactl or pacmd just sit there waiting, a browser playing youtube f.ex. will show the loading ring and stop playing video.
here's a log excerpt from a case where loading the modules was fine and i started youtube in a browser:
I: [pulseaudio] client.c: Created 5 "Native client (UNIX socket client)"
D: [pulseaudio] protocol-native.c: Protocol version: remote 34, local 34
I: [pulseaudio] protocol-native.c: Got credentials: uid=999 gid=999 success=1
D: [pulseaudio] protocol-native.c: SHM possible: yes
D: [pulseaudio] protocol-native.c: Negotiated SHM: yes
D: [pulseaudio] protocol-native.c: Memfd possible: yes
D: [pulseaudio] protocol-native.c: Negotiated SHM type: shared memfd
D: [pulseaudio] memblock.c: Using shared memfd memory pool with 1024 slots of size 64.0 KiB each, total size is 64.0 MiB, maximum usable slot size is 65472
D: [pulseaudio] srbchannel.c: SHM block is 65472 bytes, ringbuffer capacity is 2 * 32712 bytes
D: [pulseaudio] protocol-native.c: Enabling srbchannel...
D: [pulseaudio] module-augment-properties.c: Looking for .desktop file for firefox
D: [pulseaudio] module-augment-properties.c: Found /usr/share/applications/firefox.desktop.
D: [pulseaudio] conf-parser.c: Parsing configuration file '/usr/share/applications/firefox.desktop'
D: [pulseaudio] protocol-native.c: Client enabled srbchannel.
D: [pulseaudio] module-intended-roles.c: Not setting device for stream AudioStream, because it lacks role.
D: [pulseaudio] sink-input.c: Negotiated format: pcm, format.sample_format = "\"float32le\"" format.rate = "48000" format.channels = "2" format.channel_map = "\"front-left,front-right\""
I: [pulseaudio] sink-input.c: Trying to change sample spec
I: [pulseaudio] module-stream-restore.c: Restoring volume for sink input sink-input-by-application-name:Firefox.
D: [pulseaudio] module-suspend-on-idle.c: Sink PaXoverRack.Input becomes busy, resuming.
D: [pulseaudio] module-stream-restore.c: Not restoring device for stream sink-input-by-media-role:filter, because already set to 'PaXoverRack.Output2'.
D: [pulseaudio] module-intended-roles.c: Not setting device for stream Simultaneous output on PaXoverRack.Output2, because already set.
D: [pulseaudio] sink-input.c: Negotiated format: pcm, format.sample_format = "\"s16le\"" format.rate = "44100" format.channels = "2" format.channel_map = "\"front-left,front-right\""
D: [pulseaudio] module-suspend-on-idle.c: Sink PaXoverRack.Output2 becomes busy, resuming.
D: [combine] sink-input.c: Requesting rewind due to uncorking
D: [pulseaudio] module-suspend-on-idle.c: Sink PaXoverRack.Input becomes busy, resuming.
D: [pulseaudio] module-stream-restore.c: Not restoring device for stream sink-input-by-media-role:filter, because already set to 'PaXoverRack.Output2'.
D: [pulseaudio] module-intended-roles.c: Not setting device for stream Simultaneous output on PaXoverRack.Output2, because already set.
D: [pulseaudio] sink-input.c: Negotiated format: pcm, format.sample_format = "\"s16le\"" format.rate = "44100" format.channels = "2" format.channel_map = "\"front-left,front-right\""
D: [pulseaudio] module-suspend-on-idle.c: Sink PaXoverRack.Output2 becomes busy, resuming.
D: [pulseaudio] sink.c: PaXoverRack.Output2: suspend_cause: IDLE -> (none)
D: [pulseaudio] sink.c: PaXoverRack.Output2: state: SUSPENDED -> IDLE
D: [pulseaudio] module-suspend-on-idle.c: Sink PaXoverRack.Output2 becomes idle, timeout in 5 seconds.
D: [pulseaudio] source.c: PaXoverRack.Output2.monitor: suspend_cause: IDLE -> (none)
D: [pulseaudio] source.c: PaXoverRack.Output2.monitor: state: SUSPENDED -> IDLE
D: [pulseaudio] module-suspend-on-idle.c: Sink PaXoverRack.Output2 becomes idle, timeout in 5 seconds.
D: [pulseaudio] resampler.c: Resampler:
D: [pulseaudio] resampler.c: rate 44100 -> 44100 (method trivial)
D: [pulseaudio] resampler.c: format s16le -> s16le (intermediate s16le)
D: [pulseaudio] resampler.c: channels 2 -> 2 (resampling 2)
D: [pulseaudio] memblockq.c: memblockq requested: maxlength=33554432, tlength=0, base=4, prebuf=0, minreq=1 maxrewind=0
D: [pulseaudio] memblockq.c: memblockq sanitized: maxlength=33554432, tlength=33554432, base=4, prebuf=0, minreq=4 maxrewind=0
I: [pulseaudio] sink-input.c: Created input 5 "Simultaneous output on PaXoverRack.Output2" on PaXoverRack.Output2 with sample spec s16le 2ch 44100Hz and channel map front-left,front-right
I: [pulseaudio] sink-input.c: media.name = "Simultaneous output on PaXoverRack.Output2"
I: [pulseaudio] sink-input.c: media.role = "filter"
I: [pulseaudio] sink-input.c: module-stream-restore.id = "sink-input-by-media-role:filter"
D: [combine] module-combine-sink.c: attach max request 35280
D: [combine] module-combine-sink.c: attach latency range 500 200000