Upsampling con LMS e Squeezelite, terza puntata

Pagina 1 di 14 1 2 3 4 5 6 7 8 9 10 11 ... ultimo
Visualizzazione dei risultati da 1 a 10 su 136
  1. #1
    pebibyte L'avatar di marcoc1712
    Registrato
    Jan 2013
    Messaggi
    5,254
    configurazione

    Predefinito Upsampling con LMS e Squeezelite, terza puntata

    Evvabbè,

    adesso che disponiamo di tutti pezzi per costruirci un sistema basato su LMS estremamente ben suonante, rimanendo in completo ambito open source, ci fermiamo qui?

    Manco per sogno, è ora di cominciare a pensare a come renderlo semplice da installare, gestire ed usare per come vogliamo noi, che dei risultati della lega giovanile di baseball non ce ne frega nulla.

    Io non sono un buon giudice, perchè francamente non vedo tutte queste difficoltà, se non - forse - nella realizzazione di uno script per l'avvio automatico di squeezelite da utilizzarsi nei diversi OS target.

    Di questo aspetto se ne sta occupando Giovanni , partendo da Voyage, credo che la cosa possa crescere e comprendere diverse alternative, tra le quali vedrei volentieri Volumio su BBB con Chronus ed Hermes di TPA (nel caso, devo compilare squeezelite), che non è per nulla male ed apre diverse possibilità interessanti.

    Lato server, francamente non vedo 'grossi' ostacoli. L'installazione è banale, i passi di configurazione non sono complicatissimi ed avvengono tutti via WEB, quindi basta una guida fatta bene (ce ne sono già parecchie) ed un volontario armato di buona volontà.

    Il punto dolente è l'upsampling. Qui la necessità di operare con i parametri dei vari SOX, FLAC nei vari custom-convert.conf e nei settings dei tipi di file rende la cosa oggettivamente ostica, soprattutto perchè qui LMS è lacunoso e ci sono situazioni non gestite e non documentate, incappando nelle quali ci si perde, come è successo anche a noi.

    Ed allora?

    Daphile ha risolto brillantemente - amio avviso - la cosa 'nascondendo' la complessità (e riducendo di conseguenza la flessibilità) utilizzando gli stessi parametri che già utilizzava per l'upsampling con squeezelite a livello di player, trasponendoli al server mediante uno script generico (Transcode/Native+) che incapsula le chiamate a SOX, FLAC, LAME,... eliminando quindi la necesstità di operare sul convert.conf e nei settings dei tipi file.

    Peccato che questo meccanismo non sia direttamente esportabile in LMS, visto che utilizza in parte caratteristiche proprietarie.

    Però l'idea è buona, possiamo repicarla in LMS? No, mah, forse..., però, ma si, dai!

    Non è una cosa 'semplice' e richiede un bel po di lavoro per una serie di motivi, il principale dei quali è che ovrebbe poter funzionare in tutti gli OS rispettando le modalità e le caratteristiche di LMS in ognuno di questi.

    In pratica, si tratta di produrre:

    a. "script" (in realtà eseguibili) specifici per ogni piattaforma ma equivalenti per modalità di chiamata.

    b. Un'estensione (plugin) dei parametri dei player, includendo quelli necessari ai vari passaggi ed in particolare: conversione, upsampling e downsampling automatico (quando il file è in definizione più alta di quella ammessa dal player).

    c. Un metodo comune (ma ovviamnete differenziato) per la distribuzione e l'installazione del plugin e degli script che viaggiano con esso, nonchè della reimpostazione del convert.conf

    La cattiva notizia è che è un lavoro molto impegnativo, richiede conoscenze specifiche sull'architettura dei plugin che dovrei acquisire ed anche capacità di sviluppo degli script nei diversi OS che non ho, quindi ho certamente bisogno d'aiuto qui.

    Le buone, però, sono che:

    a. E' tutto fattibile in LMS e non richiede modifiche allo standard (diverse da quelle già sottoposte, ma che servono a prescindere), ma solo integrazioni.

    b. Può essere fatto per gradi, iniziando da un OS per poi arrivare agli altri, ma anche partendo senza un metodo di distribuzione automatico, con interfaccia utente povera ma con gli script funzionanti.

    Questo vuol dire, che un manipolo di coraggiosi alfa tester può aiutare a consolidare una prima versione 'ristretta', che quando poi sarà disponibile potrà passare in beta più allargata. Inizialmente sarà necessario armeggiare con files ed impostazioni, quindi non è per chi vuole la comodità, ma l'obiettivo è quello.

    Io ho già un miniprototipo dello script per Windows (che era il primo ostacolo), se qualcuno (Filippo???) vuole aiutarmi a consolidarlo, poi si potrà partire da quello per gli script su linux (Giovanni? Paolo?) nentre io cerco di realizzare quanto serve per il plugin e la distribuzione.

    Solita richiesta, chi ci stà batta un colpo.
    Ciao, Marco.

    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction."
    — E. F. Schumacher (mis-attributed to A. Einstein)
    ________________________________________________________________________________
    Autore della patch R2 per Squeezelite e del plugin C-3PO. note libere
    Logitech media Server 7.9 > miniPc + squeezelite-R2 / SB+ > "Lu Scalmentu" NOS R2R DAC by TubeOne/ AudioResearch DAC 1-20 >
    Klimo Merlino Gold TPS > DIS Interconnect > Kent Gold > Reference > Monitor Audio Studio 20 SE

  2. #2
    tebibyte
    Registrato
    Aug 2011
    Età
    50
    Messaggi
    2,928
    configurazione

    Predefinito

    Sai che il mio colpo c´é sempre

  3. #3
    pebibyte L'avatar di marcoc1712
    Registrato
    Jan 2013
    Messaggi
    5,254
    configurazione

    Predefinito

    Originariamente inviato da antonellocaroli
    Sai che il mio colpo c´é sempre
    Bravo Filippo...

    Come te la cavi con gli script dos? (.bat?)
    Ciao, Marco.

    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction."
    — E. F. Schumacher (mis-attributed to A. Einstein)
    ________________________________________________________________________________
    Autore della patch R2 per Squeezelite e del plugin C-3PO. note libere
    Logitech media Server 7.9 > miniPc + squeezelite-R2 / SB+ > "Lu Scalmentu" NOS R2R DAC by TubeOne/ AudioResearch DAC 1-20 >
    Klimo Merlino Gold TPS > DIS Interconnect > Kent Gold > Reference > Monitor Audio Studio 20 SE

  4. #4
    tebibyte
    Registrato
    Aug 2011
    Età
    50
    Messaggi
    2,928
    configurazione

    Predefinito

    Originariamente inviato da marcoc1712
    Bravo Filippo...

    Come te la cavi con gli script dos? (.bat?)
    so quello che dicono diciamo....ma non sono un esperto

  5. #5
    gibibyte L'avatar di DacPassion
    Registrato
    Jul 2014
    Messaggi
    1,250

    Predefinito

    Anche io, nel mio piccolo, ci sto!
    Clearaudio Emotion + Satisfy + Grado Gold1 > Phono D3A DIY
    Futro S450 + Daphile / Amanero + Buffalo 2 (trident) uscita a TU Cinemag 15/15B DIY / Jlsounds + Lector Digicode TDA1541 S1
    Monoblocchi D3A 2A3 (electrolytich free!!) DIY / Coral Beta8 in BLH DIY

  6. #6
    tebibyte L'avatar di UnixMan
    Registrato
    Sep 2013
    Messaggi
    2,529
    configurazione

    Predefinito

    Come sai io continuo felicemente ad usare MPD e non LMS/Squeezelite (non fosse altro perché quest'ultimo mi blocca il device audio anche quando non è in play e questo -per l'uso che faccio del mio sistema- è parecchio seccante), ma per gli script Unix/Linux ti posso senz'altro dare una mano volentieri. Basta che mi dici come è fatto l'input, quale deve essere la sintassi dei comandi, cosa deve fare lo script e come deve essere fatto l'output...
    Ciao, Paolo.

    «Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.»

  7. #7
    pebibyte L'avatar di marcoc1712
    Registrato
    Jan 2013
    Messaggi
    5,254
    configurazione

    Predefinito

    Originariamente inviato da UnixMan
    Come sai io continuo felicemente ad usare MPD e non LMS/Squeezelite (non fosse altro perché quest'ultimo mi blocca il device audio anche quando non è in play e questo -per l'uso che faccio del mio sistema- è parecchio seccante), ma per gli script Unix/Linux ti posso senz'altro dare una mano volentieri. Basta che mi dici come è fatto l'input, quale deve essere la sintassi dei comandi, cosa deve fare lo script e come deve essere fatto l'output...
    Per liberare l'audio 'on idle' c'è l'apposito parametro di Squeezelite: -C <timeout seconds>


    al momento questo è lo scheletro (non va, sono in debug) i parametri di input dovranno essere intercettati, mi piacerebbe fossero non posizionali ma nella forma :

    transcode -c 00:04:02:... -i flac -o wav -u URI -s 00:01:00.000 -e 00:09:09.999

    temo in windows non sia possibile (limite di 9?).

    quindi un programma PERL chiederà a LMS la directory dove si trovano i vari eseguibili (FLAC, SOX,..), il formato del file di input e quello richiesto in output, compresi eventuali effetti da applicare con sox.

    Sulla base di questo 'meta' script, cotruirà le stringhe corrispondenti ai comand reali in funzione dei diversi formati ed eseguibili utilizzati e le manderà in esecuzione.

    Deve essere completamente 'silente', nessun file di log aperto e nessuna echo.

    In windows deve essere visto come .EXE (lo compilo con advanced bat to exe) , in linux come eseguibile di qualsiasi tipo, è fondamentale che la riga di comando ed il formato dei parametri sia identica sempre.

    Qualsiasi idea è ottimamente accetta, io con le righe di comando impazzisco... TUTTE.

    codice:
    @rem -- parametri in input -------------------------------
    
    set clientId=e8:de:27:03:05:b2
    set inFormat=flac
    set outFormat=wav
    set inPath="F:\Classica\aaa - Resampling\WAV_16_44100.wav"
    set start=
    set end=
    
    
    @rem -- asking LMS -------------------------------
    
    @rem Bin Directory Location
    
    set binDir="G:\Sviluppo\slimserver\Bin\MSWin32-x86-multi-thread"
    
    @rem input format specs
    
    set inSamplerate=44100
    set inBitDepth=-1
    set inEndianess=-L
    set inSigned=-s
    set inChannels=2
    
    @rem output format specs
    
    set outSamplerate=176400
    set outBitDepth=-3
    set outEndianess=-L
    set outSigned=-s
    set outChannels=2
    
    @rem effects
    
    set gain=-3
    set quality=-v
    set phase=-M
    set aliasing=-a
    set bandwidth=-b 90.7
    set dither=-S
    
    @rem -- sanity check -------------------------------
    
    if ("%clientId%"  equ "" ) exit
    if ("%inFormat%"  equ "" ) exit
    if ("%outFormat%" equ "" ) exit
    if ("%inPath%"  equ "" ) exit
    if ("%binDir%"  equ "" ) exit
    if ("%inSamplerate%"  equ "" ) exit
    if ("%inBitDepth%"  equ "" ) exit
    if ("%inEndianess%"  equ "" ) exit
    if ("%inSigned%"  equ "" ) exit
    if ("%inChannels%"  equ "" ) exit
    
    if ("%outSamplerate%"  equ "" ) exit
    if ("%outBitDepth%"  equ "" ) exit
    if ("%outEndianess%"  equ "" ) exit
    if ("%outSigned%"  equ "" ) exit
    if ("%outChannels%"  equ "" ) exit
    
    
    @rem -- costruzione dei diversi elementi del comando -------------------------------
    
    if (%inFormat%  equ %outFormat% ) (set TRANSCODING=0) else (set TRANSCODING=1)
    
    set transcoding=%binDir%\flac -cs --totally-silent --compression-level-0 %start% %end% -- %inPath%
    
    echo transcoding
    
    set RESAMPLING=0;
    
    if (%inSamplerate%  not equ %outSamplerate% ) (set RESAMPLING=1)
    if (%inBitDepth%  equ %outBitDepth% ) (set RESAMPLING=1)
    if (%inEndianess%  equ %outEndianess% ) (set RESAMPLING=1)
    if (%inSigned%  equ %outSigned% ) (set RESAMPLING=1)
    if (%inChannels%  equ %outChannels% ) (set RESAMPLING=1)
    
    
    set outFormatSpec=-c %outChannels% %outBitDepth% %outSigned% %outEndianess%
    
    set rateString=rate %quality% %phase% -M %aliasing% %bandwidth% %outSamplerate%
    
    if ("%gain%"  equ "") (set gainString=gain %gain%)
    if ("%dither%"  equ "") (set ditherString=dither %dither%)
    
    set effects = %gainString% %rateString% %ditherString%
    
    set resampling=%binDir%\sox -q -t %inFormat% - -t %outFormat% %outFormatSpec% - %effects%
    
    echo resampling
    @rem ------------------------------------------------------------
    
    set command=
    
    if (TRANSCODING==1 and RESAMPLING==1) (set command= %transcoding% | %resampling%)
    if (TRANSCODING==1 and RESAMPLING==0) (set command= %transcoding%)
    if (TRANSCODING==0 and RESAMPLING==1) (set command= %resampling%)
    if (TRANSCODING==0 and RESAMPLING==0) (set command= -)
    
    %command%
    Ciao, Marco.

    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction."
    — E. F. Schumacher (mis-attributed to A. Einstein)
    ________________________________________________________________________________
    Autore della patch R2 per Squeezelite e del plugin C-3PO. note libere
    Logitech media Server 7.9 > miniPc + squeezelite-R2 / SB+ > "Lu Scalmentu" NOS R2R DAC by TubeOne/ AudioResearch DAC 1-20 >
    Klimo Merlino Gold TPS > DIS Interconnect > Kent Gold > Reference > Monitor Audio Studio 20 SE

  8. #8
    pebibyte L'avatar di marcoc1712
    Registrato
    Jan 2013
    Messaggi
    5,254
    configurazione

    Predefinito

    Originariamente inviato da DacPassion
    Anche io, nel mio piccolo, ci sto!
    Ottimo! Puoi cominciare installandoti LMS su uno dei due futro allora (segui le istruzioni di Giovanni su Lubuntu, credo sia la soluzione migliore).
    Ciao, Marco.

    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction."
    — E. F. Schumacher (mis-attributed to A. Einstein)
    ________________________________________________________________________________
    Autore della patch R2 per Squeezelite e del plugin C-3PO. note libere
    Logitech media Server 7.9 > miniPc + squeezelite-R2 / SB+ > "Lu Scalmentu" NOS R2R DAC by TubeOne/ AudioResearch DAC 1-20 >
    Klimo Merlino Gold TPS > DIS Interconnect > Kent Gold > Reference > Monitor Audio Studio 20 SE

  9. #9
    pebibyte L'avatar di marcoc1712
    Registrato
    Jan 2013
    Messaggi
    5,254
    configurazione

    Predefinito

    In alternativa, si potrebbero sosituire gli script direttamente con un eseguibile, come un programma c.

    Questo avrebbe il vantaggio di essere multipiattaforma, ma avrebbe senso solo nell'ipotesi di non usare più SOX e FLAC (e vari) ma LIBSOX e LIBFLAC (...). Volendo continuare ad usare SOX e compagnia, si potrebbe usare PERL, ma avremmo comunque bisogno di uno script minimo (PERL transcode.pl $CLI $IN...) dato che si possono lanciare eseguibili che risiedano dentro un precisa directory, quindi il vantaggio è minimo, mentre diventerebbe 'lungo' l'albero dei processi (LMS lancia System che lancia lo scrip che lancia perl che lancia System...).

    Tutto sommato, mi pare che la soluzione con i diversi script, installati in ragione del tipo di sistema ospite sia la più semplice.
    Ciao, Marco.

    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction."
    — E. F. Schumacher (mis-attributed to A. Einstein)
    ________________________________________________________________________________
    Autore della patch R2 per Squeezelite e del plugin C-3PO. note libere
    Logitech media Server 7.9 > miniPc + squeezelite-R2 / SB+ > "Lu Scalmentu" NOS R2R DAC by TubeOne/ AudioResearch DAC 1-20 >
    Klimo Merlino Gold TPS > DIS Interconnect > Kent Gold > Reference > Monitor Audio Studio 20 SE

  10. #10
    tebibyte L'avatar di UnixMan
    Registrato
    Sep 2013
    Messaggi
    2,529
    configurazione

    Predefinito

    Domandina al volo: se vuoi/devi utilizzare uno script Perl, perché non fare tutto con quello? Puoi identificare l'OS, lanciare i comandi esterni appropriati, aprire pipe, ecc, tutto direttamente da Perl...

    perlfaq8 - learn.perl.org
    Ciao, Paolo.

    «Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.»

Pagina 1 di 14 1 2 3 4 5 6 7 8 9 10 11 ... ultimo

Informazioni Thread

Users Browsing this Thread

Ci sono attualmente 1 utenti che stanno visualizzando questa discussione. (0 utenti e 1 ospiti)

Regole d'invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
nexthardware.com - © 2002-2022