Vai al contenuto
Simone Russo
Tutti i lavori
Progetto principale2026

PipeDuck

Ducking audio automatico per PipeWire. Nato da un fastidio, arrivato alla v1.2.0.

Cliente
Progetto personale
Ruolo
Creatore, tutto
Anno
2026
Stato
Rilasciato
Progetto principale2026
C++20 · PipeWire · libpulse

Prove

v1.2.0
Release · ott 2026
29
Funzioni di test · 431 asserzioni
4
Job di build · matrice compilatore × GUI
86
File tracciati · ~368 KB di C++
01

L’apertura

Ogni chiamata inizia allo stesso modo: qualcuno parla, la musica è troppo alta, cerchi il cursore del volume e perdi la prima frase. Gli strumenti esistenti abbassano troppo o tornano al massimo come se niente fosse. Volevo qualcosa che si comportasse come una mano sul fader: giù veloce, su morbido, e solo quando serve.

02

La partita di mezzo

PipeDuck è una riscrittura in C++20 di pw-duck con priorità diverse. Si iscrive a libpulse una volta sola e reagisce agli eventi degli stream invece di fare polling su pactl. Le dissolvenze sono rampe smoothstep guidate dal tick di controllo, così una nuova voce interrompe subito il ritorno. Il routing passa da un sink virtuale temporaneo ripristinato in automatico — e se qualcosa fallisce il sink resta vivo invece di uccidere l’audio delle applicazioni. Sopra il daemon: tray StatusNotifier con stato live, tuner GTK4, tuner da terminale e CLI.

03

Il finale

La 1.2.0 è taggata, licenza MIT, compilata dalla CI a ogni commit su gcc e clang con la GUI attiva e disattivata, e gira sulla mia macchina da prima che avesse un nome. La parte interessante non è mai stato il DSP: era rendere sicuro toccare lo stato del routing audio.

Risultato

1.2.0 rilasciata · MIT · 29 funzioni di test in CI

Prossimo progettoMarmotta