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
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss