diff options
| author | Robert Günzler <r@gnzler.io> | 2022-11-18 18:07:38 +0100 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2022-11-18 18:38:21 +0100 |
| commit | f005fbf41646437964458d4c2028e6fdc04b59a1 (patch) | |
| tree | 2db56c1d202137278c5642ed418123b882d35dc5 /bin/pwloop | |
| parent | 5e6e8da510836bbb0c7ac1602d51a394ba02ab2b (diff) | |
bin: add a few scripts
Diffstat (limited to 'bin/pwloop')
| -rwxr-xr-x | bin/pwloop | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/bin/pwloop b/bin/pwloop new file mode 100755 index 0000000..866b9e9 --- /dev/null +++ b/bin/pwloop @@ -0,0 +1,43 @@ +#!/bin/sh + +if [ "$1" = "-h" ]; then + echo "usage: pwloop SOURCE TARGET [VOLUME]" >&2 + exit 1 +fi + +source_name=$1 +target_name=$2 + +volume=0.2 +[ -n "$3" ] && volume=$3 + +# spawn pwloopback +pw-loopback \ + -m '[[FL FR]]' \ + -g 'pwloop' \ + --capture-props='media.class=Audio/Sink/Virtual audio.position=[FL FR] node.description="pwloop sink" node.name=pwloop' \ + --playback-props='media.class=Audio/Source/Virtual audio.position=[FL FR] node.description="pwloop source" node.name=pwloop' \ + & + +# save pid for later +pwloop_pid=$! +trap '{ kill $pwloop_pid; }' EXIT + +set -x + +# set monitor volume prop +pw-cli set-param "$pwloop_oid" 2 "{ \"monitorVolumes\": [$volume, $volume] }" + +# connect ports to pwloop +pw-link "$(pw-link -o | grep "$source_name" | grep 'FL$')" pwloop:input_FL +pw-link "$(pw-link -o | grep "$source_name" | grep 'FR$')" pwloop:input_FR + +# connect ports from pwloop +pw-link pwloop:capture_FL "$(pw-link -i | grep "$target_name" | grep -v monitor | grep 'FL$')" +pw-link pwloop:capture_FR "$(pw-link -i | grep "$target_name" | grep -v monitor | grep 'FR$')" + +# get object.id +pwloop_oid=$(pw-dump | jq -r --arg name "pwloop" --arg s "Audio/Sink/Virtual" \ + '.[]|select(.type=="PipeWire:Interface:Node" and .info.props["node.name"]==$name and .info.props["media.class"]==$s)|.info.props["object.id"]') + +wait |