Questa pagina documenta la sintassi dei modelli di stringa personalizzati di Symfonium e gli elenchi di campi disponibili in ogni contesto.
È organizzata nelle sezioni seguenti:
- Sintassi comune dei modelli: segnaposto, blocchi condizionali, condizioni e operatori, formattazione del testo, regole di escape ed etichette globali localizzate
string.*. - Sezioni specifiche del contesto:
- Riproduzione in corso: funzioni aggiuntive (
\t,\o, campinext.e campichapter.*) ed elenco completo dei campi di Riproduzione in corso. - Sottotitolo dell’album: campi a livello di album disponibili nelle pagine degli album.
- Sottotitolo dell’artista: campi a livello di artista disponibili nelle pagine degli artisti.
- Riproduzione in corso: funzioni aggiuntive (
Sintassi comune dei modelli (funziona ovunque)
Sezione intitolata “Sintassi comune dei modelli (funziona ovunque)”Segnaposto di base
Sezione intitolata “Segnaposto di base”Sintassi: %fieldname%
- Sostituisce
%fieldname%con il valore del campo. - Se il campo è vuoto o mancante, non viene mostrato nulla.
Esempi:
| Modello | Risultato di esempio |
|---|---|
%title% by %artist% | Seven Nation Army di The White Stripes |
%album% (%year%) | Thriller (1982) |
%composer% ● %artist% | Ludwig van Beethoven ● Berliner Philharmoniker |
%artist%%lb%%composer% | Berliner Philharmoniker |
%lb% è un’interruzione di riga.
Blocchi condizionali
Sezione intitolata “Blocchi condizionali”Usa i blocchi per mostrare punteggiatura o etichette solo quando esiste un valore o una condizione è soddisfatta.
Sintassi: { ... }
- Un blocco
{ ... }viene mostrato solo se il primo segnaposto corrisponde:- a un campo non vuoto;
- oppure a un segnaposto di condizione vera (
%|condition%).
- Puoi includere più segnaposto e testo letterale nello stesso blocco
{ ... }, ma solo il primo segnaposto determina se il blocco viene mostrato. - Inserisci gli spazi necessari all’interno del blocco, ad esempio
{ by %artist%}.
Blocco condizionale basato su un campo
Sezione intitolata “Blocco condizionale basato su un campo”Esempi:
| Modello | Risultato di esempio | Se il campo è vuoto |
|---|---|---|
%title%{ by %artist%} | Seven Nation Army di The White Stripes | Seven Nation Army |
%album%{ (%year%)} | Thriller (1982) | Thriller |
{%composer% ● }%artist% | Beethoven ● Berliner Philharmoniker | Berliner Philharmoniker |
Blocco condizionale basato su una condizione
Sezione intitolata “Blocco condizionale basato su una condizione”Usa %|condition% come primo segnaposto per controllare un blocco senza visualizzare un valore.
Esempio:
{%|format.samplerate>"48"% Hi-Res: %format.codec%}Mostra Hi-Res: FLAC solo se format.samplerate > 48.
Interruzioni di riga all’interno di { ... }
Sezione intitolata “Interruzioni di riga all’interno di { ... }”Usa \n nei blocchi condizionali:
%album%{\n(%year%)}All’esterno di { ... }, usa preferibilmente %lb% per le interruzioni di riga.
Condizioni nei segnaposto
Sezione intitolata “Condizioni nei segnaposto”Sintassi: %field|condition%
Mostra il campo solo se la condizione è vera.
Puoi confrontare:
- il nome di un altro campo, ad esempio
artist,composeroyear; - una stringa o un numero letterale tra virgolette, ad esempio
"2012","Rock"o"256".
Note sui valori letterali:
trackindica il campo track."track"indica il testo letteraletrack.- Le virgolette possono comparire nei valori. Assicurati che il valore letterale inizi e termini con
".
Esempi:
%year|year>"2012"%%composer|composer!=artist%%composer|genre=="Classical"%Operatori
Sezione intitolata “Operatori”| Operatore | Significato | Esempio | Note |
|---|---|---|---|
== | uguale a | genre=="Classical" / artist==composer | |
!= | diverso da | artist!="Metallica" | |
+= | contiene | genre+="Rock" | funziona con un valore letterale o un altro campo |
-= | non contiene | mood-="depressing" | |
> | maggiore di | year>"1999" | usa le virgolette per i numeri letterali |
< | minore di | duration<"500" | la durata è espressa in secondi |
==empty | è vuoto | year==empty | empty è riservato |
!=empty | non è vuoto | composer!=empty | empty è riservato |
[] | nell’intervallo | bpm[]"0".."100" | limiti inclusivi |
Più condizioni, combinazioni di && / || e parentesi
Sezione intitolata “Più condizioni, combinazioni di && / || e parentesi”- Usa
&&per AND. - Usa
||per OR. - Puoi combinare
&&e||nella stessa condizione. - Usa le parentesi
(...)per controllare la priorità di valutazione.
Esempio:
%format|format.bitdepth!=empty && (format.samplerate>"48" || format.bitdepth>"24")%Questo mostra %format% solo quando esiste la profondità in bit e almeno una delle condizioni seguenti è vera:
- la frequenza di campionamento è maggiore di 48;
- la profondità in bit è maggiore di 24.
Marcatori di formattazione del testo in linea
Sezione intitolata “Marcatori di formattazione del testo in linea”**Bold**__Underline__~~Strike~~//Italics//^^CAPS^^Etichette localizzate (string.*)
Sezione intitolata “Etichette localizzate (string.*)”Questi segnaposto restituiscono stringhe tradotte nella lingua dell’utente:
string.hiresstring.losslessstring.lossystring.hires.losslessstring.low.qualitystring.high.qualitystring.high.efficiencystring.time.unit.day.shortstring.time.unit.hour.shortstring.time.unit.minute.shortstring.time.unit.second.shortstring.time.unit.day.onestring.time.unit.day.otherstring.time.unit.hour.onestring.time.unit.hour.otherstring.time.unit.minute.onestring.time.unit.minute.otherstring.time.unit.second.onestring.time.unit.second.otherstring.track.onestring.track.otherstring.album.onestring.album.other
Riproduzione in corso (compatta ed espansa)
Sezione intitolata “Riproduzione in corso (compatta ed espansa)”I modelli di Riproduzione in corso possono accedere a:
- metadati della traccia;
- stato della riproduzione;
- stato della coda;
- stato dei capitoli;
- formato audio;
- informazioni su EQ e renderer;
- altri dati.
Funzioni disponibili solo in Riproduzione in corso
Sezione intitolata “Funzioni disponibili solo in Riproduzione in corso”Suddividere in più segmenti con \t
Sezione intitolata “Suddividere in più segmenti con \t”Usa \t per suddividere un modello in più segmenti.
Esempio:
%player.position%\t%format%\t%player.duration%Con l’allineamento orizzontale distribuito, il risultato tipico è:
- a sinistra: posizione;
- al centro: formato;
- a destra: durata.
Overlay di protezione selettivo con \o
Sezione intitolata “Overlay di protezione selettivo con \o”Usa \o per applicare un overlay di protezione solo a quella parte, anche se la stringa completa non è protetta.
Prefisso next.
Sezione intitolata “Prefisso next.”Aggiungi next. prima dei campi dei dati dell’elemento per fare riferimento all’elemento successivo nella coda:
%next.title%Per i campi dei capitoli, next.chapter.* fa riferimento al capitolo successivo.
Campi supportati (Riproduzione in corso)
Sezione intitolata “Campi supportati (Riproduzione in corso)”Metadati di tracce e album
Sezione intitolata “Metadati di tracce e album”titletitle.rawcleantitle(titolo senza numero di traccia aggiunto né simbolo di contenuto esplicito)artistalbumalbum.rawalbum.versionalbum.type(noto anche come Release Type)albumartistalbum.tagsalbum.titlealbum.title.rawalbum.title.versioncomposeryearreleasedateoriginaldatereleasedate.yearoriginaldate.yeartrackdiscdisctitledurationduration.seconds(secondi totali)duration.d(aggiungi .nz per nascondere il valore se è zero)duration.h(aggiungi .nz per nascondere il valore se è zero)duration.m(aggiungi .nz per nascondere il valore se è zero)duration.s(aggiungi .nz per nascondere il valore se è zero)duration.dd(completato con zeri; aggiungi .nz per nasconderlo se è zero)duration.hh(completato con zeri; aggiungi .nz per nasconderlo se è zero)duration.mm(completato con zeri; aggiungi .nz per nasconderlo se è zero)duration.ss(completato con zeri; aggiungi .nz per nasconderlo se è zero)bpmgenrestylemoodoccasiongroupinglanguagecommentworkmovement.namemovement.numbermovement.number.romanmediatypeprovidernameofflinestatusexplicitfavoriteuserratingratinguserrating.5(normalizzato su 5 stelle)rating.5(normalizzato su 5 stelle)track.tagsoriginal.artistoriginal.albumfilepathfilenamelastplayedlastSkippedisaudiobookplaycountskipcount
Riproduzione / player
Sezione intitolata “Riproduzione / player”player.positionplayer.durationplayer.remainingplayer.position.secondsplayer.duration.secondsplayer.remaining.secondsplayer.pausedplayer.repeat.modeplayer.shuffle.modevolume.currentsleep.timersleep.timer.secondssleep.timer.eos
Coda / funzioni smart
Sezione intitolata “Coda / funzioni smart”queue.positionqueue.sizequeue.namesmartqueuesmartflowradio.mode(1 se proviene da Coda smart, 2 o più se proviene da Smart Flow)
Capitoli
Sezione intitolata “Capitoli”chapter.countchapter.indexchapter.titlechapter.positionchapter.position.secondschapter.position.d(aggiungi .nz per nascondere il valore se è zero)chapter.position.h(aggiungi .nz per nascondere il valore se è zero)chapter.position.m(aggiungi .nz per nascondere il valore se è zero)chapter.position.s(aggiungi .nz per nascondere il valore se è zero)chapter.position.dd(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.position.hh(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.position.mm(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.position.ss(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.remainingchapter.remaining.secondschapter.remaining.d(aggiungi .nz per nascondere il valore se è zero)chapter.remaining.h(aggiungi .nz per nascondere il valore se è zero)chapter.remaining.m(aggiungi .nz per nascondere il valore se è zero)chapter.remaining.s(aggiungi .nz per nascondere il valore se è zero)chapter.remaining.dd(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.remaining.hh(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.remaining.mm(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.remaining.ss(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.durationchapter.duration.secondschapter.duration.d(aggiungi .nz per nascondere il valore se è zero)chapter.duration.h(aggiungi .nz per nascondere il valore se è zero)chapter.duration.m(aggiungi .nz per nascondere il valore se è zero)chapter.duration.s(aggiungi .nz per nascondere il valore se è zero)chapter.duration.dd(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.duration.hh(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.duration.mm(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.duration.ss(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.all.positionchapter.all.position.secondschapter.all.position.d(aggiungi .nz per nascondere il valore se è zero)chapter.all.position.h(aggiungi .nz per nascondere il valore se è zero)chapter.all.position.m(aggiungi .nz per nascondere il valore se è zero)chapter.all.position.s(aggiungi .nz per nascondere il valore se è zero)chapter.all.position.dd(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.all.position.hh(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.all.position.mm(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.all.position.ss(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.all.remainingchapter.all.remaining.secondschapter.all.remaining.d(aggiungi .nz per nascondere il valore se è zero)chapter.all.remaining.h(aggiungi .nz per nascondere il valore se è zero)chapter.all.remaining.m(aggiungi .nz per nascondere il valore se è zero)chapter.all.remaining.s(aggiungi .nz per nascondere il valore se è zero)chapter.all.remaining.dd(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.all.remaining.hh(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.all.remaining.mm(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.all.remaining.ss(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.all.durationchapter.all.duration.secondschapter.all.duration.d(aggiungi .nz per nascondere il valore se è zero)chapter.all.duration.h(aggiungi .nz per nascondere il valore se è zero)chapter.all.duration.m(aggiungi .nz per nascondere il valore se è zero)chapter.all.duration.s(aggiungi .nz per nascondere il valore se è zero)chapter.all.duration.dd(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.all.duration.hh(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.all.duration.mm(completato con zeri; aggiungi .nz per nasconderlo se è zero)chapter.all.duration.ss(completato con zeri; aggiungi .nz per nasconderlo se è zero)
Formato / informazioni audio
Sezione intitolata “Formato / informazioni audio”formatformat.bitrateformat.bitrate.rawformat.samplerateformat.samplerate.rawformat.bitdepthformat.codecformat.bitandsampleformat.channels
EQ / uscita / renderer
Sezione intitolata “EQ / uscita / renderer”eq.profileeq.configoutput.currentrenderer.currentrenderer.type
Utilità
Sezione intitolata “Utilità”lb(interruzione di riga)bool1bool2bool3bool4bool5
Esempi per Riproduzione in corso
Sezione intitolata “Esempi per Riproduzione in corso”Blocco pulito del titolo su due righe
Sezione intitolata “Blocco pulito del titolo su due righe”%title%%lb%{by %artist%}Album e anno solo se l’anno esiste
Sezione intitolata “Album e anno solo se l’anno esiste”%album%{ (%year%)}Composer ● Artist solo quando esiste il compositore
Sezione intitolata “Composer ● Artist solo quando esiste il compositore”{%composer% ● }%artist%Riga in tre parti con \t (posizione / formato / durata)
Sezione intitolata “Riga in tre parti con \t (posizione / formato / durata)”%player.position%\t%format%\t%player.duration%Mostrare Hi-Res solo con una frequenza di campionamento elevata
Sezione intitolata “Mostrare Hi-Res solo con una frequenza di campionamento elevata”{%|format.samplerate>"48"% Hi-Res: %format.codec%}Mostrare il dispositivo di uscita attivo (Android o altro renderer)
Sezione intitolata “Mostrare il dispositivo di uscita attivo (Android o altro renderer)”{ %output.current|renderer.type=="Android"%}{ %renderer.current|renderer.type!="Android"%}Indicatore di qualità in stile Apple attivabile e disattivabile (usa bool1)
Sezione intitolata “Indicatore di qualità in stile Apple attivabile e disattivabile (usa bool1)”ⓘ {%format|bool1=="true"%}{Dolby Atmos %|format.channels>"2" && bool1=="false"%}{%string.high.efficiency|format.bitrate>"10" && format.bitrate<"256" && format.bitdepth==empty && bool1=="false"%}{%string.high.quality|format.bitrate>"255" && format.bitrate<"321" && format.bitdepth==empty && bool1=="false"%}{%string.lossless|format.bitdepth[]"16".."24" && format.samplerate<"49" && bool1=="false"%}{%string.hires.lossless|format.bitdepth[]"16".."32" && format.samplerate>"48" && bool1=="false"%}Se associ un’azione toggle bool1 alla stringa personalizzata, questa alterna tra:
- la visualizzazione di
%format%quandobool1è true; - la visualizzazione dell’indicatore in stile Apple quando
bool1è false.
Mostrare il volume corrente
Sezione intitolata “Mostrare il volume corrente”Vol %volume.current%%Titolo del capitolo corrente con indice
Sezione intitolata “Titolo del capitolo corrente con indice”{%chapter.index% - }%chapter.title%Tempo trascorso / rimanente del capitolo corrente
Sezione intitolata “Tempo trascorso / rimanente del capitolo corrente”%chapter.position%\t%chapter.title%\t%chapter.remaining%Avanzamento completo dell’audiolibro rispetto al primo capitolo
Sezione intitolata “Avanzamento completo dell’audiolibro rispetto al primo capitolo”%chapter.all.position%\t%chapter.all.duration%Titolo del capitolo successivo
Sezione intitolata “Titolo del capitolo successivo”%next.chapter.title%Valori grezzi del formato
Sezione intitolata “Valori grezzi del formato”%format.codec% • %format.bitdepth%/%format.samplerate.raw% • %format.bitrate.raw%Sottotitolo dell’album (pagina Album)
Sezione intitolata “Sottotitolo dell’album (pagina Album)”Le pagine degli album espongono normalmente metadati a livello di album, non lo stato della coda o del player. Puoi usare la stessa sintassi comune dei modelli.
Campi supportati (sottotitolo dell’album)
Sezione intitolata “Campi supportati (sottotitolo dell’album)”titletitle.rawversiontagstypestatuscomposerartistyeardurationduration.seconds(secondi totali)duration.d(aggiungi .nz per nascondere il valore se è zero)duration.h(aggiungi .nz per nascondere il valore se è zero)duration.m(aggiungi .nz per nascondere il valore se è zero)duration.s(aggiungi .nz per nascondere il valore se è zero)duration.dd(completato con zeri; aggiungi .nz per nasconderlo se è zero)duration.hh(completato con zeri; aggiungi .nz per nasconderlo se è zero)duration.mm(completato con zeri; aggiungi .nz per nasconderlo se è zero)duration.ss(completato con zeri; aggiungi .nz per nasconderlo se è zero)genrestylemoodlanguageprovidernameofflinestatusoccasionmediatypegroupingexplicitreleasedateoriginaldatereleasedate.yearoriginaldate.yearlastplayedlastSkippeduserratingratinguserrating.5rating.5favoritesong.countplaycountskipcountdescriptionformatformat.bitrateformat.channelsformat.samplerateformat.bitdepthformat.codecformat.bitandsampleformat.bitrate.rawformat.samplerate.rawlb
Esempi di sottotitolo dell’album
Sezione intitolata “Esempi di sottotitolo dell’album”Titolo dell’album e versione solo se la versione esiste
Sezione intitolata “Titolo dell’album e versione solo se la versione esiste”%title%{ — %version%}Riga con anno e genere che omette le parti mancanti
Sezione intitolata “Riga con anno e genere che omette le parti mancanti”%year%{ • %genre%}Valutazione mostrata solo se l’utente ha assegnato un voto
Sezione intitolata “Valutazione mostrata solo se l’utente ha assegnato un voto”{★ %userrating.5%/5%|userrating!=empty%}Indicatore Downloaded
Sezione intitolata “Indicatore Downloaded”{⬇ Offline%|offlinestatus!=empty%}Sottotitolo dell’artista (pagina Artista)
Sezione intitolata “Sottotitolo dell’artista (pagina Artista)”Le pagine degli artisti espongono normalmente metadati a livello di artista e statistiche della libreria. Puoi usare la stessa sintassi comune dei modelli.
Campi supportati (sottotitolo dell’artista)
Sezione intitolata “Campi supportati (sottotitolo dell’artista)”titletitle.rawversiontagstypegenderdurationduration.seconds(secondi totali)duration.d(aggiungi .nz per nascondere il valore se è zero)duration.h(aggiungi .nz per nascondere il valore se è zero)duration.m(aggiungi .nz per nascondere il valore se è zero)duration.s(aggiungi .nz per nascondere il valore se è zero)duration.dd(completato con zeri; aggiungi .nz per nasconderlo se è zero)duration.hh(completato con zeri; aggiungi .nz per nasconderlo se è zero)duration.mm(completato con zeri; aggiungi .nz per nasconderlo se è zero)duration.ss(completato con zeri; aggiungi .nz per nasconderlo se è zero)genrestylemoodsong.countalbum.countinstrumentprovidernameofflinestatuslastplayeduserratinguserrating.5favoriteplaycountdescriptionlb
Esempi di sottotitolo dell’artista
Sezione intitolata “Esempi di sottotitolo dell’artista”Mostrare i conteggi con le etichette
Sezione intitolata “Mostrare i conteggi con le etichette”%song.count% songs{ • %album.count% albums}Riga genere / stile
Sezione intitolata “Riga genere / stile”%genre%{ • %style%}Mostrare il badge Favorite solo per i preferiti
Sezione intitolata “Mostrare il badge Favorite solo per i preferiti”{♥ Favorite%|favorite!=empty%}Strumento su una nuova riga
Sezione intitolata “Strumento su una nuova riga”%title%{\n%instrument%}