Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Tema 8-bit: SonsNew to Visual Studio Code? Get it now.
Tema 8-bit: Sons

Tema 8-bit: Sons

Nthiago_Dev

|
1 install
| (0) | Free
Efeitos sonoros 8-bit (chiptune) para o VS Code: moeda ao salvar, golpe em erros, sucesso/game over nos comandos do terminal, level up quando o servidor dev sobe. Companheiro do Arcade Theme.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Ícone do Tema 8-bit: Sons

Tema 8-bit: Sons

Insert coin. Programe como se estivesse num fliperama.

Versão Instalações Licença

Extensão opcional que adiciona pequenos efeitos sonoros 8-bit (chiptune) ao VS Code. Foi feita para acompanhar o Arcade Theme, mas funciona com qualquer tema.

Sons curtos, em volume baixo, gerados com ondas quadradas e triangulares como nos consoles de 8 bits. Nada de MP3 pesado, nada de servidor: oito arquivos .wav de menos de 1 s cada.

Sons e eventos

Som Quando toca Como soa
power-on Ao iniciar o VS Code Arpejo ascendente C4-E4-G4-C5
coin Ao salvar um arquivo Moeda de fliperama (B5 → E6)
hit Quando a quantidade de erros de um arquivo aumenta Golpe: varredura descendente com ruído
clear Quando os erros de um arquivo aberto chegam a zero "Ding" suave em onda triangular (C6-E6-G6-C7)
success Comando do terminal ou tarefa termina com código 0 Corrida rápida E5-G5-C6-E6 e G6 segurado
game-over Comando do terminal ou tarefa termina com erro Três notas descendentes e um C4 grave com vibrato
level-up Servidor de desenvolvimento no ar (imprimiu a URL local ou "ready") Fanfarra: corrida até G6, repetição e C7 de resolução
warp Sessão de depuração iniciada (F5) Varredura ascendente 200 → 1600 Hz e um "blip" em E6

Cada evento tem a sua própria chave nas configurações, além da chave geral. Veja Configuração.

Terminal: sucesso, game over e level up

É aqui que a extensão vira um companheiro de verdade. Ela escuta o terminal integrado e as tarefas do VS Code:

npm run build     # terminou bem  → success
npm test          # testes quebraram → game-over
npm run dev       # servidor subiu e imprimiu http://localhost:5173 → level-up
npm run dev       # script não existe / porta ocupada / crash → game-over

Como funciona:

  • Comandos no terminal integrado usam a integração com o shell do VS Code (bash, zsh, fish e PowerShell; ligada por padrão desde a versão 1.93). Quando um comando termina, a extensão recebe o código de saída: 0 toca success, qualquer outro toca game-over.
  • Só comandos que casam com tema8bit.sons.terminal.comandos contam (por padrão: npm, pnpm, yarn, bun, node, python, pytest, cargo, go, make, mvn, gradle, dotnet, docker, flutter, git push/pull/clone/... etc.). Um ls ou cd nunca faz barulho. A linha é analisada trecho a trecho (cd api && npm test testa npm test) e ignora prefixos como sudo, time e variáveis (PORT=3000 npm run dev).
  • Sucessos em menos de tema8bit.sons.terminal.duracaoMinimaMs (1 s por padrão) ficam em silêncio: node -v não merece fanfarra. Falhas tocam sempre, mesmo instantâneas (um npm run dev sem script dev avisa na hora).
  • Interromper um comando com Ctrl+C (códigos 130/137/143) não é falha: silêncio.
  • Servidores de desenvolvimento (npm run dev, npm start, vite, next dev, ng serve, flask run, uvicorn, rails s, cargo run, docker compose up...; padrão em tema8bit.sons.servidorDev.comandos) têm a saída observada. Assim que aparece uma URL local (http://localhost:3000, http://127.0.0.1:8000) ou uma frase como ready in, listening on, compiled successfully (padrão em tema8bit.sons.servidorDev.prontoQuando), toca level-up e a extensão para de ler. Quando você derruba o servidor depois, não toca nem success nem game-over: parar era a intenção.
  • Tarefas (Terminal > Run Task, Run Build Task, tasks.json) passam pelos mesmos sons via tasks.onDidEndTaskProcess, sem o filtro de comandos: se você rodou uma tarefa, foi de propósito.

Tudo o que a extensão decide (qual comando, qual código de saída, qual som) fica registrado no painel de saída Tema 8-bit (View > Output).

Erros: golpe e limpo

  • Só diagnósticos com severidade Error contam; avisos e informações não disparam nada.
  • Erros que já existiam não contam: na primeira vez que um arquivo aparece nos diagnósticos (ao abrir um projeto ou um arquivo quebrado), a contagem vira apenas a linha de base. Só aumentos a partir daí tocam hit.
  • Quando um arquivo que tinha erros chega a zero, toca clear. Fechar um arquivo com erros não conta como corrigir (alguns servidores de linguagem zeram os diagnósticos ao fechar).
  • Se no mesmo evento um arquivo ganhou erros e outro ficou limpo, vence o golpe: algo ainda está quebrado.
  • hit e clear tocam no máximo uma vez a cada 1,5 s, e nenhum som repete em menos de 300 ms, para não virar uma metralhadora durante a digitação.

Configuração

Configuração Tipo Padrão Descrição
tema8bit.sons.ativos boolean true Liga/desliga todos os sons.
tema8bit.sons.eventos.iniciar boolean true power-on ao iniciar.
tema8bit.sons.eventos.salvar boolean true coin ao salvar.
tema8bit.sons.eventos.erroNovo boolean true hit em novos erros.
tema8bit.sons.eventos.errosCorrigidos boolean true clear quando os erros zeram.
tema8bit.sons.eventos.terminal boolean true success / game-over em comandos e tarefas.
tema8bit.sons.eventos.servidorDev boolean true level-up quando o servidor dev sobe.
tema8bit.sons.eventos.depuracao boolean true warp ao iniciar a depuração.
tema8bit.sons.terminal.comandos string regex com npm, cargo... Quais comandos do terminal geram som. Vazia = nenhum.
tema8bit.sons.terminal.duracaoMinimaMs number 1000 Sucessos mais rápidos que isso ficam mudos.
tema8bit.sons.servidorDev.comandos string regex com dev, vite... Quais comandos são servidores dev (têm a saída observada).
tema8bit.sons.servidorDev.prontoQuando string regex com URL local, ready O que, na saída, significa "no ar".

As configurações são lidas a cada evento: basta desmarcar a caixa em Configurações > Extensões > Tema 8-bit: Sons (ou editar o settings.json) para o efeito ser imediato, sem reiniciar. As regex não diferenciam maiúsculas de minúsculas; uma regex inválida é ignorada e registrada no painel de saída.

Exemplo para quem só quer os sons do terminal:

{
  "tema8bit.sons.eventos.salvar": false,
  "tema8bit.sons.eventos.erroNovo": false,
  "tema8bit.sons.eventos.errosCorrigidos": false,
  "tema8bit.sons.terminal.comandos": "^(npm|pnpm|cargo)(\\s|$)"
}

Comandos

Abra a paleta de comandos (Ctrl+Shift+P / Cmd+Shift+P) e digite Tema 8-bit:

Comando ID O que faz
Tema 8-bit: Testar sons (toca todos) tema8bit.sons.testar Toca os oito sons em sequência para validar o áudio.
Tema 8-bit: Tocar um som... tema8bit.sons.tocar Lista os sons e toca só o escolhido.
Tema 8-bit: Ligar/desligar sons tema8bit.sons.alternar Inverte tema8bit.sons.ativos (configuração do usuário).

Dica: associe tema8bit.sons.alternar a um atalho para silenciar tudo em reuniões.

Como o som é reproduzido

  • Linux e macOS: a extensão usa o pacote play-sound, que delega a reprodução ao primeiro reprodutor de linha de comando encontrado, nesta ordem: aplay (ALSA), paplay (PulseAudio), pw-play (PipeWire), afplay (macOS, já vem instalado), play (sox), mplayer, cvlc. Só entram reprodutores que tocam .wav (mpg123/mpg321 ficam de fora, porque só decodificam MPEG).
  • Windows: a extensão chama o PowerShell diretamente, sem janela (-WindowStyle Hidden), com System.Media.SoundPlayer (.PlaySync()). Não precisa instalar nada.

Se nenhum reprodutor for encontrado, instale um deles (no Debian/Ubuntu, por exemplo: sudo apt install alsa-utils ou pulseaudio-utils). Se o som não puder ser reproduzido, a extensão registra o motivo no painel de saída Tema 8-bit e mostra um único aviso por sessão. Nunca trava o editor.

A extensão declara "extensionKind": ["ui"]: em sessões remotas (Remote-SSH, WSL, Dev Containers, Codespaces) ela roda sempre na máquina local, onde está a placa de som, e não no servidor.

Como os sons são gerados / como trocá-los

Os oito arquivos em sounds/ são gerados por scripts/gen_sounds.py, que usa somente a biblioteca padrão do Python (wave + math + struct):

python3 scripts/gen_sounds.py            # gera e valida todos
python3 scripts/gen_sounds.py coin warp  # só alguns
python3 scripts/gen_sounds.py --list     # lista os sons e quando tocam
# ou
npm run sounds

Características:

  • 22050 Hz, 16-bit, mono; ondas quadradas (timbre NES) e triangular (clear);
  • pico de amplitude ≤ 0,25 (volume baixo por padrão; mude PEAK no script para regenerar mais alto ou mais baixo);
  • cada um com no máximo 1 s e fade-out linear curto para evitar cliques;
  • o ruído do hit usa um gerador pseudo-aleatório determinístico (LCG), então os arquivos gerados são sempre idênticos byte a byte.

O script também valida cada .wav gerado (canais, largura de amostra, taxa, duração e pico) e imprime o resultado.

Para trocar os sons, substitua os arquivos em sounds/ por outros .wav com o mesmo nome (coin.wav, game-over.wav...). Duas boas fontes:

  • sfxr.me: gerador de efeitos 8-bit no navegador (exporte como WAV);
  • freesound.org: procure por sons com licença CC0.

O ícone (images/icon.png) é gerado por scripts/gen_icon.py a partir do pixel art em images/music.png (npm run icon; requer Pillow).

Desenvolvimento

Testar com F5

  1. Abra a pasta tema8bit-sounds/ no VS Code.
  2. Rode npm install (instala play-sound e os tipos do VS Code).
  3. Pressione F5 (configuração Extension em .vscode/launch.json). Uma nova janela Extension Development Host abre com a extensão carregada; você deve ouvir o power-on.
  4. Salve um arquivo (coin); introduza um erro de sintaxe num arquivo JS/TS (hit) e corrija (clear); no terminal integrado rode npm run build (success), npm run nao-existe (game-over) e npm run dev num projeto com servidor (level-up); pressione F5 num projeto depurável (warp).

Checagens

npm run check   # sintaxe do extension.js + testes dos filtros de comando

Os testes em scripts/test_commands.js exercitam as regex padrão de package.json contra linhas de comando reais (PORT=3000 npm run dev, cd api && npm test, git status...), sem precisar abrir o VS Code.

Empacotar com vsce

npm install
npx --yes @vscode/vsce ls        # confere o que vai para o pacote
npm run package                  # gera tema8bit-sounds-<versão>.vsix

Atenção: node_modules/ precisa ir no .vsix, porque play-sound é uma dependência de tempo de execução (o vsce inclui só as dependências de produção). Por isso ele não está no .vscodeignore (mas está no .gitignore).

Para instalar o pacote localmente:

code --install-extension tema8bit-sounds-0.2.0.vsix

Combina com

Esta extensão foi desenhada para acompanhar o Arcade Theme (Pac-Man, Pac-Man Soft e Neon). Os dois são independentes: você pode usar só o tema, só os sons, ou ambos.

Licença

MIT © nthiago_Dev

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft