Cette page documente la syntaxe des modèles de chaînes personnalisés Symfonium et les listes de champs disponibles dans chaque contexte.
Elle est organisée ainsi :
- Syntaxe commune des modèles : variables, blocs conditionnels, conditions/opérateurs, formatage de texte, règles d’échappement et libellés
string.*localisés globaux - Sections propres à chaque contexte :
- Lecture en cours : fonctionnalités supplémentaires (
\t,\o, champsnext., champschapter.*) et liste complète des champs de lecture en cours - Sous-titre d’album : champs au niveau de l’album disponibles sur les pages d’album
- Sous-titre d’artiste : champs au niveau de l’artiste disponibles sur les pages d’artiste
- Lecture en cours : fonctionnalités supplémentaires (
Syntaxe commune des modèles (fonctionne partout)
Section intitulée « Syntaxe commune des modèles (fonctionne partout) »Variables de base
Section intitulée « Variables de base »Syntaxe : %fieldname%
- Remplace
%fieldname%par la valeur du champ - Si le champ est vide ou manquant, rien n’est affiché
Exemples :
| Modèle | Résultat d’exemple |
|---|---|
%title% par %artist% | Seven Nation Army par The White Stripes |
%album% (%year%) | Thriller (1982) |
%composer% ● %artist% | Ludwig van Beethoven ● Berliner Philharmoniker |
%artist%%lb%%composer% | Berliner Philharmoniker |
%lb% est un saut de ligne.
Blocs conditionnels
Section intitulée « Blocs conditionnels »Utilisez des blocs pour afficher une ponctuation ou un libellé uniquement lorsqu’une valeur existe ou lorsqu’une condition correspond.
Syntaxe : { ... }
- Un bloc
{ ... }est affiché uniquement si sa première variable correspond :- soit à un champ non vide
- soit à une variable de condition vraie (
%|condition%)
- Vous pouvez inclure plusieurs variables et du texte littéral dans le même bloc
{ ... }, mais seule la première variable détermine si le bloc est affiché - Placez les espaces nécessaires dans le bloc, par exemple
{ par %artist%}
Bloc conditionnel basé sur un champ
Section intitulée « Bloc conditionnel basé sur un champ »Exemples :
| Modèle | Résultat d’exemple | Si le champ est vide |
|---|---|---|
%title%{ par %artist%} | Seven Nation Army par The White Stripes | Seven Nation Army |
%album%{ (%year%)} | Thriller (1982) | Thriller |
{%composer% ● }%artist% | Beethoven ● Berliner Philharmoniker | Berliner Philharmoniker |
Bloc conditionnel basé sur une condition
Section intitulée « Bloc conditionnel basé sur une condition »Utilisez %|condition% comme première variable pour conditionner un bloc sans afficher de valeur.
Exemple :
{%|format.samplerate>"48"% Hi-Res: %format.codec%}Affiche Hi-Res: FLAC uniquement si format.samplerate > 48.
Sauts de ligne dans { ... }
Section intitulée « Sauts de ligne dans { ... } »Utilisez \n dans les blocs conditionnels :
%album%{\n(%year%)}En dehors de { ... }, préférez %lb% pour les sauts de ligne.
Conditions dans les variables
Section intitulée « Conditions dans les variables »Syntaxe : %field|condition%
Affiche le champ uniquement si la condition est vraie.
Ce que vous pouvez comparer :
- Le nom d’un autre champ, par exemple
artist,composer,year - Une chaîne ou un nombre littéral entre guillemets, par exemple
"2012","Rock","256"
Remarques sur les valeurs littérales :
trackdésigne le champ track"track"désigne le texte littéraltrack- Les guillemets peuvent apparaître dans les valeurs. Assurez-vous que la valeur littérale commence et se termine par
"
Exemples :
%year|year>"2012"%%composer|composer!=artist%%composer|genre=="Classical"%Opérateurs
Section intitulée « Opérateurs »| Opérateur | Signification | Exemple | Notes |
|---|---|---|---|
== | égal à | genre=="Classical" / artist==composer | |
!= | différent de | artist!="Metallica" | |
+= | contient | genre+="Rock" | fonctionne avec une valeur littérale ou un autre champ |
-= | ne contient pas | mood-="depressing" | |
> | supérieur à | year>"1999" | utilisez des guillemets pour les nombres littéraux |
< | inférieur à | duration<"500" | la durée est en secondes |
==empty | est vide | year==empty | empty est réservé |
!=empty | n’est pas vide | composer!=empty | empty est réservé |
[] | dans la plage | bpm[]"0".."100" | bornes incluses |
Conditions multiples, mélange de && / || et parenthèses
Section intitulée « Conditions multiples, mélange de && / || et parenthèses »- Utilisez
&&pour ET - Utilisez
||pour OU - Vous pouvez mélanger
&&et||dans la même condition - Utilisez des parenthèses
(...)pour contrôler la priorité d’évaluation
Exemple :
%format|format.bitdepth!=empty && (format.samplerate>"48" || format.bitdepth>"24")%Cela affiche %format% uniquement lorsque la profondeur de bits existe et que l’une des conditions suivantes est vraie :
- la fréquence d’échantillonnage est supérieure à 48
- la profondeur de bits est supérieure à 24
Balises de formatage de texte en ligne
Section intitulée « Balises de formatage de texte en ligne »**Gras**__Souligné__~~Barré~~//Italique//^^MAJUSCULES^^Libellés localisés (string.*)
Section intitulée « Libellés localisés (string.*) »Ces variables renvoient des chaînes traduites dans la langue de l’utilisateur :
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
Lecture en cours (compacte & développée)
Section intitulée « Lecture en cours (compacte & développée) »Les modèles de lecture en cours peuvent accéder à :
- les métadonnées du titre
- l’état de lecture
- l’état de la file
- l’état du chapitre
- le format audio
- les informations d’égaliseur / lecteur
- et plus encore
Fonctions propres à la lecture en cours
Section intitulée « Fonctions propres à la lecture en cours »Séparer en plusieurs segments avec \t
Section intitulée « Séparer en plusieurs segments avec \t »Utilisez \t pour séparer un modèle en plusieurs segments.
Exemple :
%player.position%\t%format%\t%player.duration%Avec un espace d’alignement horizontal entre les segments, cela affiche généralement :
- gauche : position
- centre : format
- droite : durée
Superposition de protection sélective avec \o
Section intitulée « Superposition de protection sélective avec \o »Utilisez \o pour appliquer une superposition de protection uniquement à cette partie, même si la chaîne complète n’est pas protégée.
Préfixe next.
Section intitulée « Préfixe next. »Ajoutez next. avant les champs de données d’élément pour faire référence à l’élément suivant de la file :
%next.title%Pour les champs de chapitre, next.chapter.* fait référence au chapitre suivant.
Champs pris en charge (lecture en cours)
Section intitulée « Champs pris en charge (lecture en cours) »Métadonnées du titre / de l’album
Section intitulée « Métadonnées du titre / de l’album »titletitle.rawcleantitle(titre sans numéro de piste ajouté ni symbole explicite)artistalbumalbum.rawalbum.versionalbum.type(également appelé Release Type)albumartistalbum.tagsalbum.titlealbum.title.rawalbum.title.versioncomposeryearreleasedateoriginaldatereleasedate.yearoriginaldate.yeartrackdiscdisctitledurationduration.seconds(secondes totales)duration.d(ajoutez .nz pour masquer si la valeur est zéro)duration.h(ajoutez .nz pour masquer si la valeur est zéro)duration.m(ajoutez .nz pour masquer si la valeur est zéro)duration.s(ajoutez .nz pour masquer si la valeur est zéro)duration.dd(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)duration.hh(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)duration.mm(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)duration.ss(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)bpmgenrestylemoodoccasiongroupinglanguagecommentworkmovement.namemovement.numbermovement.number.romanmediatypeprovidernameofflinestatusexplicitfavoriteuserratingratinguserrating.5(normalisé sur 5 étoiles)rating.5(normalisé sur 5 étoiles)track.tagsoriginal.artistoriginal.albumfilepathfilenamelastplayedlastSkippedisaudiobookplaycountskipcount
Lecture / lecteur
Section intitulée « Lecture / lecteur »player.positionplayer.durationplayer.remainingplayer.position.secondsplayer.duration.secondsplayer.remaining.secondsplayer.pausedplayer.repeat.modeplayer.shuffle.modevolume.currentsleep.timersleep.timer.secondssleep.timer.eos
File / fonctions intelligentes
Section intitulée « File / fonctions intelligentes »queue.positionqueue.sizequeue.namesmartqueuesmartflowradio.mode(1 si issu de Smart Queue, 2+ si issu de Smart Flow)
Chapitres
Section intitulée « Chapitres »chapter.countchapter.indexchapter.titlechapter.positionchapter.position.secondschapter.position.d(ajoutez .nz pour masquer si la valeur est zéro)chapter.position.h(ajoutez .nz pour masquer si la valeur est zéro)chapter.position.m(ajoutez .nz pour masquer si la valeur est zéro)chapter.position.s(ajoutez .nz pour masquer si la valeur est zéro)chapter.position.dd(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.position.hh(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.position.mm(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.position.ss(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.remainingchapter.remaining.secondschapter.remaining.d(ajoutez .nz pour masquer si la valeur est zéro)chapter.remaining.h(ajoutez .nz pour masquer si la valeur est zéro)chapter.remaining.m(ajoutez .nz pour masquer si la valeur est zéro)chapter.remaining.s(ajoutez .nz pour masquer si la valeur est zéro)chapter.remaining.dd(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.remaining.hh(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.remaining.mm(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.remaining.ss(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.durationchapter.duration.secondschapter.duration.d(ajoutez .nz pour masquer si la valeur est zéro)chapter.duration.h(ajoutez .nz pour masquer si la valeur est zéro)chapter.duration.m(ajoutez .nz pour masquer si la valeur est zéro)chapter.duration.s(ajoutez .nz pour masquer si la valeur est zéro)chapter.duration.dd(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.duration.hh(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.duration.mm(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.duration.ss(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.all.positionchapter.all.position.secondschapter.all.position.d(ajoutez .nz pour masquer si la valeur est zéro)chapter.all.position.h(ajoutez .nz pour masquer si la valeur est zéro)chapter.all.position.m(ajoutez .nz pour masquer si la valeur est zéro)chapter.all.position.s(ajoutez .nz pour masquer si la valeur est zéro)chapter.all.position.dd(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.all.position.hh(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.all.position.mm(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.all.position.ss(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.all.remainingchapter.all.remaining.secondschapter.all.remaining.d(ajoutez .nz pour masquer si la valeur est zéro)chapter.all.remaining.h(ajoutez .nz pour masquer si la valeur est zéro)chapter.all.remaining.m(ajoutez .nz pour masquer si la valeur est zéro)chapter.all.remaining.s(ajoutez .nz pour masquer si la valeur est zéro)chapter.all.remaining.dd(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.all.remaining.hh(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.all.remaining.mm(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.all.remaining.ss(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.all.durationchapter.all.duration.secondschapter.all.duration.d(ajoutez .nz pour masquer si la valeur est zéro)chapter.all.duration.h(ajoutez .nz pour masquer si la valeur est zéro)chapter.all.duration.m(ajoutez .nz pour masquer si la valeur est zéro)chapter.all.duration.s(ajoutez .nz pour masquer si la valeur est zéro)chapter.all.duration.dd(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.all.duration.hh(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.all.duration.mm(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)chapter.all.duration.ss(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)
Format / informations audio
Section intitulée « Format / informations audio »formatformat.bitrateformat.bitrate.rawformat.samplerateformat.samplerate.rawformat.bitdepthformat.codecformat.bitandsampleformat.channels
Égaliseur / sortie / lecteur
Section intitulée « Égaliseur / sortie / lecteur »eq.profileeq.configoutput.currentrenderer.currentrenderer.type
Utilitaires
Section intitulée « Utilitaires »lb(saut de ligne)bool1bool2bool3bool4bool5
Exemples pour la lecture en cours
Section intitulée « Exemples pour la lecture en cours »bloc de titre propre sur deux lignes
Section intitulée « bloc de titre propre sur deux lignes »%title%%lb%{par %artist%}album + année uniquement si l’année existe
Section intitulée « album + année uniquement si l’année existe »%album%{ (%year%)}Compositeur ● Artiste uniquement si le compositeur existe
Section intitulée « Compositeur ● Artiste uniquement si le compositeur existe »{%composer% ● }%artist%ligne en trois parties avec \t (position / format / durée)
Section intitulée « ligne en trois parties avec \t (position / format / durée) »%player.position%\t%format%\t%player.duration%afficher Hi-Res uniquement pour une fréquence d’échantillonnage élevée
Section intitulée « afficher Hi-Res uniquement pour une fréquence d’échantillonnage élevée »{%|format.samplerate>"48"% Hi-Res: %format.codec%}afficher le périphérique de sortie actif (Android ou autre lecteur)
Section intitulée « afficher le périphérique de sortie actif (Android ou autre lecteur) »{ %output.current|renderer.type=="Android"%}{ %renderer.current|renderer.type!="Android"%}indicateur de qualité de style Apple basculable (utilise bool1)
Section intitulée « indicateur de qualité de style Apple basculable (utilise 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"%}Si vous associez une action toggle bool1 à la chaîne personnalisée, elle alterne entre :
- l’affichage de
%format%lorsquebool1vaut true - l’affichage de l’indicateur de style Apple lorsque
bool1vaut false
afficher le volume actuel
Section intitulée « afficher le volume actuel »Vol. %volume.current%%titre du chapitre actuel avec index
Section intitulée « titre du chapitre actuel avec index »{%chapter.index% - }%chapter.title%temps écoulé / restant du chapitre actuel
Section intitulée « temps écoulé / restant du chapitre actuel »%chapter.position%\t%chapter.title%\t%chapter.remaining%progression complète du livre audio par rapport au premier chapitre
Section intitulée « progression complète du livre audio par rapport au premier chapitre »%chapter.all.position%\t%chapter.all.duration%titre du chapitre suivant
Section intitulée « titre du chapitre suivant »%next.chapter.title%valeurs brutes du format
Section intitulée « valeurs brutes du format »%format.codec% • %format.bitdepth%/%format.samplerate.raw% • %format.bitrate.raw%Sous-titre d’album (page Album)
Section intitulée « Sous-titre d’album (page Album) »Les pages d’album exposent généralement les métadonnées au niveau de l’album, pas l’état de la file ou du lecteur. Vous pouvez utiliser la même syntaxe commune des modèles.
Champs pris en charge (sous-titre d’album)
Section intitulée « Champs pris en charge (sous-titre d’album) »titletitle.rawversiontagstypestatuscomposerartistyeardurationduration.seconds(secondes totales)duration.d(ajoutez .nz pour masquer si la valeur est zéro)duration.h(ajoutez .nz pour masquer si la valeur est zéro)duration.m(ajoutez .nz pour masquer si la valeur est zéro)duration.s(ajoutez .nz pour masquer si la valeur est zéro)duration.dd(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)duration.hh(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)duration.mm(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)duration.ss(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)genrestylemoodlanguageprovidernameofflinestatusoccasionmediatypegroupingexplicitreleasedateoriginaldatereleasedate.yearoriginaldate.yearlastplayedlastSkippeduserratingratinguserrating.5rating.5favoritesong.countplaycountskipcountdescriptionformatformat.bitrateformat.channelsformat.samplerateformat.bitdepthformat.codecformat.bitandsampleformat.bitrate.rawformat.samplerate.rawlb
Exemples de sous-titre d’album
Section intitulée « Exemples de sous-titre d’album »titre d’album + version uniquement si la version existe
Section intitulée « titre d’album + version uniquement si la version existe »%title%{ — %version%}ligne année + genre en ignorant les parties manquantes
Section intitulée « ligne année + genre en ignorant les parties manquantes »%year%{ • %genre%}note affichée uniquement si l’utilisateur a noté l’élément
Section intitulée « note affichée uniquement si l’utilisateur a noté l’élément »{★ %userrating.5%/5%|userrating!=empty%}indicateur Téléchargé
Section intitulée « indicateur Téléchargé »{⬇ Hors ligne%|offlinestatus!=empty%}Sous-titre d’artiste (page Artiste)
Section intitulée « Sous-titre d’artiste (page Artiste) »Les pages d’artiste exposent généralement les métadonnées au niveau de l’artiste et les statistiques de bibliothèque. Vous pouvez utiliser la même syntaxe commune des modèles.
Champs pris en charge (sous-titre d’artiste)
Section intitulée « Champs pris en charge (sous-titre d’artiste) »titletitle.rawversiontagstypegenderdurationduration.seconds(secondes totales)duration.d(ajoutez .nz pour masquer si la valeur est zéro)duration.h(ajoutez .nz pour masquer si la valeur est zéro)duration.m(ajoutez .nz pour masquer si la valeur est zéro)duration.s(ajoutez .nz pour masquer si la valeur est zéro)duration.dd(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)duration.hh(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)duration.mm(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)duration.ss(complété par des zéros, ajoutez .nz pour masquer si la valeur est zéro)genrestylemoodsong.countalbum.countinstrumentprovidernameofflinestatuslastplayeduserratinguserrating.5favoriteplaycountdescriptionlb
Exemples de sous-titre d’artiste
Section intitulée « Exemples de sous-titre d’artiste »afficher les compteurs avec des libellés
Section intitulée « afficher les compteurs avec des libellés »%song.count% titres{ • %album.count% albums}ligne genre / style
Section intitulée « ligne genre / style »%genre%{ • %style%}afficher le badge Favori uniquement si l’élément est favori
Section intitulée « afficher le badge Favori uniquement si l’élément est favori »{♥ Favori%|favorite!=empty%}instrument sur une nouvelle ligne
Section intitulée « instrument sur une nouvelle ligne »%title%{\n%instrument%}