Search code examples
javaaudioaudio-sourcepipewire

How to create a Virtual Audio Source in Pipewire that receives data from the default Audio sink (speaker/headphones?)


I am creating a program in Java and I need to stream internal audio using a TargetDataLine (audio source). I am trying to use pw-loopback to create a virtual audio source that receives data from speakers but I can't get it to work..

I have looked at: tldr pw-loopback docs for examples.. I cannot access pactl and I would like to implement this using Pipewire only. What commands can I use to create a pipewire audio source that mirrors a default sink?

I have tried the following commands: pw-loopback -m '[FL FR]' --capture-props='media.class=Audio/Source'

and:

pw-loopback -m '[FL FR]' --capture-props='media.class=Audio/Sink' --playback-props=media.class=Audio/Source

I also tried using pw-link but only got failed to link ports: No such file or directory:

pw-loopback -m '[FL FR]' --capture-props='media.class=Audio/Sink' -n cliradio-sink &

pw-loopback -m '[FL FR]' --capture-props='media.class=Audio/Source' -n cliradio-source &

pw-link cliradio-sink:monitor cliradio-source:playback

Any help is greatly appreciated!


Solution

  • This can be accomplished if the flag stream.capture.sink=true is passed into capture-props:

    pw-loopback --capture-props='{ stream.capture.sink=true }' -C alsa_output.pci-0000_00_1f.3.analog-stereo -m '[FL FR]' --playback-props='media.class=Audio/Source audio.position=[FL FR]' -n my-virtual-source