Commit Graph
11 Commits
Author SHA1 Message Date
beefcarver b31ad3f6fb feat(ui): add catalogue picker, schedule pane and per-provider hero 2026-11-03 17:51:27 -05:00
beefcarver e30ca09627 refactor!: rename somafm-tui to beefy-player
The app is now a general internet-radio player rather than a SomaFM client, so the package, console script, MPRIS identity, mpv namespaces, macOS tap names, XDG directories and docs all move to beefy-player.

Environment variables are now BEEFY_* (the old SOMAFM_* spellings are still honoured) and an existing ~/.config/somafm-tui/config.json is migrated on first run, so favourites and volume survive the rename.

The visible interface is untouched: same layout, same logo, same keys.
2026-11-03 16:10:25 -05:00
beefcarver 4bed90b489 docs(visualizer): document the six visualiser modes 2026-11-01 09:58:59 -05:00
beefcarver 48e480d58c feat(spectrum): capture macOS output with a Core Audio process tap
SYNC mode on macOS needed a virtual loopback driver (BlackHole, Loopback,
Soundflower) routed through a Multi-Output Device, and shelled out to
'ffmpeg -f avfoundation' to read it. macOS 14.2 lets a process tap the
system mix directly, so do that instead: CATapDescription ->
AudioHardwareCreateProcessTap -> private aggregate device -> IOProc,
straight through ctypes. No driver, no helper binary, no ffmpeg.

The tap hands out native-rate interleaved float32, so the analyser can
now retune its window and band edges when the capture rate differs from
44.1 kHz, and mono-downmixes the frames before the FFT.

A tap that was never granted System Audio Recording permission is
created happily but only ever delivers digital silence: treat that as a
failed capture instead of flat bars, explain it in the status bar and
fall back to the stream tap. A tap that renders nothing *yet* (playback
still starting, or mpv pointed at another device) is not a permanent
failure either - the stream tap covers for a minute, then the tap is
retried.

Drop the avfoundation device enumeration, the loopback-name heuristics
and the microphone safeguards' tests, and document the new permission
and its diagnostics instead.
2026-10-30 22:53:29 -04:00
beefcarver 2570d9b854 docs(readme): document macOS support, Now Playing and loopback capture
Split the install instructions per platform, add the macOS microphone
permission and BlackHole/Multi-Output recipe for a synced spectrum,
describe the Now Playing integration and its limits, and note that config
and cache stay in the XDG locations. The in-app help text is now
platform-aware too, and the package metadata lists macOS.
2026-10-30 18:43:26 -04:00
beefcarver 876057bf68 docs(readme): show demo gif without asciinema link 2026-10-30 15:27:26 +00:00
beefcarver 8393432f97 docs(readme): document Bandcamp track links 2026-10-30 15:12:37 +00:00
beefcarver b2eab64d12 docs(readme): use autoplaying demo gif 2026-10-30 04:45:44 +00:00
beefcarver 5ca93e60fb docs(readme): add asciicast demo near top 2026-10-30 04:40:12 +00:00
beefcarver 44cc36a470 docs(readme): document distro install path and demote NixOS to optional aside 2026-10-30 04:24:53 +00:00
beefcarver 3866f0277c docs(readme): document installation, keybindings and features 2026-10-30 04:17:55 +00:00