Esta página documenta la sintaxis de las plantillas de cadena personalizadas de Symfonium y las listas de campos disponibles en cada contexto.
Está organizada en:
- Sintaxis común de plantillas: marcadores, bloques condicionales, condiciones/operadores, formato de texto, reglas de escape y etiquetas localizadas globales
string.* - Secciones específicas por contexto:
- En reproducción: funciones adicionales (
\t,\o, camposnext., camposchapter.*) y la lista completa de campos de En reproducción - Subtítulo de álbum: campos de nivel de álbum disponibles en páginas de álbum
- Subtítulo de artista: campos de nivel de artista disponibles en páginas de artista
- En reproducción: funciones adicionales (
Sintaxis común de plantillas (funciona en todas partes)
Sección titulada «Sintaxis común de plantillas (funciona en todas partes)»Marcadores básicos
Sección titulada «Marcadores básicos»Sintaxis: %fieldname%
- Sustituye
%fieldname%por el valor del campo - Si el campo está vacío o no existe, no se muestra nada
Ejemplos:
| Plantilla | Resultado de ejemplo |
|---|---|
%title% de %artist% |
Seven Nation Army de The White Stripes |
%album% (%year%) |
Thriller (1982) |
%composer% ● %artist% |
Ludwig van Beethoven ● Berliner Philharmoniker |
%artist%%lb%%composer% |
Berliner Philharmoniker Ludwig van Beethoven |
%lb% es un salto de línea.
Bloques condicionales
Sección titulada «Bloques condicionales»Usa bloques para mostrar puntuación o etiquetas solo cuando algo existe o cuando se cumple una condición.
Sintaxis: { ... }
- Un bloque
{ ... }solo se muestra si su primer marcador coincide:- con un campo no vacío
- o con un marcador de condición verdadero (
%|condition%)
- Puedes incluir varios marcadores y texto literal dentro del mismo bloque
{ ... }, pero solo el primer marcador controla si el bloque se muestra - Coloca los espacios necesarios dentro del bloque, por ejemplo
{ by %artist%}
Bloque condicional basado en un campo
Sección titulada «Bloque condicional basado en un campo»Ejemplos:
| Plantilla | Resultado de ejemplo | Si el campo está vacío |
|---|---|---|
%title%{ de %artist%} |
Seven Nation Army de The White Stripes | Seven Nation Army |
%album%{ (%year%)} |
Thriller (1982) | Thriller |
{%composer% ● }%artist% |
Beethoven ● Berliner Philharmoniker | Berliner Philharmoniker |
Bloque condicional basado en una condición
Sección titulada «Bloque condicional basado en una condición»Usa %|condition% como primer marcador para controlar un bloque sin imprimir un valor.
Ejemplo:
{%|format.samplerate>"48"% Hi-Res: %format.codec%}Muestra Hi-Res: FLAC solo si format.samplerate > 48.
Saltos de línea dentro de { ... }
Sección titulada «Saltos de línea dentro de { ... }»Usa \n dentro de bloques condicionales:
%album%{\n(%year%)}Fuera de { ... }, prefiere %lb% para los saltos de línea.
Condiciones dentro de marcadores
Sección titulada «Condiciones dentro de marcadores»Sintaxis: %field|condition%
Imprime el campo solo si la condición es verdadera.
Qué puedes comparar:
- Otro nombre de campo, por ejemplo
artist,composer,year - Una cadena literal o un número entre comillas, por ejemplo
"2012","Rock","256"
Notas sobre literales:
tracksignifica el campo track"track"significa el texto literaltrack- Las comillas pueden aparecer dentro de los valores. Asegúrate de que el literal empiece y termine con
"
Ejemplos:
%year|year>"2012"%%composer|composer!=artist%%composer|genre=="Classical"%Operadores
Sección titulada «Operadores»| Operador | Significado | Ejemplo | Notas |
|---|---|---|---|
== |
igual a | genre=="Classical" / artist==composer |
|
!= |
distinto de | artist!="Metallica" |
|
+= |
contiene | genre+="Rock" |
funciona con un literal u otro campo |
-= |
no contiene | mood-="depressing" |
|
> |
mayor que | year>"1999" |
usa comillas para números literales |
< |
menor que | duration<"500" |
la duración está en segundos |
==empty |
está vacío | year==empty |
empty está reservado |
!=empty |
no está vacío | composer!=empty |
empty está reservado |
[] |
dentro del rango | bpm[]"0".."100" |
límites inclusivos |
Varias condiciones, mezcla de && / || y paréntesis
Sección titulada «Varias condiciones, mezcla de && / || y paréntesis»- Usa
&¶ AND - Usa
||para OR - Puedes mezclar
&&y||en la misma condición - Usa paréntesis
(...)para controlar la prioridad de evaluación
Ejemplo:
%format|format.bitdepth!=empty && (format.samplerate>"48" || format.bitdepth>"24")%Esto imprime %format% solo cuando existe la profundidad de bits y además:
- la frecuencia de muestreo es mayor que 48
- o la profundidad de bits es mayor que 24
Marcado de formato de texto en línea
Sección titulada «Marcado de formato de texto en línea»**Bold**__Underline__~~Strike~~//Italics//^^CAPS^^Etiquetas localizadas (string.*)
Sección titulada «Etiquetas localizadas (string.*)»Estos marcadores devuelven cadenas traducidas en el idioma del usuario:
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
En reproducción (compacto y expandido)
Sección titulada «En reproducción (compacto y expandido)»Las plantillas de En reproducción pueden acceder a:
- metadatos de pista
- estado de reproducción
- estado de la cola
- estado de capítulos
- formato de audio
- información de ecualizador / salida / reproductor
- y más
Funciones solo para En reproducción
Sección titulada «Funciones solo para En reproducción»Dividir en varios segmentos con \t
Sección titulada «Dividir en varios segmentos con \t»Usa \t para dividir una plantilla en varios segmentos.
Ejemplo:
%player.position%\t%format%\t%player.duration%Con espacio de alineación horizontal entre ellos, normalmente se renderiza así:
- izquierda: posición
- centro: formato
- derecha: duración
Superposición de protección selectiva con \o
Sección titulada «Superposición de protección selectiva con \o»Usa \o para aplicar una superposición de protección solo a esa parte, incluso si toda la cadena no está protegida.
Prefijo next.
Sección titulada «Prefijo next.»Añade next. antes de los campos de datos de elemento para referirte al siguiente elemento de la cola:
%next.title%Para campos de capítulo, next.chapter.* se refiere al siguiente capítulo.
Campos compatibles (En reproducción)
Sección titulada «Campos compatibles (En reproducción)»Metadatos de pista / álbum
Sección titulada «Metadatos de pista / álbum»titletitle.rawcleantitle(título sin número de pista añadido ni símbolo explícito)artistalbumalbum.rawalbum.versionalbum.type(también conocido como Release Type)albumartistalbum.tagsalbum.titlealbum.title.rawalbum.title.versioncomposeryearreleasedateoriginaldatereleasedate.yearoriginaldate.yeartrackdiscdisctitledurationduration.seconds(segundos totales)duration.d(añade .nz para ocultarlo si es cero)duration.h(añade .nz para ocultarlo si es cero)duration.m(añade .nz para ocultarlo si es cero)duration.s(añade .nz para ocultarlo si es cero)duration.dd(con relleno de 0, añade .nz para ocultarlo si es cero)duration.hh(con relleno de 0, añade .nz para ocultarlo si es cero)duration.mm(con relleno de 0, añade .nz para ocultarlo si es cero)duration.ss(con relleno de 0, añade .nz para ocultarlo si es cero)bpmgenrestylemoodoccasiongroupinglanguagecommentworkmovement.namemovement.numbermovement.number.romanmediatypeprovidernameofflinestatusexplicitfavoriteuserratingratinguserrating.5(normalizado a 5 estrellas)rating.5(normalizado a 5 estrellas)track.tagsoriginal.artistoriginal.albumfilepathfilenamelastplayedlastSkippedisaudiobookplaycountskipcount
Reproducción / reproductor
Sección titulada «Reproducción / reproductor»player.positionplayer.durationplayer.remainingplayer.position.secondsplayer.duration.secondsplayer.remaining.secondsplayer.pausedplayer.repeat.modeplayer.shuffle.modevolume.currentsleep.timersleep.timer.secondssleep.timer.eos
Cola / funciones inteligentes
Sección titulada «Cola / funciones inteligentes»queue.positionqueue.sizequeue.namesmartqueuesmartflowradio.mode(1 si viene de Smart Queue, 2+ si viene de Smart Flow)
Capítulos
Sección titulada «Capítulos»chapter.countchapter.indexchapter.titlechapter.positionchapter.position.secondschapter.position.d(añade .nz para ocultarlo si es cero)chapter.position.h(añade .nz para ocultarlo si es cero)chapter.position.m(añade .nz para ocultarlo si es cero)chapter.position.s(añade .nz para ocultarlo si es cero)chapter.position.dd(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.position.hh(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.position.mm(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.position.ss(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.remainingchapter.remaining.secondschapter.remaining.d(añade .nz para ocultarlo si es cero)chapter.remaining.h(añade .nz para ocultarlo si es cero)chapter.remaining.m(añade .nz para ocultarlo si es cero)chapter.remaining.s(añade .nz para ocultarlo si es cero)chapter.remaining.dd(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.remaining.hh(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.remaining.mm(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.remaining.ss(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.durationchapter.duration.secondschapter.duration.d(añade .nz para ocultarlo si es cero)chapter.duration.h(añade .nz para ocultarlo si es cero)chapter.duration.m(añade .nz para ocultarlo si es cero)chapter.duration.s(añade .nz para ocultarlo si es cero)chapter.duration.dd(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.duration.hh(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.duration.mm(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.duration.ss(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.all.positionchapter.all.position.secondschapter.all.position.d(añade .nz para ocultarlo si es cero)chapter.all.position.h(añade .nz para ocultarlo si es cero)chapter.all.position.m(añade .nz para ocultarlo si es cero)chapter.all.position.s(añade .nz para ocultarlo si es cero)chapter.all.position.dd(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.all.position.hh(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.all.position.mm(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.all.position.ss(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.all.remainingchapter.all.remaining.secondschapter.all.remaining.d(añade .nz para ocultarlo si es cero)chapter.all.remaining.h(añade .nz para ocultarlo si es cero)chapter.all.remaining.m(añade .nz para ocultarlo si es cero)chapter.all.remaining.s(añade .nz para ocultarlo si es cero)chapter.all.remaining.dd(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.all.remaining.hh(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.all.remaining.mm(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.all.remaining.ss(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.all.durationchapter.all.duration.secondschapter.all.duration.d(añade .nz para ocultarlo si es cero)chapter.all.duration.h(añade .nz para ocultarlo si es cero)chapter.all.duration.m(añade .nz para ocultarlo si es cero)chapter.all.duration.s(añade .nz para ocultarlo si es cero)chapter.all.duration.dd(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.all.duration.hh(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.all.duration.mm(con relleno de 0, añade .nz para ocultarlo si es cero)chapter.all.duration.ss(con relleno de 0, añade .nz para ocultarlo si es cero)
Formato / información de audio
Sección titulada «Formato / información de audio»formatformat.bitrateformat.bitrate.rawformat.samplerateformat.samplerate.rawformat.bitdepthformat.codecformat.bitandsampleformat.channels
Ecualizador / salida / reproductor
Sección titulada «Ecualizador / salida / reproductor»eq.profileeq.configoutput.currentrenderer.currentrenderer.type
Utilidad
Sección titulada «Utilidad»lb(salto de línea)bool1bool2bool3bool4bool5
Ejemplos de En reproducción
Sección titulada «Ejemplos de En reproducción»bloque de título limpio en dos líneas
Sección titulada «bloque de título limpio en dos líneas»%title%%lb%{by %artist%}álbum + año solo si el año existe
Sección titulada «álbum + año solo si el año existe»%album%{ (%year%)}Composer ● Artist solo cuando existe compositor
Sección titulada «Composer ● Artist solo cuando existe compositor»{%composer% ● }%artist%línea de tres partes usando \t (posición / formato / duración)
Sección titulada «línea de tres partes usando \t (posición / formato / duración)»%player.position%\t%format%\t%player.duration%mostrar Hi-Res solo para frecuencia de muestreo alta
Sección titulada «mostrar Hi-Res solo para frecuencia de muestreo alta»{%|format.samplerate>"48"% Hi-Res: %format.codec%}mostrar el dispositivo de salida activo (Android u otro reproductor)
Sección titulada «mostrar el dispositivo de salida activo (Android u otro reproductor)»{ %output.current|renderer.type=="Android"%}{ %renderer.current|renderer.type!="Android"%}indicador de calidad estilo Apple alternable (usa bool1)
Sección titulada «indicador de calidad estilo Apple alternable (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"%}Si vinculas una acción toggle bool1 a la cadena personalizada, alterna entre:
- mostrar
%format%cuandobool1es true - mostrar el indicador estilo Apple cuando
bool1es false
mostrar el volumen actual
Sección titulada «mostrar el volumen actual»Vol %volume.current%%título del capítulo actual con índice
Sección titulada «título del capítulo actual con índice»{%chapter.index% - }%chapter.title%capítulo actual transcurrido / restante
Sección titulada «capítulo actual transcurrido / restante»%chapter.position%\t%chapter.title%\t%chapter.remaining%progreso completo de audiolibro relativo al primer capítulo
Sección titulada «progreso completo de audiolibro relativo al primer capítulo»%chapter.all.position%\t%chapter.all.duration%título del siguiente capítulo
Sección titulada «título del siguiente capítulo»%next.chapter.title%valores de formato sin procesar
Sección titulada «valores de formato sin procesar»%format.codec% • %format.bitdepth%/%format.samplerate.raw% • %format.bitrate.raw%Subtítulo de álbum (página de álbum)
Sección titulada «Subtítulo de álbum (página de álbum)»Las páginas de álbum suelen exponer metadatos de nivel de álbum, no el estado de la cola ni del reproductor. Puedes usar la misma sintaxis común de plantillas.
Campos compatibles (subtítulo de álbum)
Sección titulada «Campos compatibles (subtítulo de álbum)»titletitle.rawversiontagstypestatuscomposerartistyeardurationduration.seconds(segundos totales)duration.d(añade .nz para ocultarlo si es cero)duration.h(añade .nz para ocultarlo si es cero)duration.m(añade .nz para ocultarlo si es cero)duration.s(añade .nz para ocultarlo si es cero)duration.dd(con relleno de 0, añade .nz para ocultarlo si es cero)duration.hh(con relleno de 0, añade .nz para ocultarlo si es cero)duration.mm(con relleno de 0, añade .nz para ocultarlo si es cero)duration.ss(con relleno de 0, añade .nz para ocultarlo si es cero)genrestylemoodlanguageprovidernameofflinestatusoccasionmediatypegroupingexplicitreleasedateoriginaldatereleasedate.yearoriginaldate.yearlastplayedlastSkippeduserratingratinguserrating.5rating.5favoritesong.countplaycountskipcountdescriptionformatformat.bitrateformat.channelsformat.samplerateformat.bitdepthformat.codecformat.bitandsampleformat.bitrate.rawformat.samplerate.rawlb
Ejemplos de subtítulo de álbum
Sección titulada «Ejemplos de subtítulo de álbum»título de álbum + versión solo si existe versión
Sección titulada «título de álbum + versión solo si existe versión»%title%{ — %version%}línea de año + género, omitiendo partes ausentes
Sección titulada «línea de año + género, omitiendo partes ausentes»%year%{ • %genre%}valoración mostrada solo si el usuario lo ha valorado
Sección titulada «valoración mostrada solo si el usuario lo ha valorado»{★ %userrating.5%/5%|userrating!=empty%}indicador Downloaded
Sección titulada «indicador Downloaded»{⬇ Offline%|offlinestatus!=empty%}Subtítulo de artista (página de artista)
Sección titulada «Subtítulo de artista (página de artista)»Las páginas de artista suelen exponer metadatos de nivel de artista y estadísticas de biblioteca. Puedes usar la misma sintaxis común de plantillas.
Campos compatibles (subtítulo de artista)
Sección titulada «Campos compatibles (subtítulo de artista)»titletitle.rawversiontagstypegenderdurationduration.seconds(segundos totales)duration.d(añade .nz para ocultarlo si es cero)duration.h(añade .nz para ocultarlo si es cero)duration.m(añade .nz para ocultarlo si es cero)duration.s(añade .nz para ocultarlo si es cero)duration.dd(con relleno de 0, añade .nz para ocultarlo si es cero)duration.hh(con relleno de 0, añade .nz para ocultarlo si es cero)duration.mm(con relleno de 0, añade .nz para ocultarlo si es cero)duration.ss(con relleno de 0, añade .nz para ocultarlo si es cero)genrestylemoodsong.countalbum.countinstrumentprovidernameofflinestatuslastplayeduserratinguserrating.5favoriteplaycountdescriptionlb
Ejemplos de subtítulo de artista
Sección titulada «Ejemplos de subtítulo de artista»mostrar recuentos con etiquetas
Sección titulada «mostrar recuentos con etiquetas»%song.count% songs{ • %album.count% albums}línea de género / estilo
Sección titulada «línea de género / estilo»%genre%{ • %style%}mostrar insignia Favorite solo cuando está marcado como favorito
Sección titulada «mostrar insignia Favorite solo cuando está marcado como favorito»{♥ Favorite%|favorite!=empty%}instrumento en una línea nueva
Sección titulada «instrumento en una línea nueva»%title%{\n%instrument%}