Was Pipewire besser macht

… und was man damit sonst noch so machen kann

Lucy

2024-03-31T15:00+02:00

Über mich

Itinerary

Konzepte (Allgemein)

Der Linux Audio Stack

Kernel

Userspace (vor Pipewire)

Sink

Source

Monitor & Loopback

Monitor

Loopback

Clock

Einfaches Beispiel

Komisches PulseAudio Skript

pulse_lowlatency(){
    module_id=$(pactl list modules | grep -C 2 $card | head -n 1 | sed 's/[^0-9]*//g')
    
    device_id=$(pactl list modules | grep $card | awk '{print $2}')
    name=$(pactl list modules | grep $card | awk '{print $3}')
    card_name=$(pactl list modules | grep $card | awk '{print $4}')
    
    pactl unload-module $module_id
    
    new_module=$(
        pactl load-module module-alsa-card $device_id $name $card_name \
            namereg_fail=false \
            tsched=no \
            fixed_latency_range=yes \
            ignore_dB=no \
            deferred_volume=yes \
            use_ucm=yes \
            card_properties="module-udev-detect.discovered=1" \
            fragments=2 \
            fragment_size=4
    )
}

Spiel starten

input(){
    swaymsg "input 1386:782:Wacom_Intuos_S_Pen map_to_output DP-1"
    swaymsg "input 1386:782:Wacom_Intuos_S_Pen map_from_region 0.0x0.0 0.45473688x0.405"
    swaymsg "input * pointer_accel -0.2"
}

osu_launch(){
    sudo cpupower frequency-set -g performance
    cd ~/Games/osu_wine
    export WINEPREFIX="$HOME/Games/osu_wine"
    #export WINEARCH=win32
    export PATH=/opt/wine-osu/bin:$PATH

    export STAGING_AUDIO_DURATION=40000
    #export STAGING_AUDIO_DURATION=6500
    export STAGING_RT_PRIORITY_SERVER=90
    export STAGING_RT_PRIORITY_BASE=90
    wine $HOME/Games/osu_wine/drive_c/osu\!/osu\!.exe $1
}

Ursprungszustand wieder herstellen

osu_kill(){
    export WINEPREFIX="$HOME/Games/osu_wine"
    export PATH=/opt/wine-osu/bin:$PATH
    wineserver -k
}

reset_pulse(){
    pactl unload-module $new_module
    pactl load-module module-alsa-card $device_id $name $card_name \
        namereg_fail=false tsched=yes \
        fixed_latency_range=no ignore_dB=no \
        deferred_volume=yes use_ucm=yes \
        avoid_resampling=yes card_properties="module-udev-detect.discovered=1"
}

reset_input(){
    swaymsg "input 1386:782:Wacom_Intuos_S_Pen map_to_output DP-1"
    swaymsg "input 1386:782:Wacom_Intuos_S_Pen map_from_region 0.0x0.0 1.0x1.0"
    swaymsg "input * pointer_accel 0"
}

Fazit

-> Linux Audio kann man nicht trauen

„Streaming“-Setup v1

Die bessere Lösung

Pipewire:

Konzepte

Quants

Probleme? Puffer vergrößern!

Nodes

Beispiele:

Session Manager

Was können wir jetzt damit Schönes machen?

Carla

Gate

Macht auf, wenn ein bestimmter Pegel für eine bestimmte Zeit erreicht ist.

Kompressor

Parametrischer Equalizer

Limiter

Voice Processing

libpipewire-module-filter-chain

~/.config/pipewire/pipewire.conf.d/mic-processed.conf

context.modules = [
    {   name = libpipewire-module-filter-chain
        args = {
            node.description = "Mic Processed"
            #node.latency = 512/48000
            filter.graph = {
                nodes = [
                    {
                        name = "LSP Compressor Mono"
                        type = lv2
                        plugin = "http://lsp-plug.in/plugins/lv2/compressor_mono"
                        control = {}
                    }
                    {
                        name = "LSP Limiter Mono"
                        type = lv2
                        plugin = "http://lsp-plug.in/plugins/lv2/limiter_mono"
                        control = {}
                    }
                    {
                        name = "LSP Gate Mono"
                        type = lv2
                        plugin = "http://lsp-plug.in/plugins/lv2/gate_mono"
                        control = {}
                    }
                    {
                        name = "LSP Parametric Equalizer x16 Mono"
                        type = lv2
                        plugin = "http://lsp-plug.in/plugins/lv2/para_equalizer_x16_mono"
                        control = {}
                    }
                ]
                links = [
                    { output = "LSP Gate Mono:out" input = "LSP Compressor Mono:in" }
                    { output = "LSP Compressor Mono:out" input = "LSP Parametric Equalizer x16 Mono:in" }
                    { output = "LSP Parametric Equalizer x16 Mono:out" input = "LSP Limiter Mono:in" }
                ]
                inputs = [ "LSP Gate Mono:in" ]
                outputs = [ "LSP Limiter Mono:out" ]
            }
            capture.props = {
                node.name = "input.Mic_processed"
                audio.position = [ FL ]
                stream.dont-remix = true
                node.target = "alsa_input.usb-MOTU_M4_M4AE04FAMD-00.pro-input-0"
                node.passive = true
            }
            playback.props = {
                node.name = "effect_output.Mic_processed"
                media.class = Audio/Source
                audio.position = [ MONO ]
            }
        }
    }

]

Kurzer Ausflug zu den LV2-Plugins

http://lsp-plug.in/plugins/lv2/compressor_mono

    Name:              LSP Compressor Mono
    Class:             Compressor Plugin
    Author:            LSP LV2
    Author Email:      mailto:lsp.plugin@gmail.com
    Author Homepage:   https://lsp-plug.in/
    Has latency:       yes, reported by port 45
    Bundle:            file:///usr/lib/lv2/lsp-plugins.lv2/
    Binary:            file:///usr/lib/lv2/lsp-plugins.lv2/lsp-plugins-lv2.so
    UIs:
        http://lsp-plug.in/ui/lv2/compressor_mono
            Class:  http://lv2plug.in/ns/extensions/ui#X11UI
            Binary: file:///usr/lib/lv2/lsp-plugins.lv2/lsp-plugins-lv2ui.so
            Bundle: file:///usr/lib/lv2/lsp-plugins.lv2/
    Data URIs:         file:///usr/lib/lv2/lsp-plugins.lv2/manifest.ttl
                       file:///usr/lib/lv2/lsp-plugins.lv2/compressor_mono.ttl
    Required Features: http://lv2plug.in/ns/ext/urid#map
    Optional Features: http://harrisonconsoles.com/lv2/inlinedisplay#queue_draw
                       http://lv2plug.in/ns/ext/state#mapPath
                       http://lv2plug.in/ns/ext/options#options
                       http://lv2plug.in/ns/ext/worker#schedule
                       http://lv2plug.in/ns/lv2core#hardRTCapable
    Extension Data:    http://lv2plug.in/ns/ext/worker#interface
                       http://harrisonconsoles.com/lv2/inlinedisplay#interface
                       http://lv2plug.in/ns/ext/state#interface
    Presets: 

    Port 0:
        Type:        http://lv2plug.in/ns/lv2core#AudioPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      in
        Name:        Input
        Group:       http://lsp-plug.in/plugins/lv2/compressor_mono/port_groups#mono_in
        Designation: http://lv2plug.in/ns/ext/port-groups#center

    Port 1:
        Type:        http://lv2plug.in/ns/lv2core#AudioPort
                     http://lv2plug.in/ns/lv2core#OutputPort
        Symbol:      out
        Name:        Output
        Group:       http://lsp-plug.in/plugins/lv2/compressor_mono/port_groups#mono_out
        Designation: http://lv2plug.in/ns/ext/port-groups#center

    Port 2:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      enabled
        Name:        Enabled
        Designation: http://lv2plug.in/ns/lv2core#enabled
        Minimum:     0.000000
        Maximum:     1.000000
        Default:     1.000000
        Properties:  http://lv2plug.in/ns/lv2core#toggled


    Port 3:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      g_in
        Name:        Input gain
        Minimum:     0.000000
        Maximum:     1000.000000
        Default:     1.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#logarithmic
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 4:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      g_out
        Name:        Output gain
        Minimum:     0.000000
        Maximum:     1000.000000
        Default:     1.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#logarithmic
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 5:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      pause
        Name:        Pause graph analysis
        Minimum:     0.000000
        Maximum:     1.000000
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/lv2core#toggled


    Port 6:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      clear
        Name:        Clear graph analysis
        Minimum:     0.000000
        Maximum:     1.000000
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/lv2core#toggled


    Port 7:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Scale Points:
            0 = "Feed-forward"
            1 = "Feed-back"

        Symbol:      sct
        Name:        Sidechain type
        Minimum:     0.000000
        Maximum:     1.000000
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/lv2core#integer
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/lv2core#enumeration


    Port 8:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Scale Points:
            1 = "RMS"
            0 = "Peak"
            2 = "LPF"
            3 = "SMA"

        Symbol:      scm
        Name:        Sidechain mode
        Minimum:     0.000000
        Maximum:     3.000000
        Default:     1.000000
        Properties:  http://lv2plug.in/ns/lv2core#integer
                     http://lv2plug.in/ns/lv2core#enumeration
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 9:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      sla
        Name:        Sidechain lookahead
        Minimum:     0.000000
        Maximum:     20.000000
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 10:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      scl
        Name:        Sidechain listen
        Minimum:     0.000000
        Maximum:     1.000000
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/lv2core#toggled


    Port 11:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      scr
        Name:        Sidechain reactivity
        Minimum:     0.000000
        Maximum:     250.000000
        Default:     10.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/ext/port-props#logarithmic


    Port 12:
        Type:        http://lv2plug.in/ns/lv2core#InputPort
                     http://lv2plug.in/ns/lv2core#ControlPort
        Symbol:      scp
        Name:        Sidechain preamp
        Minimum:     0.000000
        Maximum:     100.000000
        Default:     1.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#logarithmic
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 13:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Scale Points:
            1 = "12 dB/oct"
            2 = "24 dB/oct"
            3 = "36 dB/oct"
            0 = "off"

        Symbol:      shpm
        Name:        High-pass filter mode
        Minimum:     0.000000
        Maximum:     3.000000
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/lv2core#integer
                     http://lv2plug.in/ns/lv2core#enumeration


    Port 14:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      shpf
        Name:        High-pass filter frequency
        Minimum:     10.000000
        Maximum:     20000.000000
        Default:     10.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/ext/port-props#logarithmic


    Port 15:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Scale Points:
            0 = "off"
            1 = "12 dB/oct"
            2 = "24 dB/oct"
            3 = "36 dB/oct"

        Symbol:      slpm
        Name:        Low-pass filter mode
        Minimum:     0.000000
        Maximum:     3.000000
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/lv2core#integer
                     http://lv2plug.in/ns/lv2core#enumeration
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 16:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      slpf
        Name:        Low-pass filter frequency
        Minimum:     10.000000
        Maximum:     20000.000000
        Default:     20000.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/ext/port-props#logarithmic


    Port 17:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Scale Points:
            0 = "Down"
            1 = "Up"
            2 = "Boot"

        Symbol:      cm
        Name:        Compression mode
        Minimum:     0.000000
        Maximum:     2.000000
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/lv2core#integer
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/lv2core#enumeration


    Port 18:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      al
        Name:        Attack threshold
        Minimum:     0.001000
        Maximum:     1.000000
        Default:     0.251190
        Properties:  http://lv2plug.in/ns/ext/port-props#logarithmic
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 19:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      at
        Name:        Attack time
        Minimum:     0.000000
        Maximum:     2000.000000
        Default:     20.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#logarithmic
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 20:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      rrl
        Name:        Release threshold
        Minimum:     0.000000
        Maximum:     1.000000
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/ext/port-props#logarithmic


    Port 21:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      rt
        Name:        Release time
        Minimum:     0.000000
        Maximum:     5000.000000
        Default:     100.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/ext/port-props#logarithmic


    Port 22:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      hold
        Name:        Hold time
        Minimum:     0.000000
        Maximum:     1000.000000
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 23:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      cr
        Name:        Ratio
        Minimum:     1.000000
        Maximum:     100.000000
        Default:     4.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#logarithmic
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 24:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      kn
        Name:        Knee
        Minimum:     0.063100
        Maximum:     1.000000
        Default:     0.501180
        Properties:  http://lv2plug.in/ns/ext/port-props#logarithmic
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 25:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      bth
        Name:        Boost threshold
        Minimum:     0.000001
        Maximum:     0.001000
        Default:     0.000251
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/ext/port-props#logarithmic


    Port 26:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      bsa
        Name:        Boost signal amount
        Minimum:     0.000251
        Maximum:     3981.072998
        Default:     1.995260
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/ext/port-props#logarithmic


    Port 27:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      mk
        Name:        Makeup gain
        Minimum:     0.001000
        Maximum:     1000.000000
        Default:     1.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#logarithmic
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 28:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      cdr
        Name:        Dry gain
        Minimum:     0.000000
        Maximum:     10.000000
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#logarithmic
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 29:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      cwt
        Name:        Wet gain
        Minimum:     0.000000
        Maximum:     10.000000
        Default:     1.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/ext/port-props#logarithmic


    Port 30:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      cdw
        Name:        Dry/Wet balance
        Minimum:     0.000000
        Maximum:     100.000000
        Default:     100.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 31:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#OutputPort
        Symbol:      rl
        Name:        Release level
        Minimum:     0.000000
        Maximum:     20.000000
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/ext/port-props#logarithmic


    Port 32:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      slv
        Name:        Sidechain level visibility
        Minimum:     0.000000
        Maximum:     1.000000
        Default:     1.000000
        Properties:  http://lv2plug.in/ns/lv2core#toggled


    Port 33:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      elv
        Name:        Envelope level visibility
        Minimum:     0.000000
        Maximum:     1.000000
        Default:     1.000000
        Properties:  http://lv2plug.in/ns/lv2core#toggled


    Port 34:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      grv
        Name:        Gain reduction visibility
        Minimum:     0.000000
        Maximum:     1.000000
        Default:     1.000000
        Properties:  http://lv2plug.in/ns/lv2core#toggled


    Port 35:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      ilv
        Name:        Input level visibility
        Minimum:     0.000000
        Maximum:     1.000000
        Default:     1.000000
        Properties:  http://lv2plug.in/ns/lv2core#toggled


    Port 36:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      olv
        Name:        Output level visibility
        Minimum:     0.000000
        Maximum:     1.000000
        Default:     1.000000
        Properties:  http://lv2plug.in/ns/lv2core#toggled


    Port 37:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#OutputPort
        Symbol:      slm
        Name:        Sidechain level meter
        Minimum:     0.000000
        Maximum:     63.095749
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/ext/port-props#logarithmic


    Port 38:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#OutputPort
        Symbol:      clm
        Name:        Curve level meter
        Minimum:     0.000000
        Maximum:     63.095749
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#logarithmic
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 39:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#OutputPort
        Symbol:      elm
        Name:        Envelope level meter
        Minimum:     0.000000
        Maximum:     63.095749
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#logarithmic
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 40:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#OutputPort
        Symbol:      rlm
        Name:        Reduction level meter
        Minimum:     0.000000
        Maximum:     3981.072998
        Default:     1.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/ext/port-props#logarithmic


    Port 41:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#OutputPort
        Symbol:      ilm
        Name:        Input level meter
        Minimum:     0.000000
        Maximum:     63.095749
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#hasStrictBounds
                     http://lv2plug.in/ns/ext/port-props#logarithmic


    Port 42:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#OutputPort
        Symbol:      olm
        Name:        Output level meter
        Minimum:     0.000000
        Maximum:     63.095749
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/ext/port-props#logarithmic
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds


    Port 43:
        Type:        http://lv2plug.in/ns/ext/atom#AtomPort
                     http://lv2plug.in/ns/lv2core#InputPort
        Symbol:      in_ui
        Name:        UI Input
        Designation: http://lv2plug.in/ns/lv2core#control
        Properties:  http://lv2plug.in/ns/lv2core#connectionOptional


    Port 44:
        Type:        http://lv2plug.in/ns/ext/atom#AtomPort
                     http://lv2plug.in/ns/lv2core#OutputPort
        Symbol:      out_ui
        Name:        UI Output
        Designation: http://lv2plug.in/ns/lv2core#control
        Properties:  http://lv2plug.in/ns/lv2core#connectionOptional


    Port 45:
        Type:        http://lv2plug.in/ns/lv2core#ControlPort
                     http://lv2plug.in/ns/lv2core#OutputPort
        Symbol:      out_latency
        Name:        Latency OUT
        Designation: http://lv2plug.in/ns/lv2core#latency
        Minimum:     0.000000
        Maximum:     384000.000000
        Default:     0.000000
        Properties:  http://lv2plug.in/ns/lv2core#integer
                     http://lv2plug.in/ns/lv2core#reportsLatency
                     http://lv2plug.in/ns/ext/port-props#hasStrictBounds

Carla zu libpipewire-module-filter-chain-Syntax

#!/usr/bin/python
import os
import sys
import xml.etree.ElementTree as ET

path = sys.argv[1]
if not os.path.exists(path):
    print('{} does not exist'.format(path))
    exit()

tree = ET.parse(path)
root = tree.getroot()

for plugin in tree.findall('Plugin'):
    uri = plugin.find('Info').find('URI').text
    name = plugin.find('Info').find('Name').text
    print('''    {{
        name = "{}"
        type = lv2
        plugin = "{}"
        control = {{'''.format(name, uri))
    data = plugin.find('Data')
    for parameter in data.findall('Parameter'):
        symbol = parameter.find('Symbol').text
        value = parameter.find('Value').text
        print('            "{}" = {}'.format(symbol, value))
    print('''        }
    }''')

Github: MaidLucy/dotfiles

Einpegeln

Heimkino Setup

Erste (digitale) Versuche

So trennt man richtig

Crossover

Parametrischer EQ

Fazit

-> Linux Audio kann man trauen!

Was macht jetzt Pipewire besser

Es ist einfach eine ✨ eierlegende Wollmilchsau ✨

Nützliche Command Line Tools

pw-metadata -n settings 0 clock.force-quantum 256
pw-cli ls Node

Noch mehr Zeug, das PipeWire kann

Software

Credits

Danke für’s Zuhören! 💕

Art by Jezzychii