ok, quindi verosimilmente c'è una chiamata a "pipe" (oppure ad "open") che lancia sox con gli opportuni parametri come filtro...
pipe - perldoc.perl.org
executing external commands | Perl HowTo
gestirlo dovrebbe essere banale.
Si può lasciare all'utente la possibilità di utilizzare/scegliere tutte le opzioni relative alla funzione "rate" di sox (cosa potente e versatile, ma che renderebbe la UI troppo complessa per i "non-techie", vanificandone lo scopo...) oppure più semplicemente preparare una lista di opzioni "preconfezionate" ragionevoli (ad es. le stesse utilizzate da libsoxr) ed infilarle in un menu a tendina.
Da non dimenticare una opzione per applicare una attenuazione di qualche dB allo stream (funzione "gain" di sox) prima del resampling, per evitare il rischio di clipping.
capisci male. :-)
Sox è nato come programma monolitico. Solo in seguito le (alcune?) sue funzionalità sono state separate dalla UI (CLI), creando le librerie "libsox" e "libsox-fmt-*".
La libreria "libsoxr" è nata ancora più tardi (solo di recente), con lo scopo di creare una alternativa alla "libsamplerate" che utilizzasse gli algoritmi di resamplig di sox anziché il "Secret Rabbit Code". In un certo senso si può considerare un "derivato" di sox; è basato sui suoi algoritmi (e presumibilmente su parte del suo codice) ma è sostanzialmente un progetto indipendente (anche se verosimilmente c'è uno scambio tra i due).
Sox (e libsox) offrono un numero enorme di funzioni; come dichiarano loro stessi, sono praticamente il "coltellino svizzero" dell'audio. Ci puoi fare praticamente di tutto (o quasi).
Al contrario "libsoxr" è una libreria altamente specializzata, che serve unicamente a fare resampling e nient'altro:
The SoX Resampler library | SourceForge.net
The SoX Resampler library / Code / [988f83] /README
Libsoxr - Audacity Wiki
The SoX Resampler library / Wiki / Home
non è questione di compatibilità. Casomai, di funzionalità. Oltre al resampling, sox può fare molto altro.
Se però ti interessa solo il resampling, libsoxr basta e avanza. Per giunta, forse va meglio. Se non altro dal punto di vista del "consumo di risorse": a parità di "operazione" richiesta, libsoxr "consuma" molta meno CPU di sox. Sebbene gli algoritmi siano gli stessi, probabilmente l'implementazione è stata ottimizzata meglio.
A volte ho anche avuto l'impressione che (a parità di settings) libsoxr "suoni" meglio di sox, anche se non ci metterei la mano sul fuoco (ammesso e non concesso che sia vero, dato che uso un solo PC per tutto, potrebbe anche essere legato banalmente al minore uso della CPU con tutto ciò che ne consegue).
Quindi, in definitiva IMHO converrebbe utilizzare libsoxr. Il problema è che, AFAIK, da Perl non si può fare. Non direttamente, almeno: prima bisognerebbe creare un "wrapper", cioè un "modulo" Perl (scritto in C) che usa libsoxr e ne rende disponibili le funzioni sotto forma di funzioni Perl. Probabilmente non sarebbe poi difficile farlo, ma personalmente non saprei da che parte cominciare (beh, da che parte cominciare magari sì... ma dovrei imparare tutto da zero, e non ho tempo).
yes Sir... :)
https://code.google.com/p/squeezelite/source/browse/
BTW: dai una occhiata qui:
LMS 7.9 and DSD - Page 19
(io non ho avuto tempo di leggere, ma vedo scritto libsoxr in un topic dove si parla di LMS...)