Mac Sonos
macOS menu bar appApp de barra de menus do macOS

Use your old Sonos as your Mac's speaker.Use seu Sonos antigo como alto-falante do Mac.

Mac Sonos streams your Mac's audio to Sonos speakers that don't support AirPlay (Play:1, the first Playbar and friends), and puts a full Sonos control center one click away in the menu bar. O Mac Sonos transmite o áudio do Mac para Sonos sem AirPlay (Play:1, a primeira Playbar e companhia) e coloca um centro de controle Sonos completo a um clique, na barra de menus.

Unofficial project. It talks to your speakers over your local network: no Sonos account, no cloud API, no analytics. Projeto não oficial. Fala com os alto-falantes pela sua rede local: sem conta Sonos, sem API em nuvem, sem telemetria.

Play:1 · PlaybarBuilt and tested on S2 speakers that have no AirPlay.Feito e testado em alto-falantes S2 sem AirPlay.
4 languages4 idiomasEnglish, Español, Français, Português; follows your Mac.English, Español, Français, Português; segue o seu Mac.
Two capture modesDois modos de capturaSystem audio (no extra software) or BlackHole.Áudio do sistema (sem software extra) ou BlackHole.

Why this existsPor que isso existe

Older Sonos speakers such as the Play:1 and the first Playbar can't receive AirPlay, so macOS has no way to send sound to them. The Sonos app doesn't help either: it plays from music services, not from your Mac. Mac Sonos fills the gap by listening to what your Mac plays and serving it on your network as a radio stream that Sonos knows how to play. Pick the rooms, set the volume, and your Mac has speakers again. Sonos antigos, como a Play:1 e a primeira Playbar, não recebem AirPlay, então o macOS não tem como enviar som para eles. O app da Sonos também não resolve: ele toca de serviços de música, não do seu Mac. O Mac Sonos preenche essa lacuna: escuta o que o Mac toca e serve isso na sua rede como uma rádio que o Sonos sabe tocar. Escolha os cômodos, ajuste o volume, e o Mac volta a ter caixas de som.

Why I built this

I have several Play:1s and the first Playbar. They still sound good to me, but none of them can take AirPlay, so my Mac could never use them as speakers.

I wanted exactly that: the Sonos as my Mac's speaker. The official app also lacks a few things I wanted, so I started with a quick script that streamed my Mac's audio to one room, and it grew into the menu bar app you see here.

Most of the code was written by Claude Code (Claude Sonnet 5.5) under my direction: I decided what to build and tested every step on my own speakers.

How it worksComo funciona

Five small steps, all on your own machine and network.Cinco passos pequenos, todos na sua máquina e na sua rede.

  1. Your Mac playsO Mac tocaAny app: music, a browser, a game.Qualquer app: música, navegador, jogo.
  2. CapturedCapturadoBy a system audio tap, or through BlackHole.Por um tap de áudio do sistema, ou pelo BlackHole.
  3. EncodedCodificadoffmpeg turns it into an MP3 or AAC stream.O ffmpeg transforma em um stream MP3 ou AAC.
  4. ServedServidoA tiny HTTP server on your Mac, on your LAN.Um servidor HTTP minúsculo no Mac, na sua LAN.
  5. PlayedTocadoSonos fetches it like any internet radio.O Sonos busca como qualquer rádio da internet.
About the delay. Sonos buffers radio streams before playing them, so expect roughly 3–10 seconds of delay. That is fine for music and podcasts, but not for video or calls. Sobre o atraso. O Sonos guarda um buffer dos streams de rádio antes de tocar, então espere de 3 a 10 segundos de atraso. Serve para música e podcasts, mas não para vídeo ou chamadas.

System audioÁudio do sistema · macOS 14.2+

A Core Audio process tap listens to what the Mac plays. Nothing is installed, your Mac's output is left alone, and the Mac's volume doesn't matter. Optionally the Mac stays silent while it streams.

Um tap de processo do Core Audio escuta o que o Mac toca. Nada para instalar, a saída do Mac fica intocada e o volume do Mac não importa. Opcionalmente, o Mac fica em silêncio enquanto transmite.

  • Needs the System Audio Recording permission
  • Precisa da permissão de Gravação de Áudio do Sistema

BlackHole

The original route: the Mac's output is switched to the free BlackHole virtual device and read like a microphone. It works on more setups but is a little fussier.

O caminho original: a saída do Mac vai para o dispositivo virtual gratuito BlackHole e é lida como um microfone. Funciona em mais cenários, mas é um pouco mais chato.

  • The Mac's volume is the signal level: keep it at 100%
  • O volume do Mac é o nível do sinal: deixe em 100%
  • macOS shows its microphone indicator
  • O macOS mostra o indicador de microfone

More than a speaker driverMais que um driver de caixa de som

The menu bar app is also a compact Sonos remote for the whole house, built on the local Sonos API, so it does things the official app doesn't.O app de barra de menus também é um controle Sonos compacto para a casa toda, feito sobre a API local da Sonos, e por isso faz coisas que o app oficial não faz.

🔊

Stream to any rooms

Transmita para os cômodos

One room or several grouped, with volume steps that change live, MP3 or AAC, and automatic recovery after Wi-Fi hiccups.

Um cômodo ou vários agrupados, com passos de volume que mudam ao vivo, MP3 ou AAC e recuperação automática depois de falhas do Wi-Fi.

🎵

Now playing, everywhere

Tocando agora, em todo lugar

Every group that is playing, with cover art, position, and only the controls it really supports. Optionally show the track next to the icon.

Cada grupo que está tocando, com capa, posição e só os controles que ele realmente suporta. Opcionalmente, mostra a faixa ao lado do ícone.

🏠

The whole house

A casa toda

Per-room volume and mute, join and leave groups, party mode, and a "split all" button. Stereo pairs are handled correctly.

Volume e mudo por cômodo, entrar e sair de grupos, modo festa e um botão "separar todos". Pares estéreo são tratados corretamente.

🎚️

Sound controls

Controles de som

Bass, treble and loudness for every room; night mode, speech enhancement, surround and TV audio on soundbars. Only what each speaker supports is shown.

Graves, agudos e loudness em todos os cômodos; modo noite, realce de diálogo, surround e áudio da TV nas soundbars. Só aparece o que cada aparelho suporta.

⭐

Favorites, playlists, queue

Favoritos, playlists, fila

Play your Sonos favorites and playlists, manage the queue, and keep a list of your own radio stream URLs.

Toque seus favoritos e playlists do Sonos, gerencie a fila e guarde uma lista de URLs de rádio própria.

⏰

Sleep timer and alarms

Soneca e alarmes

A sleep timer per group (for the Mac's stream it fades the volume out and stops cleanly) and full alarm management.

Soneca por grupo (no stream do Mac, o volume faz fade e para sem corte) e gerenciamento completo de alarmes.

🎬

Scenes

Cenas

Save the state of your house (grouping, volumes, sound settings, the Mac stream) and bring it back in one click. Scenes are plain JSON you can edit.

Salve o estado da casa (agrupamento, volumes, som, o stream do Mac) e traga de volta com um clique. As cenas são JSON simples, editáveis.

⌨️

Media keys

Teclas de mídia

Optional: while the Mac streams, the volume keys drive the Sonos, and play/next/previous follow what is playing there.

Opcional: enquanto o Mac transmite, as teclas de volume controlam o Sonos, e play/próxima/anterior seguem o que está tocando lá.

🌐

Your language

No seu idioma

English, Español, Français and Português, following your Mac's language or chosen from the menu.

English, Español, Français e Português, seguindo o idioma do Mac ou escolhido no menu.

A tour of the menuUm tour pelo menu

This is the menu itself, rendered by the app with made-up rooms and songs, in every language it speaks. Click the submenus.Este é o próprio menu, gerado pelo app com cômodos e músicas inventados, em cada idioma que ele fala. Clique nos submenus.

Generated from the real app by tools/build_site.py, not drawn by hand.Gerado a partir do app real por tools/build_site.py, não desenhado à mão.

Everything sits behind one icon. The icon shows the state (stopped, connecting, streaming, interrupted, error), and the menu keeps what you do most at the top.

Tudo fica atrás de um único ícone. Ele mostra o estado (parado, conectando, transmitindo, interrompido, erro), e o menu deixa no topo o que você mais faz.

  • Now playing lists every playing group with its controls and a sleep timer.
  • Home has every room: volume, mute, join or leave a group, and a Sound submenu.
  • Library picks where things play, then favorites, playlists, queue and radio URLs.
  • Capture switches between system audio and BlackHole.
  • Agora tocando lista cada grupo que toca, com seus controles e uma soneca.
  • Casa tem todos os cômodos: volume, mudo, entrar ou sair de um grupo e um submenu de Som.
  • Biblioteca escolhe onde as coisas tocam e abre favoritos, playlists, fila e URLs de rádio.
  • Captura alterna entre áudio do sistema e BlackHole.

If something stops the stream from outside (someone uses the Sonos app, for example), the icon turns ⏸ and one click brings it back.

Se algo para o stream por fora (alguém usa o app da Sonos, por exemplo), o ícone vira ⏸ e um clique o traz de volta.

InstallInstalar

It is built from source on your Mac. You need macOS 13 or later (14.2+ for the system audio mode), Homebrew, and Python 3. Developed and tested on macOS 27 with an Apple silicon Mac. Ele é compilado a partir do código-fonte no seu Mac. Você precisa de macOS 13 ou mais novo (14.2+ para o modo de áudio do sistema), do Homebrew e do Python 3. Desenvolvido e testado no macOS 27, em um Mac com Apple silicon.

  1. Get the code

    Baixe o código

    git clone https://github.com/lagefreitas/mac-sonos.git
    cd mac-sonos
  2. Install the tools

    Instale as ferramentas

    This installs ffmpeg, BlackHole and SwitchAudioSource with Homebrew and creates a Python environment. BlackHole is only needed for the BlackHole mode; if it asks you to, restart or run sudo killall coreaudiod.

    Isso instala ffmpeg, BlackHole e SwitchAudioSource pelo Homebrew e cria um ambiente Python. O BlackHole só é necessário no modo BlackHole; se ele pedir, reinicie ou rode sudo killall coreaudiod.

    ./setup.sh
  3. Build the app

    Compile o app

    This makes ~/Applications/Mac Sonos.app, signed with a local certificate so macOS remembers the permissions you grant it.

    Isso cria o ~/Applications/Mac Sonos.app, assinado com um certificado local para o macOS lembrar das permissões que você conceder.

    ./build-app.sh
    open ~/Applications/"Mac Sonos.app"
  4. Allow what it asks for

    Permita o que ele pedir

    macOS asks the first time each thing is needed. Pick your rooms in the menu, choose a capture mode, and turn on Open at login if you like.

    O macOS pergunta na primeira vez que cada coisa é necessária. Escolha os cômodos no menu, o modo de captura e ative Abrir no login se quiser.

PermissionsPermissões

PermissionPermissãoWhyPara quêWhenQuando
Local NetworkFind your speakers and stream to themAchar os alto-falantes e transmitir para elesAlwaysSempre
System Audio RecordingListen to what the Mac playsEscutar o que o Mac tocaSystem audio modeModo áudio do sistema
MicrophoneRead the BlackHole deviceLer o dispositivo BlackHoleBlackHole modeModo BlackHole
AccessibilityCapture the media and volume keysCapturar as teclas de mídia e de volumeOptional: media keysOpcional: teclas de mídia

The System Audio Recording permission is requested through a private macOS interface (there is no public one). If a future macOS changes that, add "Mac Sonos" by hand in System Settings › Privacy & Security › Screen & System Audio Recording. A permissão de Gravação de Áudio do Sistema é pedida por uma interface privada do macOS (não existe uma pública). Se um macOS futuro mudar isso, adicione o "Mac Sonos" à mão em Ajustes do Sistema › Privacidade e Segurança › Gravação de Tela e Áudio do Sistema.

Prefer the terminal?Prefere o terminal?

.venv/bin/python -m mac_sonos list                           # find your rooms
.venv/bin/python -m mac_sonos run "Living Room" --volume 15  # stream to one room
.venv/bin/python -m mac_sonos run                            # use the saved settings
.venv/bin/python -m mac_sonos list                           # lista os cômodos
.venv/bin/python -m mac_sonos run "Living Room" --volume 15  # transmite para um cômodo
.venv/bin/python -m mac_sonos run                            # usa as configurações salvas

Good to knowBom saber

Delay

Atraso

Streams arrive a few seconds late because Sonos buffers radio. Music and podcasts are fine; video and calls are not.

Os streams chegam alguns segundos atrasados porque o Sonos faz buffer de rádio. Música e podcasts vão bem; vídeo e chamadas, não.

What was tested

O que foi testado

Play:1 speakers (including a stereo pair) and a Playbar on S2, from an Apple silicon Mac on macOS 27. Other models should work through the same local API, but they haven't been tried.

Alto-falantes Play:1 (inclusive um par estéreo) e uma Playbar no S2, a partir de um Mac com Apple silicon no macOS 27. Outros modelos devem funcionar pela mesma API local, mas não foram testados.

Under the hood

Por dentro

How the system audio capture works, with a working 70-line Python example and the traps along the way. Read the write-up.

Como funciona a captura do áudio do sistema, com um exemplo de 70 linhas em Python e as armadilhas do caminho. Leia o artigo (em inglês).

Privacy

Privacidade

Audio goes from your Mac to your speakers over your LAN. There is no account, no telemetry and no server of ours. Cover art is fetched from the address Sonos reports.

O áudio vai do seu Mac aos alto-falantes pela sua LAN. Não há conta, telemetria nem servidor nosso. As capas vêm do endereço que o Sonos informa.