Um app de desktop, aberto, para controlar fones Nothing e CMF — sem depender do celular.
A Nothing só oferece controle pelo app Android/iOS. Quem trabalha no computador o dia inteiro fica sem ANC, sem equalizador e sem os gestos, ou tem que pegar o telefone toda vez. Isso resolve.
Duas formas de usar, mesmo código, nada sobe para lugar nenhum — a conversa é direta com o fone, por Bluetooth RFCOMM:
App de desktop (Tauri). Baixe o instalador da sua plataforma na página de releases, ou compile você mesmo:
npm install && npx tauri buildNo Windows o app fala RFCOMM nativo — sem porta COM virtual, sem navegador.
Para desenvolver: npx tauri dev.
Linux: paridade com o Windows pelos caminhos nativos do sistema — a conexão com o fone fala RFCOMM via BlueZ, e a correção de audição vira um sink virtual do PipeWire (
module-filter-chain, os mesmos biquads RBJ), sem privilégio de administrador. Requisitos: BlueZ e PipeWire rodando, epactldisponível — o padrão nas distribuições atuais. Quem preferir aplicar por conta própria (EasyEffects etc.) ainda pode baixar o perfil em formato Equalizer APO ou CSV na área avançada.macOS: o dmg traz o teste de audição, o perfil por ouvido e os downloads — a conexão com o fone e a correção de sistema ainda não.
"Windows protected your PC"? O instalador ainda não é assinado digitalmente (assinatura de código custa uma identidade verificada; estamos atrás de uma via SignPath Foundation). Enquanto isso: More info → Run anyway. O binário nasce do código deste repositório num build público do GitHub Actions — o link do build fica na própria release, e dá para conferir byte a byte compilando você mesmo.
No navegador, com Web Serial (Chrome, Edge ou Opera 117+):
python servidor.pyDepois abra http://localhost:8790 e clique em Conectar.
A interface vive em web/, o casco nativo em src-tauri/
— o Rust só transporta bytes; todo o protocolo mora em
web/protocolo.js, igual nos dois modos.
O catálogo em web/dispositivos.js cobre 21 modelos das duas
marcas — de Ear (1) a Ear (3a), de CMF Buds a Headphone Pro. Cada um declara os
recursos que tem, e a tela mostra só o que existe naquele fone: um Ear (Stick)
não ganha cartão de ANC, um Buds Pro não ganha Ultra bass.
Um modelo marcado com ✓ foi testado contra hardware real. Os demais aparecem com um aviso, porque as tabelas de bytes foram assumidas iguais às da família — é uma aposta razoável, não um fato. Se você tem um desses fones, veja Contribuindo abaixo: dá para confirmar o seu em oito cliques.
| Testado em hardware | CMF Buds 2 Plus (B184) |
| Assumido pela família | os outros 20 |
- Bateria de cada fone e do estojo
- Cancelamento de ruído: modos, e os quatro níveis onde o aparelho tem
- Ultra bass: liga/desliga e nível 1–5
- Equalizador: os seis presets
- Teste de audição no método clínico (escada de Hughson-Westlake: bipes pulsados em nível fixo, "não ouvi" automático por janela de resposta), com correção pelo equalizador do fone
- Correção por ouvido no áudio do sistema — o app escreve o perfil direto na configuração do Equalizer APO e ele passa a valer na hora, mesmo com o app fechado. Validado em hardware real: melhora notável, relatada nos dois ouvidos
- Correção ao vivo (beta) por compressão multibanda, via cabo de áudio virtual
- Áudio espacial (sem leitura de estado: o fone não responde a uma)
- Modo baixa latência
- Controles: leitura do mapa de gestos
- Versão de firmware
- Português, inglês e espanhol
- Conexão dupla — existe no protocolo, não implementado
- Codecs / LDAC — ver abaixo
- Editor de gestos — hoje só lê, não grava
- EQ personalizado — o preset existe, o editor de bandas não
- Perfil sonoro pessoal (Audiodo) — o interruptor existe, mas a correção não roda no fone: ela roda no telefone, sobre o áudio, antes de ser enviado. Comprovado por A/B — o mesmo fone, com o perfil ligado, soa cru quando a fonte é o PC. Nenhum app de PC replica isso por comando Bluetooth. A nossa resposta está na seção seguinte — e funciona.
- Atualização de firmware — fora de escopo, e é onde se transforma um fone em peso de papel
O app tem um teste de audição próprio no método clínico (escada de Hughson-Westlake: bipes pulsados em nível fixo, «Ouvi» ou silêncio, desce 10–15 dB, sobe 5). Do resultado saem duas correções, em camadas:
- No fone — pelo equalizador de 3 bandas do próprio aparelho. Grossa, mas viaja com o fone.
- No sistema (Windows) — um filtro por frequência medida, esquerdo e direito independentes, aplicado dentro do pipeline de áudio pelo Equalizer APO (GPL). O instalador oficial do Equalizer APO vem embutido no app: se faltar, o app o instala em silêncio e ativa o seu dispositivo de som sozinho (dois pedidos de administrador, e só) — sem downloads, sem cabo virtual, sem tocar no codec Bluetooth, e continua ativo com o app fechado. Testado em campo num CMF Buds 2 Plus: a diferença é notável nos dois ouvidos.
Não dá, e não é falta de vontade. O codec é negociado pela pilha Bluetooth do sistema operacional, não pelo app — o Windows não tem LDAC, e nenhum programa em espaço de usuário resolve isso. No Windows os codecs disponíveis são SBC, AAC e aptX conforme o driver. No Linux, com PipeWire, o LDAC funciona e é configurado lá, fora daqui.
Interoperabilidade: o objetivo é fazer hardware que você comprou conversar com um programa livre. Três fontes, em ordem de confiança:
- Captura HCI do Bluetooth entre o app oficial e o aparelho. É a fonte mais forte — mostra o que os dois de fato trocam.
- Arquivos de configuração do app oficial (JSON em texto puro): códigos de modelo, capacidades por aparelho, frequências dos filtros do equalizador.
ferramentas/ler_dex.py, que lê tabelas de símbolos de.dexsem precisar de Java.
O que sai daí é fato — um número de comando, um layout de bytes, uma frequência de corte — e entra reimplementado, do nosso jeito. O que é expressão — código, textos, ícones, fontes, animações — não entra, nem copiado nem adaptado.
No código, cada afirmação carrega a procedência: [captura] para o que foi visto
no ar, [ear-web] para o que veio de outro projeto livre, [palpite] para o que
ainda não foi confirmado. Se estiver escrito que algo foi medido, foi medido.
E todo ajuste relê o aparelho depois de escrever. Se um comando estiver errado, o botão volta sozinho ao lugar em vez de fingir que funcionou — foi assim que quatro bugs apareceram.
O jeito mais útil de ajudar é confirmar um modelo. Abra
http://localhost:8790/?diag com o seu fone conectado: o painel manda cada byte
de ANC cru e você diz o que ouviu. Oito cliques, e o seu modelo sai da coluna
"assumido". Foi exatamente assim que a tabela do B184 foi levantada — depois de
duas tentativas erradas por dedução.
Capturas HCI de recursos que ainda não implementamos — conexão dupla, localizar fone, desligamento automático — também valem muito.
O formato do quadro e vários números de comando vêm do ear-web, sob GPL-3.0. Este projeto credita, herda a licença e devolve o que descobriu.
A correção de sistema no Windows roda sobre o
Equalizer APO (GPL-2.0), de
Jonas Thedering — o instalador oficial dele vem embutido no pacote Windows
(baixado do SourceForge na hora do build; para compilar localmente, salve-o em
src-tauri/resources/), o app o executa em silêncio e gera arquivos de
configuração; o código-fonte dele está no projeto acima.
A fonte de display é a Doto (SIL OFL).
GPL-3.0.
Não é um produto da Nothing Technology Limited, nem afiliado a ela. "Nothing" e "CMF" são marcas dos seus donos.