Cosa usavi per fare resampling con MPD?
Se usavi libsamplerate, la differenza in termini di consumo di CPU rispetto a libsoxr è nota (e notevole), così come ovvia e ben nota è la differenza nel suono tra le due.
Printable View
Paolo, MPD l ho usato anche con libsoxr0 cmnq c´era una differenza di consumo di risorse...minore ma c era...
scusate se insisto, ma MPD è un server, in fase di scan l'utilizzo di CPU schizza e sulla ALIX bloccava la riproduzione, uno dei motivi per cui ho abbandonato MPD. Secondo me è improprio confrontarlo con Squeezelite.
Per quanto ne so io Libsamplerate:Libsoxr-lsr = 10:1 in termini di cpu, in termini sonori non so.
@Paolo, una differenza tra :Libsoxr-lsr e libsoxr è comprensibile: la prima è un binding, quindi - per quanto ottimizzata - ha certamente un overhead rispetto all'utilizzo nativo, non mi stupisce.
Mi lascia più perplesso, la tua convinzione che libsoxr non sia una semplice componente di libsox e quest'ultima di sox. Anche dovesse essere nato prima SOX che non libsox e libsoxr, non vedo nessun valido motivo per cui avrebbero dovuto replicare il codice in tre istanza diverse.
Come ti ho già riportato, questo è quello che scrivono sulla home page di SOX:
"SoX is often used to convert an audio file from one sampling rate to another rate ...omissis...The resampler is also available separately as the SoX Resampler library (libsoxr). "
e questa è la descizione in sourgeForce di libsox:
libsox is a library of sound sample file format readers/writers and sound effects processors. It is mainly developed for use by SoX but is useful for any sound application.
EDIT: Da un'indagine nel codice QUI e QUI è evidente che SOX (applicazione, sox.c come sorgente) usa Libsox (sox.h nel sorgente). Non è chiarissimo, invece, il meccanismo di chiamata a libsoxr, ma è evidente che il codice di libsoxr NON è replicato in Libsox e nemmeno in SOX. Probabilmente utilizza un meccanismo dinamico per caricare le librerie, dovrei scendere molto più nel dettaglio per averne certezza, ma direi che può bastare.
Vediamo di schiarirci un po' le idee... :-)
come è evidente, sox NON dipende da libsoxr0 ma da libsox2.codice:$ apt-cache show sox
Package: sox
Version: 14.4.1-5
Installed-Size: 172
Maintainer: Pascal Giard
Architecture: i386
Depends: libsox-fmt-alsa (= 14.4.1-5) | libsox-fmt-ao (= 14.4.1-5) | libsox-fmt-oss (= 14.4.1-5) | libsox-fmt-pulse (= 14.4.1-5), libsox-fmt-base (= 14.4.1-5), libsox2 (= 14.4.1-5), libc6 (>= 2.15), libgomp1 (>= 4.2.1)
Suggests: libsox-fmt-all
Description-en: Swiss army knife of sound processing
[...]
Ora, vediamo le dipendenze di libsox per vedere se per caso questa a sua volta usa libsoxr0:
quindi libsox2 (la libreria utilizzata da sox) NON dipende da libsoxr0.codice:# apt-cache show libsox2
Package: libsox2
Source: sox
Version: 14.4.1-5
Installed-Size: 643
Maintainer: Pascal Giard
Architecture: i386
Replaces: libsox1b
Depends: libc6 (>= 2.7), libgomp1 (>= 4.9), libgsm1 (>= 1.0.13), libltdl7 (>= 2.4.2), libmagic1 (>= 5.12), libpng12-0 (>= 1.2.13-4), zlib1g (>= 1:1.1.4)
Pre-Depends: multiarch-support
Recommends: libsox-fmt-alsa | libsox-fmt-ao | libsox-fmt-oss | libsox-fmt-pulse, libsox-fmt-base
Suggests: libsox-fmt-all
Conflicts: libsox0, libsox0a, libsox1, libsox1a
Description-en: SoX library of audio effects and processing
SoX is the swiss army knife of sound processing.
.
This package contains the SoX library which enables to convert various formats
of computer audio files in to other formats. It also allows you to apply
various effects to sound files.
.
Any format support requires at least libsox-fmt-base.
Sound card I/O requires libsox-fmt-alsa, libsox-fmt-ao, libsox-fmt-oss or
libsox-fmt-pulse.
[...]
Homepage: http://sox.sourceforge.net
Tanto per conferma, andiamo a verificare:
non c'è traccia di libsoxr0, né di altre librerie che a loro volta potrebbero utilizzarla. Ergo, libsox NON usa libsoxr.codice:$ ldd /usr/lib/libsox.so.2.0.0
linux-gate.so.1 (0xb7793000)
libltdl.so.7 => /usr/lib/i386-linux-gnu/libltdl.so.7 (0xb76d1000)
libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xb76cc000)
libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xb76a1000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb7688000)
libmagic.so.1 => /usr/lib/i386-linux-gnu/libmagic.so.1 (0xb766a000)
libgomp.so.1 => /usr/lib/i386-linux-gnu/libgomp.so.1 (0xb765a000)
libgsm.so.1 => /usr/lib/i386-linux-gnu/libgsm.so.1 (0xb764a000)
libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xb7603000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb7458000)
/lib/ld-linux.so.2 (0xb7795000)
librt.so.1 => /lib/i386-linux-gnu/i686/cmov/librt.so.1 (0xb744f000)
libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xb7433000)
Ora, tanto per scrupolo andiamo a guardare libsoxr:
per maggiore sicurezza:codice:# apt-cache show libsoxr0
Package: libsoxr0
Source: libsoxr
Version: 0.1.1-1
Installed-Size: 232
Maintainer: Debian Multimedia Maintainers
Architecture: i386
Depends: libc6 (>= 2.3.6-6~), libgomp1 (>= 4.4)
Pre-Depends: multiarch-support
Description-en: High quality 1D sample-rate conversion library
The SoX Resampler library `libsoxr' performs one-dimensional sample-rate
conversion - it may be used, for example, to resample PCM-encoded audio.
.
It aims to give fast and high quality results for any constant (rational or
irrational) resampling ratio. Phase-response, preserved bandwidth, aliasing,
and rejection level parameters are all configurable; alternatively, simple
`preset' configurations may be selected.
.
A simple API is provided that allows interfacing using commonly-used sample
formats and buffering schemes.
Multi-Arch: same
Homepage: http://sourceforge.net/projects/soxr/
evidentemente non è vero neanche il contrario: libsoxr non usa libsox.codice:# ldd /usr/lib/i386-linux-gnu/libsoxr.so.0.1.0
linux-gate.so.1 (0xb7729000)
libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xb7679000)
libgomp.so.1 => /usr/lib/i386-linux-gnu/libgomp.so.1 (0xb7669000)
libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xb764c000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb74a1000)
/lib/ld-linux.so.2 (0xb772b000)
librt.so.1 => /lib/i386-linux-gnu/i686/cmov/librt.so.1 (0xb7498000)
Per quanto riguarda libsoxr-lsr0, questa non è che una sorta di "wrapper" intorno a libsoxr0 che "imita" (e può sostituire) libsamplerate (utilizzando libsoxr0 come "motore"). Ovviamente:
solita verifica:codice:apt-cache show libsoxr-lsr0
Package: libsoxr-lsr0
Source: libsoxr
Version: 0.1.1-1
Installed-Size: 48
Maintainer: Debian Multimedia Maintainers
Architecture: i386
Depends: libc6 (>= 2.3.6-6~), libgomp1 (>= 4.2.1), libsoxr0 (>= 0.1.0)
Pre-Depends: multiarch-support
Description-en: High quality 1D sample-rate conversion library (libsamplerate bindings)
The SoX Resampler library `libsoxr' performs one-dimensional sample-rate
conversion - it may be used, for example, to resample PCM-encoded audio.
[...]
This package contains bindings compatible with the resampling library
`libsamplerate' (constant rate).
Multi-Arch: same
Homepage: http://sourceforge.net/projects/soxr/
com'era ovvio libsoxr-lsr0 viene "linkata" dinamicamente con libsoxr0 (e non ha nulla a che fare con libsox).codice:$ ldd /usr/lib/i386-linux-gnu/libsoxr-lsr.so.0
linux-gate.so.1 (0xb77a7000)
libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xb7733000)
libsoxr.so.0 => /usr/lib/i386-linux-gnu/libsoxr.so.0 (0xb76f3000)
libgomp.so.1 => /usr/lib/i386-linux-gnu/libgomp.so.1 (0xb76e2000)
libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xb76c6000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb751b000)
/lib/ld-linux.so.2 (0xb77a9000)
librt.so.1 => /lib/i386-linux-gnu/i686/cmov/librt.so.1 (0xb7512000)
Risulta perciò evidente che (almeno a livello di binari) si tratta senza dubbio di due librerie diverse e completamente indipendenti l'una dall'altra.
Da notare che anche le home pages dei rispettivi progetti (entrambi su SourceForge) indicate nei relativi pacchetti Debian sono DIVERSE. Di conseguenza diversi sono anche i rispettivi repository git (e quindi i relativi alberi dei sorgenti).
Per sox e libsox la home page è questa: "SoX - Sound eXchange | HomePage", mentre per libsoxr e libsoxr-lsr la home page è: "The SoX Resampler library | SourceForge.net".
Da lì però si arriva (o forse dovrei dire "si torna") qui: The SoX Resampler library / Wiki / Home, dove si legge (nel "README"):
In conclusione si tratta di due progetti strettamente "collegati" tra loro, ma al tempo stesso distinti. Il codice sorgente del "motore" di resampling viene in qualche modo condiviso tra i due, come per altro è ovvio che sia (però non è affatto detto che i due progetti siano sempre "allineati" l'uno con l'altro in occasione di tutte le rispettive "release").Quote:
The resampler is currently available either as part of `libsox' (the audio
file-format and effect library), or stand-alone as `libsoxr' (this package).
The interfaces to libsox and libsoxr are slightly different, with that of
libsoxr designed specifically for resampling. An application requiring
support for other effects, or for reading-from or writing-to audio files or
devices, should use libsox (or other libraries such as libsndfile or
libavformat).
Non stiamo dicendo cose necessariamente in contraddizione, tu fai un'analisi delle dipendenze tra librerie in una particolare configurazione, io ho guardato nel codice sorgente.
1. SOX dipende da Libsox. (0,1,2,...) è in funzione della release, si tratta sempre di Libsox, v. SOX.c e SOX.h.
2. ne SOX ne LIBSOX hanno chiamate esplicite a Libsoxr, ma nel loro repository non c'è traccia di codice dedicato all'upsampling, ai filtri,...
3. Libsox ha un meccanismo di chiamata dinamica delle librerie, per cui non è strettamente necessaria una dipendenza nel senso streto del termine (inversion of control).
4. libsoxr-lsr è un wrapper, credo che qui diciamo esattamente la stessa cosa, probabilmente però ho capito da dove si genera il fraintendimento, colpa mia, nel post precedente avevo scritto libsox-lsr invece di libsoxr-lsr, ma intendevo quest'ultima. Chiedo scusa.
Confermo trattarsi di due progetti e di due repository distinti, avevo postato 2 link infatti.
SOX e LIBSOX non hanno internamente codice per l'upsampling, questo unito a quanto dichiarano esplicitamente nelle rispettive home pages, mi fa pensare che LIBSOXR venga utilizzata da libsox per il resampling mediante un collegamento dinamico in inversione di controllo (stile plug-in) quindi non derivabie da un analisi delle dipendenza a compile/buid time ma solo runtime.
Per averne certezza bisognerebbe scendere in maggiore dettaglio e seguire un caso reale o di test con resampling, vedo di farlo.
Sarebbe interessante implementare in LMS una conversione PCM to DSD al volo.....
Credo che questo tagli la testa al toro, al netto di menzogne...
Dal readMe:
The resampler is currently available either as part of `libsox' (the audio
file-format and effect library), or stand-alone as `libsoxr' (this package).
The interfaces to libsox and libsoxr are slightly different, with that of
libsoxr designed specifically for resampling. An application requiring
support for other effects, or for reading-from or writing-to audio files or
devices, should use libsox (or other libraries such as libsndfile or
libavformat).
no, certo. Si tratta solo di capire come stanno le cose. Forse facciamo prima a chiedere agli sviluppatori... :-)
da qualche parte ci deve pur essere. Magari lo tengono in un qualche repository separato, che usano sia da una parte che dall'altra? boh.
sì, ma se Debian non dichiara nessuna dipendenza di sox/libsox da libsoxr -neanche come semplice "suggests"- vuol dire che non ne ha il benché minimo bisogno, non la usa in alcun modo, non c'è nessuna relazione funzionale.
Se una funzionalità fondamentale di sox/libsox (qual è il resampling, da cui tra l'altro dipendono un mucchio di altre funzionalità diverse) dipendesse veramente da libsoxr, il pacchetto di sox e/o quello di libsox dovrebbero dipendere da libsoxr. Se non proprio come "Depends", quanto meno come "Recommends". Mentre invece non c'è neanche un semplice "Suggests".
Ciò significa che, installando sox, libsoxr non viene installato (e neanche ne viene suggerita l'installazione). Come dire che ci si ritroverebbe una installazione di sox che "non funziona". E questo a causa di un bug banale e semplicissimo da risolvere nella definizione delle dipendenze del pacchetto. Il che può anche capitare, ma è a dir poco improbabile. Specie nella "stable". ;)
Elucubrazioni a parte, quello che taglia la testa al toro su questo punto è il fatto che sox funziona perfettamente (funzioni di resampling incluse) anche se libsoxr non è installata!
Ergo tali funzioni devono necessariamente essere già incluse in libsox. Non si scappa: di certo non possono provenire in alcun modo da una libreria (libsoxr) che non è neanche installata nel sistema...
Di più: poiché libsox2 sostanzialmente installa un unico file, quello della libreria (libsox.so.X.Y.Z) e non dipende da altre librerie o plugin fatta eccezione per le libsox-fmt-* (che in sostanza si occupano solo di I/O), il codice di resampling deve necessariamente essere integrato proprio all'interno di libsox.so, non può essere altrove.
evidentemente... è impossibile. Da qualche parte il codice deve pur esserci. ;)
Presumibilmente ti sarà sfuggito: magari è "nascosto" da qualche parte, in funzioni/files/includes/librerie/whatever che non hanno nomi così ovvi per chi non ha confidenza con quel progetto.
@UnixMan, non ti rispondo punto punto, altrimenti non si capisce un ostia...
Secondo me c'è un'incomprensione di fondo:
Io dico che il codice per fare resampling c'è ed è nel repository LIBSOXR e non in SOX (repository), ho solo specificato che mentre è chiaro il meccanismo tramte cui SOX (applicazione) usa LIBSOX (libreria), non mi è altrettanto chiaro al momento come LIBSOX (Libreria) usa/richiama il codice in LIBSOXR (repository), perchè non ho approfondito.
E' evidente che non è tramite una dipendenza tra packages, altrimenti - come dici giustamente tu - sarebbe visibile.
Ovvio che potrebbe essere anche altro codice, ma se fosse in package diversi verrebbe evidenziato, sbaglio?
Stando a quanto dichiarano loro, il repository SOX viene utilizzato per generare sia SOX (applicazione) che LIBSOX (libreria) e credo non ci sia nulla di strano in ciò.
Sempre stando a quanto scrivono loro, il resampler utilizzato in LIBSOX (libreria) (e quindi in SOX (applicazione)) è lo stesso usato in LIBSOXR (Libreria) e sta nel repository LIBSOXR.
In particolare, descrivono le librerie LIBSOX, LIBSOXR e LIBSOXR-LSR come tre 'modi' diversi di utilizzare lo stesso resampler, nei primi due casi si tratta di API diverse, nel terzo è un vero e proprio wrapper che lo 'maschera' rendendolo utilizzabile da client di LIBSAMPLERATE al costo di minore efficienza e rinuncia ad alcune funzionalità comprese in LIBSOXR.
Volendo fare un grafo:
RESAMPLER - LIBSOXR API..................- APP1
.................- LIBSOXR-LSR WRAPPER...- (LIBSAMPLERATE API) - APP2
.................- LIBSOX API....................- APP3
.................- SOX (tramite LIBSOX)
Loro stessi consigliano di utilizzare LIBSOXR (libreria) in applicazioni interessate al solo resampling, LIBSOX (libreria) negli altri casi e SOX (applicazione) da riga di comando. Non credo darebbero questo consiglio se si trattasse di funzionalità (codice sorgente) effettivamente diverse, perchè dovrebbero?
Quanto sopra si può ottenere in modi diversi, se come dici tu SOX (applicazione), LIBSOX (libreria) e LIBSOXR (libreria) vengono disribuiti indipendentemente e senza dipendenza reciproca, vuol dire che i packages sono strutturati in modo da comprendere al loro interno tutto il codice necessario già in fase di build, così da non richiedere la presenza ed installazione di altre librerie sul sistema runtime. E' un metodo di distribuzione con vantaggi e svantaggi, in generale non è una buona pratica.
E' ovvio che non c'è modo di verificare che 'RESAMPLER' sia effettivamente lo stesso nei tre casi se non risalendo ai singoli FORK delle singole distro e verificare sorgenti e script di compilazione, ma ripeto, perchè dovrebbero farlo?
Spero ti sia più chiaro il mio pensiero, chiedere agli sviluppatori è certamente la via più veloce.
Chia ha fatto sta Plugin é un genio!!! SmartMix
https://up.nexthardware.com/user_ima...Immagine78.jpg
SlimServer Plugins - Michael Herger's Homepage
:devil/opt/squeezelite/squeezelite-i386 -z -o front:CARD=X20,DEV=0 -a 100:3:32:1 -b 3072:4096 -u vLX28
Con questo comando ho dato concreto Starting all'uso di Squeezelite in Voyage ieri nel tardo pomeriggio. Il complice perfetto( il BRAVO austriacante antonellocaroli che Dio lo protegga) mi ha dato una mano per aggiustare la sintassi corretta . Fuori dai denti subito che l'accoppiata LMS (su PC Win ovvero su Lubuntu )+ Squeezelite in Voyage (su miniPC headless) non ha assolutamente niente da invidiare
a Daphile sul piano della qualità di riproduzione. Perfettamente indistinguibile cioè eccellente.
Credo che anche Giorgio ( Dacpassion ) abbia fatto l'esperienza e quindi potrà dire la sua anche lui. Io per quanto mi concerne sono assolutamente soddisfatto....Five stars...
meditate gente...meditate
evvai! anche Giovanni e' entrato nel Club dei "folgorati" da LMS+squeezelite!!!!!!!! Welcome!!!!
Allegato 16297
ragazzi un piccolo "appello"...ma a voi sta fungendo TIDAL ....sembrerebbe down....non riesco a visualizzare nulla
certo Filippo tutto fatto....ma sembra morto
Per essere chiari e' da stamani che Tidal non funge
Se voglio avere upsampling sincrono cosa devo cambiare?
Per capirci io vorrei che i file 44khz o multipli siano portati a 352
Quelli 48 o multipli a 384
Grazie
Che bello!! Complimenti a tutti, ho visto solo oggi questa discussione a cui sono molto interessato, dato che sono autodidatta e inesperto di Linux. Utilizzo anche io da diversi mesi con molta soddisfazione la combinazione LMS e squeezlite su Voyage MPD. Un suggerimento che mi sento dare a chi utilizza questa configurazione è quella di dare il comando killall mpd per fermare MPD e recuperare risorse, soprattutto se si utilizza un Thin Client poco potente.
Riguardo ai processi lato server per ora utilizzo INGUZ come convolutore per il DRC, ma non riesco ad applicare l'upsampling a monte. In questo caso INGUZ tramite SOX upsampla il filtro per portrarlo allo stesso bitrate del file musicale. Volevo evitare questo e far si che venga utilizzato tutto a 96khz.
Tra l'altro ho letto che sox è in grado di fare anche da convolutore, sarebbe interessante implementare il tutto con un singolo comando.
Non saprei dirti di SOX, anche se si, nella documentazione è citata la possibilià di 'digerire' filtri FIR, bisognerebbe indagare. Inguz è semplice ed efficace, se proprio non puoi fare a meno del DRC. L'altro giorno leggevo di un altro motore DRC compatibile con LMS, ma non ho salvato la pagina nei segnalibri e non riesco più a trovarlo... malediz!
Brutefir, forse?
Non è lui, ma anche questa è un'opzione, a suo tempo era considerata 'superata' da Inguz, adesso bisognerebbe vedere chi è il meglio supportato. Nel frattempo l'ho ritrovato: ConvolverPipe
Non ho ancora nemmeno letto l'home page, ho solo visto che può essere utilizzato con LMS, Qualcuno ne sa qualcosa?
Se si può fare direttamente con sox, potrebbe essere la cosa migliore. Convoluzione ed upsampling in un colpo solo, senza mettere di mezzo altri software...
Marco mi sto godendo la musica su Lubuntu con LMS 7.9 ....devo dire che mi hai dato un buon consiglio....sopratutto il palcoscenico appare piu' largo e profondo, più fuoco e definizione, grandissima
naturalezza e fluidità. Guarda LMS 7,9 sembra fatto apposta per Lubuntu.....non mi sentivo cosi a mio agio come ora.....Winzozz CIAOOOOO!!!!!
Ci sono accorgimenti particolari per installare la 7.9? Ho provato ieri sera, so windows 7 64bit ho scaricato la versione del 19 marzo .exe, dopo aver disinstallato al 7.5 e installato la nuova versione questa si blocca sul mio pc appena apro il pannello delle impostazioni. Ho l'impressione che non si sia disinstallata bene la vecchia versione....
Ma si blocca se apri le impostazioni dalla pagina WEB o dall'applicazione di controllo?
Il server parte o no?