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!
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
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?
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
Guarda qui spiega come usare SOX in LMS per applicare sia FIR che i parametri di equalizzazione generati con REW.
Bisognerebbe provare, ma se consente di usare FIR per le frequenze fino a, diciamo 300 Hz ed un numero sufficiente di parametri di equalizzazione per le ferquenze superiori, potrebbe essere una soluzione elegante, efficiente e (potenzialmente) meno intrusiva di un convolver vero e proprio, ideale per correzioni 'leggere', come rifinitura.
Sconsigliato solo a chi sente il bisogno irrefrenabile di estrarre l'aspersorio sentendo il termine equalizzatore...
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
Questo é il file convert.conf originale...# $Id$
#
# Configuration file for transcoding
#
# If you wish to create custom transcoding entries that won't be overwritten
# by a new release of Logitech Media Server, create a custom-convert.conf file in the
# Logitech Media Server root directory, or the root of the Plugins directory.
#
# On Debian, you can also create this file in # /etc/slimserver/custom-convert.conf
#
# first line is the source format, destination format and the destination device. Asterisk matches all
# second line is the command line for the conversion
#
# First line format:
# <source_format> <dest_format> <destination_device_type> <destination_device_id>
#
# <source_format>: Source music format: mp3, mp4, ogg, wav, etc...
# <dest_format> : Destination music format: Generally mp3, or
# possibly aif or others depending on the types
# your player supports. SliMP3 supports only
# MP3. Squeezebox currently supports mp3, aif
# and pcm. Squeezebox2 adds support for Flac and WMA.
# <destination_device_type>: currently slimp3, squeezebox, or *.
# The * is a wildcard that matches all device
# types.
# <destination_device_id>: The ID of the destination device. The
# ID of the destination device is the MAC address
# of a SliMP3 or Squeezebox device, or the IP of
# an HTTP client (such as your computer running
# WinAmp). The '*' wildcard matches all hosts
#
# either or both of <destination_device_type> and
# <destination_device_id> may be the '*' wildcard
#
#
# $FILE$ is the absolute path to the local source file
# $URL$ is the full URL for remote streams
# [bin] is the executable binary for the encoder or decoder
# - is a special command line that implies passthrough of data
#
# Capabilities
# I - can transcode from stdin
# F - can transcode from a named file
# R - can transcode from a remote URL (URL types unspecified)
#
# O - can seek to a byte offset in the source stream (not yet implemented)
# T - can seek to a start time offset
# U - can seek to start time offset and finish at end time offset
#
# D - can downsample
# B - can limit bitrate
#
# default is "IF"
#
# Substitution strings for variable capabilities
# %f, $FILE$ - file path (local files)
# %F, $URL$ - full URL (remote streams)
#
# %o - stream start byte offset
#
# %S - stream samples start offset (not yet implemented)
# %s - stream seconds start offset
# %t - stream time (m:ss) start offset
# %U - stream samples end offset (not yet implemented)
# %u - stream seconds end offset
# %v - stream time (m:ss) end offset
# %w - stream seconds duration
#
# %b - limit bitrate: b/s
# %B - limit bitrate: kb/s
# %d - samplerate: samples/s
# %D - samplerate: ksamples/s
# %C, $CHANNELS$ - channel count
# %c, $OCHANNELS$ - output channel count
# %i - clientid
# %I, $CLIENTID$ - clientid ( : or . replaced by - )
# %p - player model
# %P, $PLAYER$ - player model ( SPACE or QOUTE replaced by _ )
# %n - player name
# %N, $NAME$ - player name ( SPACE or QOUTE replaced by _ )
# %q, $QUALITY$ - quality
# %Q, - quality ( fractal notation: if = '0' return '01' )
# ${FILENAME}$ - contents of {FILENAME} (may contain other $*$ substitutions )
# specific combinations match before wildcards
mp4 mp3 * *
# FB:{BITRATE=--abr %B}T:{START=-j %s}U:{END=-e %u}
[faad] -q -w -f 1 $START$ $END$ $FILE$ | [lame] --silent -q $QUALITY$ $BITRATE$ - -
aac mp3 * *
# IFB:{BITRATE=--abr %B}
[faad] -q -w -f 1 $FILE$ | [lame] --silent -q $QUALITY$ $BITRATE$ - -
sls mp3 * *
# FB:{BITRATE=--abr %B}D:{RESAMPLE=--resample %D}
[sls] $FILE$ - -s | [lame] --silent -q $QUALITY$ $RESAMPLE$ $BITRATE$ - -
alc mp3 * *
# FB:{BITRATE=--abr %B}D:{RESAMPLE=--resample %D}T:{START=-j %s}U:{END=-e %u}
[faad] -q -w -f 1 $START$ $END$ $FILE$ | [lame] --silent -q $QUALITY$ $RESAMPLE$ $BITRATE$ - -
ogg mp3 * *
# IFB:{BITRATE=--abr %B}D:{RESAMPLE=--resample %D}
[sox] -q -t ogg $FILE$ -t wav - | [lame] --silent -q $QUALITY$ $RESAMPLE$ $BITRATE$ - -
wav mp3 * *
# IFB:{BITRATE=--abr %B}D:{RESAMPLE=--resample %D}
[lame] --silent -q $QUALITY$ $RESAMPLE$ $BITRATE$ $FILE$ -
aif mp3 * *
# IFB:{BITRATE=--abr %B}D:{RESAMPLE=--resample %D}
[lame] --silent -q $QUALITY$ $RESAMPLE$ $BITRATE$ $FILE$ -
flc mp3 * *
# FB:{BITRATE=--abr %B}T:{START=--skip=%t}U:{END=--until=%v}D:{RESAMPLE=--resample %D}
[flac] -dcs $START$ $END$ -- $FILE$ | [lame] --silent -q $QUALITY$ $RESAMPLE$ $BITRATE$ - -
wma mp3 * *
# F:{PATH=%f}R:{PATH=%F}B:{BITRATE=--abr %B}D:{RESAMPLE=--resample %D}
[wmadec] -w $PATH$ | [lame] --silent -q $QUALITY$ $RESAMPLE$ $BITRATE$ - -
wmal mp3 * *
# F:{PATH=%f}R:{PATH=%F}B:{BITRATE=--abr %B}D:{RESAMPLE=--resample %D}
[wmadec] -w $PATH$ | [lame] --silent -q $QUALITY$ $RESAMPLE$ $BITRATE$ - -
wmap mp3 * *
# F:{PATH=%f}R:{PATH=%F}B:{BITRATE=--abr %B}D:{RESAMPLE=--resample %D}
[wmadec] -w $PATH$ | [lame] --silent -q $QUALITY$ $RESAMPLE$ $BITRATE$ - -
mpc mp3 * *
# IRB:{BITRATE=--abr %B}D:{RESAMPLE=--resample %D}
[mppdec] --silent --prev --gain 3 - - | [lame] --silent -q $QUALITY$ $RESAMPLE$ $BITRATE$ - -
ape mp3 * *
# FB:{BITRATE=--abr %B}D:{RESAMPLE=--resample %D}
[mac] $FILE$ - -d | [lame] --silent -q $QUALITY$ $RESAMPLE$ $BITRATE$ - -
wvp mp3 * *
# FB:{BITRATE=--abr %B}T:{START=--skip=%t}U:{END=--until=%v}D:{RESAMPLE=--resample %D}
[wvunpack] $FILE$ -wq $START$ $END$ -o - | [lame] --silent -q $QUALITY$ $RESAMPLE$ $BITRATE$ - -
mp3 mp3 * *
-
# Non-mp3 starts here
aif aif * *
-
wav pcm * *
-
flc pcm * *
# FT:{START=--skip=%t}U:{END=--until=%v}
[flac] -dcs --force-raw-format --endian=little --sign=signed $START$ $END$ -- $FILE$
flc aif * *
# FT:{START=--skip=%t}U:{END=--until=%v}
[flac] -dcs --force-raw-format --endian=big --sign=signed $START$ $END$ -- $FILE$
ogf ogf * *
-
ogf flc * *
[flac] --ogg -dcs -- $FILE$ | [flac] -cs --ignore-chunk-sizes --totally-silent --compression-level-0 -
ogg ogg * *
-
ogg aif * *
[sox] -q -t ogg $FILE$ -t raw -r 44100 -c 2 -2 -s $-x$ -
ogg pcm * *
[sox] -q -t ogg $FILE$ -t raw -r 44100 -c 2 -2 -s -
wma pcm * *
# F:{PATH=%f}R:{PATH=%F}
[wmadec] -r 44100 -b 16 -n 2 $PATH$
wmal pcm * *
# F:{PATH=%f}R:{PATH=%F}
[wmadec] -r 44100 -b 16 -n 2 $PATH$
wmap pcm * *
# F:{PATH=%f}R:{PATH=%F}
[wmadec] -r 44100 -b 16 -n 2 $PATH$
mpc pcm * *
# IR
[mppdec] --raw-le --silent --prev --gain 2 - -
ape pcm * *
# F
[mac] $FILE$ - -d
mpc aif * *
# IR
[mppdec] --raw-be --silent --prev --gain 2 - -
alc pcm * *
# FT:{START=-j %s}U:{END=-e %u}
[faad] -q -w -f 2 $START$ $END$ $FILE$
wvp pcm * *
# FT:{START=--skip=%t}U:{END=--until=%v}
[wvunpack] $FILE$ -rq $START$ $END$ -o -
mp4 pcm * *
# FT:{START=-j %s}U:{END=-e %u}
[faad] -q -w -f 2 -b 1 $START$ $END$ $FILE$
aac pcm * *
# IF
[faad] -q -w -f 2 -b 1 $FILE$
sls pcm * *
# F
[sls] $FILE$ - -r -s
wma wma * *
-
wmal wmal * *
-
wmap wmap * *
-
# FLAC output starts here
#mp3 flc * *
# [lame] --mp3input --decode -t --silent $FILE$ - | [flac] -cs --totally-silent --compression-level-0 -
flc flc * *
-
aif flc * *
# FT:{START=--skip=%t}U:{END=--until=%v}D:{RESAMPLE=-r %d}
[flac] -cs --totally-silent --compression-level-0 $START$ $END$ -- $FILE$ | [sox] -q -t flac - -t flac -C 0 $RESAMPLE$ -
wav flc * *
# FT:{START=--skip=%t}U:{END=--until=%v}D:{RESAMPLE=-r %d}
[flac] -cs --totally-silent --compression-level-0 $START$ $END$ -- $FILE$ | [sox] -q -t flac - -t flac -C 0 $RESAMPLE$ -
ogg flc * *
# IFRD:{RESAMPLE=-r %d}
[sox] -t ogg $FILE$ -t flac -C 0 $RESAMPLE$ -
wma flc * *
# F:{PATH=%f}R:{PATH=%F}
[wmadec] -w $PATH$ | [flac] -cs --totally-silent --compression-level-0 -
wmal flc * *
# F:{PATH=%f}R:{PATH=%F}
[wmadec] -w $PATH$ | [flac] -cs --totally-silent --compression-level-0 -
wmap flc * *
# F:{PATH=%f}R:{PATH=%F}
[wmadec] -w $PATH$ | [flac] -cs --totally-silent --compression-level-0 -
mpc flc * *
# IR
[mppdec] --silent --prev --gain 2 - - | [flac] -cs --totally-silent --compression-level-0 -
ape flc * *
# F
[mac] $FILE$ - -d | [flac] -cs --totally-silent --compression-level-0 -
mp4 flc * *
# FT:{START=-j %s}U:{END=-e %u}
[faad] -q -w -f 1 $START$ $END$ $FILE$ | [flac] -cs --totally-silent --compression-level-0 --ignore-chunk-sizes -
aac flc * *
# IF
[faad] -q -w -f 1 $FILE$ | [flac] -cs --totally-silent --compression-level-0 --ignore-chunk-sizes -
sls flc * *
# FD:{RESAMPLE=-r %d}
[sls] $FILE$ - -s | [sox] -q -t wav - -t flac -C 0 $RESAMPLE$ -
alc flc * *
# FT:{START=-j %s}U:{END=-e %u}D:{RESAMPLE=-r %d}
[faad] -q -w -f 1 $START$ $END$ $FILE$ | [sox] -q -t wav - -t flac -C 0 $RESAMPLE$ -
wvp flc * *
# FT:{START=--skip=%t}U:{END=--until=%v}D:{RESAMPLE=-r %d}
[wvunpack] $FILE$ -wq $START$ $END$ -o - | [sox] -q -t wav - -t flac -C 0 $RESAMPLE$ -
# AAC & ALAC output start here
aac aac * *
-
mp4 aac * *
-
sls aac * *
-
alc alc * *
-
# special case for smart bitrates on mp3 input
mp3 mp3 transcode *
# IFB:{BITRATE=--abr %B}D:{RESAMPLE=--resample %D}
[lame] --silent -q $QUALITY$ $BITRATE$ $RESAMPLE$ --mp3input $FILE$ -
flc flc transcode *
# FT:{START=--skip=%t}U:{END=--until=%v}D:{RESAMPLE=-r %d}
[flac] -dcs $START$ $END$ -- $FILE$ | [sox] -q -t wav - -t flac -C 0 $RESAMPLE$ -
# This example transcodes MP3s to MP3s, if the target machine has the
# given MAC address. This rule will take precedence over the
# previous rule because it's more specific.
#mp3 mp3 squeezebox 00:02:dd:34:e9:62
# ./brute_filter $FILE$ -
spdr spdr * *
-
dsf dsf * *
# IFD
-
dff dff * *
# IFD
-![]()
Le recenti esperienze e la curiosità di alcuni di voi (grazie, DacPassion) mi hanno fatto fare 'mente locale' su alcune questioni relative all'upsampling/conversione su LMS vs squeezelite.
Come sapete, la mia opinione è di cercare di minimizzare all'estremo l'impronta termica (e con essa il rumore) del 'device' anteposto al DAC con funzioni di renderer, mentre considero praticamente ininfluente (se ben realizzata) l'infrastruttura di rete, dove con 'device' intendo il PC, SOC, NUC, SB o quello che volete, fino all'estremo limite di non avere proprio nessun device, cioè semplicemente un'interfaccia (che comunque comprende un microprocessore) collegata in i2s al DAC, praticamente uno Squeezebox redivivo. A brevissimo avremo diverse opzioni tra cui scegliere.
So che esistono opinioni diverse, poco male, chi crede di poter migliorare 'investendo' su server e rete lo faccia pure, non inficia in nessun modo l'approccio di cui sopra.
L'unico approccio incompatibile è quello di 'carozzare' il 'device' rederer, tipicamente un PC, al fine di consentire l'adozione di misure di contrasto al rumore rivelatesi efficaci in architetture stand alone come il cmp2.
Si tratta di scommettere che il 'saldo' tra il rumore prodotto da un renderer minimo e quello risultante da uno carozzato ma attrezzato di contromuisure adeguate sia positivo a favore di quest'ultimo.
Credo sia molto difficile, se non impossibile. Aggiungere per togliere non è quasi mai una buona pratica, mentre quello che non c'è non può far male.
Però...
Bisogna essere coerenti con il principio fino in fondo.
Al DAC arriva uno stream in formato PCM nella risoluzione (frequenza di campionamento e profondità in bit) selezionata, ipotizziamo per comodità 352800/32, ma potrebbe essere qualsiasi altra, partendo da un file su disco in un formato ed in una risoluzione potenzialmente differente, ipotizziamo FLAC 44100/16.
Per far si che il file venga convertito nello stream adatto al DAC occorre che venga efettuata:
a. conversione di formato da FLAC a PCM.
b. upsampling.
Ora, l'ordine in cui avvengono le due operazioni NON E' ININFLUENTE: convertire PRIMA dell'upsampling è molto più economico, in termini di risorse, che non farlo a valle: 16 volte tanto.
In un'architettura distribuita, come quelle di cui stiamo parlando, la scelta di utilizzare FLAC invece di WAV (PCM) è giustificata, oltre che per il minor uso di storage, soprattutto per il minor impiego di banda in trasmissione, a fronte di un 'leggero' appesantimento delle attività del renderer (posto ne sia capace).
A parte il fatto che proprio così leggero non è e su 'vecchi' microprocessori come quelli sullo SB3 aveva il suo effetto, il ragionamento regge SE non si fa nemmeno upsampling, dato che il risparmio di banda usando un flac rispetto ad un wav e circa del 30%, mentre l'upsampling porta ad un consumo maggiore del 1500%.
Quindi, la pratica di inviare FLAC dopo l'upsampling al renderer a mio avviso è controproducente perchè:
a. Occupa 16 volte la banda necessaria a trasferire il formato originario.
b. Impiega le risorse del rendere 16 volte di più rispetto alla conversione del file originario.
La semplice attenzione di convertire PRIMA di inviare non risolve il problema di banda (anzi lo peggiora del 30% circa), ma praticamente azzera le necessità di calcolo del renderer, consentendo la sua configurazione minima.
Però...
Posto che la scelta del renderer deve a mio avviso essere fatta in ottica minimalista, con il minimo di compromessi qualitativi possibili, attualmente la scelta cade probabilmente su SOC/NUC o mini pc con capacità elaborative significative:
Le prove di DacPassion hanno evidenziato che il resampling sul suo fultro aggiunge il 2% di lavoro di CPU, sempre sotto il 10%
In queste condizioni, quando il Renderer è già stato scelto e sarebbe comunque lì, credo che il 2% di lavoro di CPU in più sposti poco in termini di rumore generato, mentre cambia di parecchio l'occupazione di banda, consentendo al server di inviare nel formato orginario e quindi convertire e fare upsampling in locale.
La banda può essere più o meno importante, dipendentemente dalla configurazione di rete, ma io non sarei così certo che un intenso lavoro dell'interfaccia di rete (16x) e di tutto quanto ne consegue nel renderer sia preferibile in termini di rumore, rispetto ad un 2% di CPU.
Bisognerebbe verificare e misurare e qui lascio il campo ad altri, certo che per molti (me compreso) attrezzarsi per una banda disponibile 16 volte l'attuale sarebbe difficile ed imporrebbe compromessi, almeno in questi casi mi sembra un'opzione da non sottovalutare.
Sarebbe interessante che chi è attrezzato per farlo postasse le sue impressioni a confronto nelle due diverse configurazioni.
Cosa ne dite?
Ultima modifica di marcoc1712 : 26-03-2015 a 12:32
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
Forse la strada migliore è "quella di mezzo" ?
Convertire da flac in pcm nel server e lasciare l'upsampling nel render?
Se non erro questa sarebbe la stringa per togliersi la curiosità della prova giusto?
flc pcm * *
# FT:{START=--skip=%t}U:{END=--until=%v}
[flac] -dcs --force-raw-format --endian=little --sign=signed $START$ $END$ -- $FILE$
è corretto quello che ottengo? Tutti i file flac vengono convertiti in pcm giusto?
![]()
Ultima modifica di DacPassion : 26-03-2015 a 12:40
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
Dovrebbe essere attivo....
ma mi sorge un dubbio...LMS fa conversione flac>pcm...che succede quando arriva lo stream a sqeezelite? fa solo il resample?
Ci sono attualmente 1 utenti che stanno visualizzando questa discussione. (0 utenti e 1 ospiti)