Utilitário da bandeja do Windows
Um volume diferente para cada aplicação,
num clique.
Chrome a 30%, Teams a 70%, Spotify a 20%. Em vez de abrir o misturador de volume de cada vez, um perfil repõe tudo. Dois cliques na bandeja, ou um cursor no painel.
A janela que o ícone da bandeja abre. Os mesmos valores também podem ser alterados directamente no menu.
O que faz
O que fazia no misturador de volume, em dois cliques a partir da bandeja.
Volume e silêncio por aplicação
Agrupa por aplicação as sessões que estão a dar som agora. Uma aplicação com vários processos, como o Chrome, continua a ser uma linha só.
Um dispositivo de saída diferente por aplicação
O jogo nas colunas, o Discord nos auscultadores. O dispositivo predefinido também se troca no menu, e o perfil guarda o dispositivo junto com os volumes.
Mantém-se ao fechar e voltar a abrir a aplicação
Lembra o volume de cada aplicação e repõe-no quando essa aplicação volta a tocar. Desligar e voltar a ligar um dispositivo, ou acordar da suspensão, também volta a aplicar o perfil.
O microfone na mesma mão
O botão mais urgente numa reunião. CtrlAltK silencia e reactiva o microfone.
O painel
Editar perfis, mudar atalhos, escrever regras de automação: tudo na janela. Nunca é preciso mexer no ficheiro de definições à mão.
Só sai o que ligar
O relatório anónimo de utilização, a verificação de actualizações e os avisos do programador são tudo o que existe, e as três vêm desligadas. O painel abre apenas em 127.0.0.1 e precisa de um token criado de novo em cada execução.
Perfis
Quando a situação muda, todos os volumes deviam mudar com ela.
Vêm três de origem, e o estado actual pode ser guardado como um novo a qualquer momento. A troca automática — ao arrancar uma aplicação, ao ligar um dispositivo ou por hora do dia — vem desligada.
| Perfis | Principal | Definições por aplicação |
|---|---|---|
| Work | 72% | Chrome 30% · Teams 70% · Spotify 20% |
| Gaming | 80% | Discord 65% · Spotify 15% · navegador silenciado |
| Meeting | 60% | Teams 80% · Zoom 80% · Chrome 20% · Spotify silenciado |
Atalhos
Quando já tem as mãos no teclado.
Todos podem ser alterados, e se outro programa já usar a combinação é-lhe dito, em vez de falhar em silêncio.
- CtrlAlt↑ Aumentar o volume principal
- CtrlAlt↓ Baixar o volume principal
- CtrlAltM Silenciar
- CtrlAltK Silenciar o microfone
- CtrlAltS Painel
- CtrlAlt1–3 Mudar de perfil
Encaminhamento por aplicação
Um caminho que o Windows nunca documentou, verificado antes de ser usado.
medido
«só esta aplicação nos auscultadores» não tem API pública. É preciso chamar a interface interna que a aplicação Definições do Windows usa, Windows.Media.Internal.AudioPolicyConfig, e tanto o identificador da interface como a disposição da vtable mudam de compilação para compilação. O SoundDesk não as usa por adivinhação.
A primeira chamada perigosa é feita num processo separado, para que a bandeja sobreviva a uma falha, e depois de a aplicação ter sido mesmo movida é relida com Get; só quando volta o mesmo dispositivo é promovida a «verificado». Se a releitura não bater certo, a funcionalidade desliga-se sozinha e abre a página de definições do Windows.
| Estado | Prova |
|---|---|
| verified | Um processo foi mesmo movido e o endpoint id relido coincide. Se nada estiver a tocar, o autodiagnóstico cria para si uma sessão com um fluxo silencioso e verifica contra si próprio |
| probable | Não foi possível criar nada para reler — apenas que activar a fábrica e chamar pela vtable não provocou uma falha |
| unsupported | O autodiagnóstico falhou, ou a chamada correu bem e o Windows não a aplicou → é encaminhado para a página de definições |
Segurança
Seguro mesmo executado a partir da pasta de transferências.
Estes são os problemas que um executável portátil encontra de facto. Não é uma lista abstracta: cada linha tem código e um teste por trás.
| Ameaça | Resposta |
|---|---|
| Sequestro de DLL Uma DLL falsa colocada ao lado do exe |
As DLL do sistema são carregadas apenas por System32 caminho absoluto. No arranque, a pasta do exe e o directório de trabalho saem do caminho de pesquisa |
| Ocupação do mutex Outra sessão toma o nome primeiro e bloqueia o arranque |
O objecto de instância única fica no espaço de nomes Local\. |
| Injecção pelo ficheiro de definições | Um endpoint id só chega a uma chamada COM depois de passar uma verificação por expressão regular |
| Falsificação do registo Uma mudança de linha no nome de um processo para inserir uma entrada falsa |
Aos nomes de aplicação e dispositivo são retirados os caracteres de controlo e aplicado um limite de comprimento |
| Um caminho de arranque automático sem aspas | O valor de Run é sempre um caminho absoluto entre aspas, e usa-se apenas HKCU. |
| Manipulação do painel Outro programa no mesmo PC, ou uma página web |
127.0.0.1 apenas, mais um token de 256 bits novo em cada execução e uma verificação de Host e Origin. O token passa a cookie HttpOnly na primeira carga e desaparece da barra de endereços |
Privacidade
Só sai o que ligar.
Os nomes das aplicações e a informação de sessão são tratados neste PC e em mais lado nenhum, e as definições são um único ficheiro JSON. Há exactamente três funcionalidades que chegam à rede — relatório anónimo de utilização, verificação de actualizações e avisos do programador — e as três vêm desligadas. Até ligar uma no painel, não sai um único pedido.
| Ficheiro de definições | %APPDATA%\SoundDesk\config.json |
|---|---|
| Registo | %APPDATA%\SoundDesk\sounddesk.log |
| Relatório anónimo de utilização | Desligado por padrão — quando ligado, uma vez por dia: um id de instalação aleatório, a versão, a compilação do Windows, o idioma e três contagens |
| Verificação de actualizações · avisos do programador | Desligado por padrão — quando ligado, apenas a versão em execução e o idioma. O id de instalação não é enviado |
| O que nunca sai | Nomes de aplicação · nomes de dispositivo · caminhos de ficheiro · o nome da conta do Windows |
| APIs utilizadas | IMMDeviceEnumerator · IAudioSessionManager2 · ISimpleAudioVolume · IPolicyConfig · AudioPolicyConfig |
| Arranque automático | HKCU\Software\Microsoft\Windows\CurrentVersion\Run (opcional) |
Autodiagnóstico
Pergunte à própria aplicação se funciona no seu PC.
Corre as suas próprias funcionalidades uma a uma sobre a pilha de áudio real e repõe o que tocou. Nada que produza som chega sequer a ser feito — o volume principal é provado reescrevendo o valor que já tem, o que exercita o caminho da chamada e mais nada.
| Comando | O que verifica |
|---|---|
| --selftest-audio | Dispositivos · principal · microfone · volume, silêncio e encaminhamento por aplicação · perfis · atalhos globais. Se nenhuma aplicação estiver a tocar, o encaminhamento é verificado contra uma sessão silenciosa própria |
| --selftest-panel | Se o executável empacotado serve mesmo o painel |
| --report | Dispositivos, sessões e perfis em JSON |
Resultado neste PC
OK Volume por aplicação (firefox.exe 100% → 42% → reposto)
OK Silêncio por aplicação
OK Encaminhamento de saída por aplicação (firefox.exe → ASUS VZ279 → reposto)
OK Troca de dispositivo predefinido · perfis · atalhos globais
— Microfone (este PC não tem dispositivo de entrada)
11 passed, 0 failed, 2 skipped — Windows 10 22H2 compilação 19045
Em qualquer lado
Na sua língua, no seu PC.
As mesmas definições em casa e no trabalho, lidas na língua que usa, chamadas de uma macro quando for preciso.
12 idiomas
Segue o idioma do Windows. Também pode escolher um, e quando o faz o painel e o menu da bandeja mudam na hora, sem reiniciar.
한국어 · English · 日本語 · 简体中文 · 繁體中文 · Español · Português · Français · Deutsch · Русский · Italiano · Tiếng Việt
As mesmas definições em casa e no trabalho
Exporte perfis, atalhos e regras num ficheiro e importe-o noutro PC. Os dispositivos são emparelhados pelo nome: os mesmos auscultadores têm um id diferente em cada PC, por isso copiar só o ficheiro faria o encaminhamento desaparecer em silêncio. Dos dispositivos que este PC não tem, é-lhe dado o nome.
Chamar de uma macro
Use-o tal como está a partir de um botão do Stream Deck ou de uma linha de AutoHotkey. Funciona com a bandeja aberta ou não, e não levanta um segundo ícone. Código de saída 0 se algo mudou, 1 se nada correspondeu.
SoundDesk.exe --set-app chrome.exe=25
SoundDesk.exe --profile Gaming
SoundDesk.exe --list apps
Instalação
Um ficheiro. Sem instalador.
SoundDesk.exe onde quiser e execute-o: aparece um ícone na bandeja. Para remover, apague o ficheiro e a pasta de definições. O Python não é preciso.