Esta página documenta a sintaxe dos modelos de string personalizada do Symfonium e as listas de campos disponíveis em cada contexto.
Ela está organizada em:
- Sintaxe comum dos modelos: placeholders, blocos condicionais, condições/operadores, formatação de texto, regras de escape e rótulos globais localizados
string.* - Seções específicas por contexto:
- Em reprodução: recursos adicionais (
\t,\o, camposnext., camposchapter.*) e a lista completa de campos de Em reprodução - Subtítulo de álbum: campos de nível de álbum disponíveis nas páginas de álbum
- Subtítulo de artista: campos de nível de artista disponíveis nas páginas de artista
- Em reprodução: recursos adicionais (
Sintaxe comum dos modelos (funciona em todos os lugares)
Seção intitulada “Sintaxe comum dos modelos (funciona em todos os lugares)”Placeholders básicos
Seção intitulada “Placeholders básicos”Sintaxe: %fieldname%
- Substitui
%fieldname%pelo valor do campo - Se o campo estiver vazio ou ausente, nada é exibido
Exemplos:
| Modelo | Resultado de exemplo |
|---|---|
%title% por %artist% | Seven Nation Army por The White Stripes |
%album% (%year%) | Thriller (1982) |
%composer% ● %artist% | Ludwig van Beethoven ● Berliner Philharmoniker |
%artist%%lb%%composer% | Berliner Philharmoniker |
%lb% é uma quebra de linha.
Blocos condicionais
Seção intitulada “Blocos condicionais”Use blocos para mostrar pontuação ou rótulos somente quando algo existir ou quando uma condição corresponder.
Sintaxe: { ... }
- Um bloco
{ ... }é exibido somente se seu primeiro placeholder corresponder:- a um campo não vazio
- ou a um placeholder de condição verdadeira (
%|condition%)
- Você pode incluir vários placeholders e texto literal no mesmo bloco
{ ... }, mas somente o primeiro placeholder controla se o bloco é exibido - Coloque os espaços necessários dentro do bloco, por exemplo
{ por %artist%}
Bloco condicional baseado em um campo
Seção intitulada “Bloco condicional baseado em um campo”Exemplos:
| Modelo | Resultado de exemplo | Se o campo estiver vazio |
|---|---|---|
%title%{ por %artist%} | Seven Nation Army por The White Stripes | Seven Nation Army |
%album%{ (%year%)} | Thriller (1982) | Thriller |
{%composer% ● }%artist% | Beethoven ● Berliner Philharmoniker | Berliner Philharmoniker |
Bloco condicional baseado em uma condição
Seção intitulada “Bloco condicional baseado em uma condição”Use %|condition% como primeiro placeholder para controlar um bloco sem imprimir um valor.
Exemplo:
{%|format.samplerate>"48"% Hi-Res: %format.codec%}Mostra Hi-Res: FLAC somente se format.samplerate > 48.
Quebras de linha dentro de { ... }
Seção intitulada “Quebras de linha dentro de { ... }”Use \n dentro de blocos condicionais:
%album%{\n(%year%)}Fora de { ... }, prefira %lb% para quebras de linha.
Condições dentro de placeholders
Seção intitulada “Condições dentro de placeholders”Sintaxe: %field|condition%
Imprime o campo somente se a condição for verdadeira.
O que você pode comparar:
- Outro nome de campo, por exemplo
artist,composer,year - Uma string ou número literal entre aspas, por exemplo
"2012","Rock","256"
Observações sobre literais:
tracksignifica o campo track"track"significa o texto literaltrack- Aspas podem aparecer dentro de valores. Verifique se o literal começa e termina com
"
Exemplos:
%year|year>"2012"%%composer|composer!=artist%%composer|genre=="Classical"%Operadores
Seção intitulada “Operadores”| Operador | Significado | Exemplo | Observações |
|---|---|---|---|
== | igual a | genre=="Classical" / artist==composer | |
!= | diferente de | artist!="Metallica" | |
+= | contém | genre+="Rock" | funciona com um literal ou outro campo |
-= | não contém | mood-="depressing" | |
> | maior que | year>"1999" | use aspas para números literais |
< | menor que | duration<"500" | a duração está em segundos |
==empty | está vazio | year==empty | empty é reservado |
!=empty | não está vazio | composer!=empty | empty é reservado |
[] | no intervalo | bpm[]"0".."100" | limites inclusivos |
Múltiplas condições, mistura de && / || e parênteses
Seção intitulada “Múltiplas condições, mistura de && / || e parênteses”- Use
&¶ E - Use
||para OU - Você pode misturar
&&e||na mesma condição - Use parênteses
(...)para controlar a prioridade de avaliação
Exemplo:
%format|format.bitdepth!=empty && (format.samplerate>"48" || format.bitdepth>"24")%Isso imprime %format% somente quando a profundidade de bits existe e:
- a taxa de amostragem é maior que 48
- a profundidade de bits é maior que 24
Marcação de formatação de texto em linha
Seção intitulada “Marcação de formatação de texto em linha”**Negrito**__Sublinhado__~~Tachado~~//Itálico//^^MAIÚSCULAS^^Rótulos localizados (string.*)
Seção intitulada “Rótulos localizados (string.*)”Esses placeholders retornam strings traduzidas no idioma do usuário:
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
Em reprodução (compacto & expandido)
Seção intitulada “Em reprodução (compacto & expandido)”Os modelos de Em reprodução podem acessar:
- metadados da faixa
- estado de reprodução
- estado da fila
- estado do capítulo
- formato de áudio
- informações de equalizador / renderizador
- e mais
Recursos exclusivos de Em reprodução
Seção intitulada “Recursos exclusivos de Em reprodução”Dividir em vários segmentos com \t
Seção intitulada “Dividir em vários segmentos com \t”Use \t para dividir um modelo em vários segmentos.
Exemplo:
%player.position%\t%format%\t%player.duration%Com espaço de alinhamento horizontal entre eles, isso normalmente é renderizado como:
- esquerda: posição
- centro: formato
- direita: duração
Sobreposição de proteção seletiva com \o
Seção intitulada “Sobreposição de proteção seletiva com \o”Use \o para aplicar uma sobreposição de proteção somente a essa parte, mesmo que a string completa não esteja protegida.
Prefixo next.
Seção intitulada “Prefixo next.”Adicione next. antes dos campos de dados do item para se referir ao próximo item da fila:
%next.title%Para campos de capítulo, next.chapter.* se refere ao próximo capítulo.
Campos compatíveis (Em reprodução)
Seção intitulada “Campos compatíveis (Em reprodução)”Metadados de faixa / álbum
Seção intitulada “Metadados de faixa / álbum”titletitle.rawcleantitle(título sem número de faixa adicionado nem símbolo de explícito)artistalbumalbum.rawalbum.versionalbum.type(também conhecido como Release Type)albumartistalbum.tagsalbum.titlealbum.title.rawalbum.title.versioncomposeryearreleasedateoriginaldatereleasedate.yearoriginaldate.yeartrackdiscdisctitledurationduration.seconds(segundos totais)duration.d(adicione .nz para ocultar se for zero)duration.h(adicione .nz para ocultar se for zero)duration.m(adicione .nz para ocultar se for zero)duration.s(adicione .nz para ocultar se for zero)duration.dd(preenchido com 0, adicione .nz para ocultar se for zero)duration.hh(preenchido com 0, adicione .nz para ocultar se for zero)duration.mm(preenchido com 0, adicione .nz para ocultar se for zero)duration.ss(preenchido com 0, adicione .nz para ocultar se for zero)bpmgenrestylemoodoccasiongroupinglanguagecommentworkmovement.namemovement.numbermovement.number.romanmediatypeprovidernameofflinestatusexplicitfavoriteuserratingratinguserrating.5(normalizado para 5 estrelas)rating.5(normalizado para 5 estrelas)track.tagsoriginal.artistoriginal.albumfilepathfilenamelastplayedlastSkippedisaudiobookplaycountskipcount
Reprodução / player
Seção intitulada “Reprodução / player”player.positionplayer.durationplayer.remainingplayer.position.secondsplayer.duration.secondsplayer.remaining.secondsplayer.pausedplayer.repeat.modeplayer.shuffle.modevolume.currentsleep.timersleep.timer.secondssleep.timer.eos
Fila / recursos inteligentes
Seção intitulada “Fila / recursos inteligentes”queue.positionqueue.sizequeue.namesmartqueuesmartflowradio.mode(1 se vier de Smart Queue, 2+ se vier de Smart Flow)
Capítulos
Seção intitulada “Capítulos”chapter.countchapter.indexchapter.titlechapter.positionchapter.position.secondschapter.position.d(adicione .nz para ocultar se for zero)chapter.position.h(adicione .nz para ocultar se for zero)chapter.position.m(adicione .nz para ocultar se for zero)chapter.position.s(adicione .nz para ocultar se for zero)chapter.position.dd(preenchido com 0, adicione .nz para ocultar se for zero)chapter.position.hh(preenchido com 0, adicione .nz para ocultar se for zero)chapter.position.mm(preenchido com 0, adicione .nz para ocultar se for zero)chapter.position.ss(preenchido com 0, adicione .nz para ocultar se for zero)chapter.remainingchapter.remaining.secondschapter.remaining.d(adicione .nz para ocultar se for zero)chapter.remaining.h(adicione .nz para ocultar se for zero)chapter.remaining.m(adicione .nz para ocultar se for zero)chapter.remaining.s(adicione .nz para ocultar se for zero)chapter.remaining.dd(preenchido com 0, adicione .nz para ocultar se for zero)chapter.remaining.hh(preenchido com 0, adicione .nz para ocultar se for zero)chapter.remaining.mm(preenchido com 0, adicione .nz para ocultar se for zero)chapter.remaining.ss(preenchido com 0, adicione .nz para ocultar se for zero)chapter.durationchapter.duration.secondschapter.duration.d(adicione .nz para ocultar se for zero)chapter.duration.h(adicione .nz para ocultar se for zero)chapter.duration.m(adicione .nz para ocultar se for zero)chapter.duration.s(adicione .nz para ocultar se for zero)chapter.duration.dd(preenchido com 0, adicione .nz para ocultar se for zero)chapter.duration.hh(preenchido com 0, adicione .nz para ocultar se for zero)chapter.duration.mm(preenchido com 0, adicione .nz para ocultar se for zero)chapter.duration.ss(preenchido com 0, adicione .nz para ocultar se for zero)chapter.all.positionchapter.all.position.secondschapter.all.position.d(adicione .nz para ocultar se for zero)chapter.all.position.h(adicione .nz para ocultar se for zero)chapter.all.position.m(adicione .nz para ocultar se for zero)chapter.all.position.s(adicione .nz para ocultar se for zero)chapter.all.position.dd(preenchido com 0, adicione .nz para ocultar se for zero)chapter.all.position.hh(preenchido com 0, adicione .nz para ocultar se for zero)chapter.all.position.mm(preenchido com 0, adicione .nz para ocultar se for zero)chapter.all.position.ss(preenchido com 0, adicione .nz para ocultar se for zero)chapter.all.remainingchapter.all.remaining.secondschapter.all.remaining.d(adicione .nz para ocultar se for zero)chapter.all.remaining.h(adicione .nz para ocultar se for zero)chapter.all.remaining.m(adicione .nz para ocultar se for zero)chapter.all.remaining.s(adicione .nz para ocultar se for zero)chapter.all.remaining.dd(preenchido com 0, adicione .nz para ocultar se for zero)chapter.all.remaining.hh(preenchido com 0, adicione .nz para ocultar se for zero)chapter.all.remaining.mm(preenchido com 0, adicione .nz para ocultar se for zero)chapter.all.remaining.ss(preenchido com 0, adicione .nz para ocultar se for zero)chapter.all.durationchapter.all.duration.secondschapter.all.duration.d(adicione .nz para ocultar se for zero)chapter.all.duration.h(adicione .nz para ocultar se for zero)chapter.all.duration.m(adicione .nz para ocultar se for zero)chapter.all.duration.s(adicione .nz para ocultar se for zero)chapter.all.duration.dd(preenchido com 0, adicione .nz para ocultar se for zero)chapter.all.duration.hh(preenchido com 0, adicione .nz para ocultar se for zero)chapter.all.duration.mm(preenchido com 0, adicione .nz para ocultar se for zero)chapter.all.duration.ss(preenchido com 0, adicione .nz para ocultar se for zero)
Formato / informações de áudio
Seção intitulada “Formato / informações de áudio”formatformat.bitrateformat.bitrate.rawformat.samplerateformat.samplerate.rawformat.bitdepthformat.codecformat.bitandsampleformat.channels
Equalizador / saída / renderizador
Seção intitulada “Equalizador / saída / renderizador”eq.profileeq.configoutput.currentrenderer.currentrenderer.type
Utilitários
Seção intitulada “Utilitários”lb(quebra de linha)bool1bool2bool3bool4bool5
Exemplos de Em reprodução
Seção intitulada “Exemplos de Em reprodução”bloco de título limpo em duas linhas
Seção intitulada “bloco de título limpo em duas linhas”%title%%lb%{por %artist%}álbum + ano somente se o ano existir
Seção intitulada “álbum + ano somente se o ano existir”%album%{ (%year%)}Compositor ● Artista somente quando o compositor existir
Seção intitulada “Compositor ● Artista somente quando o compositor existir”{%composer% ● }%artist%linha em três partes usando \t (posição / formato / duração)
Seção intitulada “linha em três partes usando \t (posição / formato / duração)”%player.position%\t%format%\t%player.duration%mostrar Hi-Res somente para alta taxa de amostragem
Seção intitulada “mostrar Hi-Res somente para alta taxa de amostragem”{%|format.samplerate>"48"% Hi-Res: %format.codec%}mostrar dispositivo de saída ativo (Android ou outro renderizador)
Seção intitulada “mostrar dispositivo de saída ativo (Android ou outro renderizador)”{ %output.current|renderer.type=="Android"%}{ %renderer.current|renderer.type!="Android"%}indicador de qualidade no estilo Apple alternável (usa bool1)
Seção intitulada “indicador de qualidade no estilo Apple alternável (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 você vincular uma ação toggle bool1 à string personalizada, ela alterna entre:
- mostrar
%format%quandobool1for true - mostrar o indicador no estilo Apple quando
bool1for false
mostrar volume atual
Seção intitulada “mostrar volume atual”Vol. %volume.current%%título do capítulo atual com índice
Seção intitulada “título do capítulo atual com índice”{%chapter.index% - }%chapter.title%tempo decorrido / restante do capítulo atual
Seção intitulada “tempo decorrido / restante do capítulo atual”%chapter.position%\t%chapter.title%\t%chapter.remaining%progresso completo do audiolivro relativo ao primeiro capítulo
Seção intitulada “progresso completo do audiolivro relativo ao primeiro capítulo”%chapter.all.position%\t%chapter.all.duration%título do próximo capítulo
Seção intitulada “título do próximo capítulo”%next.chapter.title%valores brutos do formato
Seção intitulada “valores brutos do formato”%format.codec% • %format.bitdepth%/%format.samplerate.raw% • %format.bitrate.raw%Subtítulo de álbum (página Álbum)
Seção intitulada “Subtítulo de álbum (página Álbum)”Páginas de álbum normalmente expõem metadados de nível de álbum, não o estado da fila ou do player. Você pode usar a mesma sintaxe comum de modelos.
Campos compatíveis (subtítulo de álbum)
Seção intitulada “Campos compatíveis (subtítulo de álbum)”titletitle.rawversiontagstypestatuscomposerartistyeardurationduration.seconds(segundos totais)duration.d(adicione .nz para ocultar se for zero)duration.h(adicione .nz para ocultar se for zero)duration.m(adicione .nz para ocultar se for zero)duration.s(adicione .nz para ocultar se for zero)duration.dd(preenchido com 0, adicione .nz para ocultar se for zero)duration.hh(preenchido com 0, adicione .nz para ocultar se for zero)duration.mm(preenchido com 0, adicione .nz para ocultar se for zero)duration.ss(preenchido com 0, adicione .nz para ocultar se for zero)genrestylemoodlanguageprovidernameofflinestatusoccasionmediatypegroupingexplicitreleasedateoriginaldatereleasedate.yearoriginaldate.yearlastplayedlastSkippeduserratingratinguserrating.5rating.5favoritesong.countplaycountskipcountdescriptionformatformat.bitrateformat.channelsformat.samplerateformat.bitdepthformat.codecformat.bitandsampleformat.bitrate.rawformat.samplerate.rawlb
Exemplos de subtítulo de álbum
Seção intitulada “Exemplos de subtítulo de álbum”título do álbum + versão somente se a versão existir
Seção intitulada “título do álbum + versão somente se a versão existir”%title%{ — %version%}linha de ano + gênero ignorando partes ausentes
Seção intitulada “linha de ano + gênero ignorando partes ausentes”%year%{ • %genre%}avaliação exibida somente se o usuário avaliou
Seção intitulada “avaliação exibida somente se o usuário avaliou”{★ %userrating.5%/5%|userrating!=empty%}indicador Baixado
Seção intitulada “indicador Baixado”{⬇ Offline%|offlinestatus!=empty%}Subtítulo de artista (página Artista)
Seção intitulada “Subtítulo de artista (página Artista)”Páginas de artista normalmente expõem metadados de nível de artista e estatísticas da biblioteca. Você pode usar a mesma sintaxe comum de modelos.
Campos compatíveis (subtítulo de artista)
Seção intitulada “Campos compatíveis (subtítulo de artista)”titletitle.rawversiontagstypegenderdurationduration.seconds(segundos totais)duration.d(adicione .nz para ocultar se for zero)duration.h(adicione .nz para ocultar se for zero)duration.m(adicione .nz para ocultar se for zero)duration.s(adicione .nz para ocultar se for zero)duration.dd(preenchido com 0, adicione .nz para ocultar se for zero)duration.hh(preenchido com 0, adicione .nz para ocultar se for zero)duration.mm(preenchido com 0, adicione .nz para ocultar se for zero)duration.ss(preenchido com 0, adicione .nz para ocultar se for zero)genrestylemoodsong.countalbum.countinstrumentprovidernameofflinestatuslastplayeduserratinguserrating.5favoriteplaycountdescriptionlb
Exemplos de subtítulo de artista
Seção intitulada “Exemplos de subtítulo de artista”mostrar contagens com rótulos
Seção intitulada “mostrar contagens com rótulos”%song.count% músicas{ • %album.count% álbuns}linha de gênero / estilo
Seção intitulada “linha de gênero / estilo”%genre%{ • %style%}mostrar o selo Favorito somente quando for favorito
Seção intitulada “mostrar o selo Favorito somente quando for favorito”{♥ Favorito%|favorite!=empty%}instrumento em uma nova linha
Seção intitulada “instrumento em uma nova linha”%title%{\n%instrument%}