Am 2015-08-02 03:11, schrieb Alexander E. Patrakov: > 02.08.2015 01:17, Rene Bartsch wrote: >> Hi, >> >> with >> >> load-module module-pipe-sink format=s32le rate=96000 channels=8 >> channel_map=front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right >> sink_name=brutefir.FCA610 file=/tmp/brutefir.FCA610 >> sink_properties='device.description="BruteFIR Behringer FCA610"' >> >> a virtual sink can be created which pipes audio streams to a FIFO. The >> drawback is that an external script has to start external processing >> of >> the audio stream. >> >> Is there any way to call a shell command from Pulseaudio and route a >> virtual sink to STDIN of that shell-command? > > No. But as this question is really about brutefir, not any arbitrary > program, here is an alternative way to start it. The drawback is that > it will not work after logging out and logging in again. > > Install JACK. > > In /etc/environment, put one line: > > JACK_START_SERVER=1 > > In /home/user/.jackdrc, put one line: > > /home/user/.jack_session.sh > > In /home/user/.jack_session.sh, put this script, make it executable: > > #!/bin/sh > jackd -r -d alsa -d hw:PCUSB -s -r 44100 -p 256 & > ( sleep 4 ; brutefir ) & > > In /home/user/brutefir_config, put (in this example, a separate filter > is applied to each channel for room-correction purposes): > > sampling_rate: 44100; > #show_progress: false; > filter_length: 1024,64; > convolver_config: "/home/user/.brutefir_wisdom"; > > coeff "left" { > filename: "/home/user/.filter-left.pcm"; > format: "FLOAT_LE"; > }; > > coeff "right" { > filename: "/home/user/.filter-right.pcm"; > format: "FLOAT_LE"; > }; > > input "i_left", "i_right" { > device: "jack" { ports: "pulseaudio:front-left", > "pulseaudio:front-right"; }; > channels: 2; > sample: "AUTO"; > }; > > output "o_left", "o_right" { > device: "jack" { ports: "alsa_pcm:playback_1", > "alsa_pcm:playback_2"; }; > channels: 2; > sample: "AUTO"; > }; > > filter "f_left" { > inputs: "i_left"/9; > outputs: "o_left"; > process: 0; > coeff: "left"; > }; > > filter "f_right" { > inputs: "i_right"/9; > outputs: "o_right"; > process: 0; > coeff: "right"; > }; > > Finally, copy /etc/pulse/default.pa to > /home/user/.config/pulse/default.pa, and add there: > > load-module module-jack-sink connect=no client_name=pulseaudio > > Also, let me guess: are you trying to emulate virtual 7.1 sound on > headphones? Then, if your filter is shorter than 64 samples, then > there is no need to mess with brutefir at all. Just make a > multichannel wav file with the contributions of each input channel to > the left output, and provide it to module-virtual-surround-sink. The > limitation to 64 samples can be easily patched out from > module-virtual-surround-sink. > > And finally: this is the third request to convolve PulseAudio output > with something arbitrary. Someone has to sit down and write a native > replacement for brutefir. Unfortunately, for me, this is not really > possible, because of the dayjob which keeps me busy 200% of time. As a first step I suggest a module "module-pipe-shell" derived from "module-pipe-{source|sink}" which pipes an audio stream through a shell-command via STDIN/STDOUT. That approach would allow to easily add any external filter to Pulseaudio without huge overhead/latency. The module should be configurable in a bidirectional mode (STDIN+STDOUT) to route an audio stream through a shell-command (BruteFIR supports STDIN and STDOUT) or an uni-directional mode to record audio from a shell-command or playback to a shell-command via pipe. I tried to use "pacat" for that purpose, but it doesn't seem to be capable to create a virtual sink. The next step would be to copy the convolver-code of BruteFIR to the Pulseaudio-Github-repository and interface the code as a module. -- Best regards, Renne