Exemplos de Perfil e Correspondencia de Alvos no Linux
Use este guia quando quiser exemplos práticos de JSON. Atenção: este espelho resume o formato; para o schema completo atual (incluindo firmware, calibration, validação e operações de perfil), consulte o guia canônico. O baud padrão atual é 115200.
🎚️ Exemplo: apenas volume master
{
"id": "master-only",
"name": "Master Only",
"serial": {
"preferredPort": null,
"baudRate": 115200,
"autoConnect": true,
"heartbeatTimeoutMs": 3000
},
"sliders": [
{
"id": 0,
"name": "Master Volume",
"targets": [{ "kind": "master" }]
}
],
"audio": {
"noiseReduction": "default",
"smoothTransitions": true,
"transitionDurationMs": 50
},
"ui": {
"language": "pt-BR",
"theme": "system",
"showVisualizers": true,
"telemetryWindow": 120
}
}
🧩 Exemplo: aplicativos + microfone + sink de saida
{
"id": "streaming-desk",
"name": "Streaming Desk",
"serial": {
"preferredPort": "/dev/ttyUSB0",
"baudRate": 115200,
"autoConnect": true,
"heartbeatTimeoutMs": 3000
},
"sliders": [
{
"id": 0,
"name": "Apps",
"targets": [
{ "kind": "application", "name": "Spotify" },
{ "kind": "application", "name": "Firefox" },
{ "kind": "application", "name": "Discord" }
]
},
{
"id": 1,
"name": "Mic",
"targets": [{ "kind": "source", "name": "default_microphone" }]
},
{
"id": 2,
"name": "Speakers",
"targets": [{ "kind": "sink", "name": "default_output" }]
}
],
"audio": {
"noiseReduction": "default",
"smoothTransitions": true,
"transitionDurationMs": 50
},
"ui": {
"language": "pt-BR",
"theme": "system",
"showVisualizers": true,
"telemetryWindow": 120
}
}
🔇 Exemplo: controles de mute direcionado
Controles (botoes e encoders) aceitam um target opcional que direciona uma acao de mute a um sink, source ou aplicacao especifica. Sem target, o mute alterna a saida padrao.
{
"controls": [
{
"input": "button",
"id": 0,
"name": "Mutar Spotify",
"event": "press",
"action": "mute",
"target": { "kind": "application", "name": "Spotify" }
},
{
"input": "button",
"id": 1,
"name": "Mutar fones",
"event": "press",
"action": "mute",
"target": { "kind": "sink", "name": "bluez" }
},
{
"input": "button",
"id": 2,
"name": "Mutar microfone",
"event": "press",
"action": "mute",
"target": { "kind": "source", "name": "default_microphone" }
},
{
"input": "button",
"id": 3,
"name": "Mutar master",
"event": "press",
"action": "mute"
}
]
}
O objeto target segue o mesmo formato e as mesmas regras de correspondencia dos targets de slider (ver abaixo). Um controle com target malformado (name ausente, kind desconhecido) e descartado na validacao em vez de cair silenciosamente para master; no editor de perfis do app o mesmo target malformado vira erro de validacao em vez de ser salvo.
target so e valido com action: "mute". As acoes next/prev atuam sobre o player MPRIS, que nao tem um no de audio para mirar, entao um controle que combina as duas coisas e rejeitado (erro de validacao no editor de perfis, binding descartado ao carregar o estado persistido).
Suporte por plataforma: no Linux todos os tipos de target funcionam; no Windows apenas master (ou sem target) e aceito — um target especifico retorna supported: false.
Nada disso exige o editor JSON: Configuracoes › Editor de perfil › Botoes e encoders adiciona bindings, alterna entre botao e encoder e escolhe o alvo do mute a partir do inventario de audio da sessao.
🔎 Regras de correspondencia no Linux
O backend Linux atual aplica os alvos com a logica abaixo:
master
- mapeia para pactl set-sink-volume @DEFAULT_SINK@ …
application
- compara tanto o nome de aplicacao no Pulse/PipeWire quanto o nome de exibicao
- comparacao case-insensitive
- correspondencia parcial e aceita
- se nenhum sink input ativo corresponder, o resultado e reportado como app idle: …
source
- default_microphone tenta primeiro a source padrao atual
- se nao houver source padrao, cai para a primeira source que nao seja monitor
- nomes customizados sao comparados sem diferenciar maiusculas/minusculas com nome e descricao da source
sink
- default_output usa o sink padrao atual
- nomes customizados sao comparados sem diferenciar maiusculas/minusculas com nome e descricao do sink
💡 Dicas praticas
- prefira nomes estaveis de app como Spotify, Firefox ou Discord
- atualize o inventario no app desktop antes de depurar problema de correspondencia
- mantenha ao menos um stream de audio ativo se quiser que alvos do tipo application sejam descobertos
- use default_microphone e default_output para o perfil resistir melhor a mudancas de dispositivo