macOS native music player — Swift/SwiftUI

aldiss 86e3a0a2f2 Update README: add Chad Music setup, API key instructions, current features 3 月之前
.copilot d7edf76351 Initial commit: MixBoard macOS music player 3 月之前
.github d7edf76351 Initial commit: MixBoard macOS music player 3 月之前
.orchestra d7edf76351 Initial commit: MixBoard macOS music player 3 月之前
.swiftpm d7edf76351 Initial commit: MixBoard macOS music player 3 月之前
Assets.xcassets d7edf76351 Initial commit: MixBoard macOS music player 3 月之前
MixBoard.xcodeproj d7edf76351 Initial commit: MixBoard macOS music player 3 月之前
Sources d7edf76351 Initial commit: MixBoard macOS music player 3 月之前
Tests d7edf76351 Initial commit: MixBoard macOS music player 3 月之前
.gitignore d7edf76351 Initial commit: MixBoard macOS music player 3 月之前
INSTRUCTIONS.md d7edf76351 Initial commit: MixBoard macOS music player 3 月之前
Package.swift d7edf76351 Initial commit: MixBoard macOS music player 3 月之前
README.md 86e3a0a2f2 Update README: add Chad Music setup, API key instructions, current features 3 月之前
SPEC.md d7edf76351 Initial commit: MixBoard macOS music player 3 月之前
project.yml d7edf76351 Initial commit: MixBoard macOS music player 3 月之前

README.md

MixBoard

A native macOS music player built with Swift 5.9 and SwiftUI, targeting macOS 14+ (Sonoma). Play local files, stream from a Chad Music cloud server, analyze BPM and key, build playlists, and export to your DAW.

Features

Music Library

  • Import audio files (MP3, WAV, FLAC, AAC, AIFF, M4A, OGG Vorbis, and more)
  • Scan directories recursively
  • Search and filter by title, artist, album, genre, BPM, or key
  • Sort by any column
  • Playlist folders for organization

Cloud Streaming (Chad Music)

  • Browse your cloud library by artist, album, genre, year, publisher, country
  • Stream tracks directly — no download required
  • Album artwork from the server
  • Drag albums or tracks into local playlists
  • Lyrics fetching via LRCLIB

Audio Analysis

  • BPM Detection — Energy-based onset detection with autocorrelation (Accelerate framework)
  • Musical Key Detection — Chromagram analysis with Krumhansl-Kessler key profiles, Camelot wheel codes
  • Waveform Visualization — High-resolution waveform display with efficient downsampling

Playback

  • AVAudioEngine for local files, AVPlayer for cloud streaming
  • Interactive waveform with seek
  • 3-band EQ (Low / Mid / High)
  • Volume control, media key support
  • 14 retro skins

Playlist & Mix Building

  • Create playlists and organize in folders
  • Drag and reorder tracks
  • Crossfade durations between tracks
  • Per-track gain adjustment, start/end trimming
  • Cue points and markers (Intro, Outro, Drop, Breakdown, Verse, Chorus, etc.)

DAW Export

Format Extension Compatible With
Adobe Audition Session .sesx Adobe Audition
DAWproject .dawproject Bitwig Studio, Studio One, REAPER
Edit Decision List .edl Pro Tools, Audition, DaVinci Resolve
Cue Sheet .cue Audacity, foobar2000, CD burners
M3U Playlist .m3u Any media player

Requirements

  • macOS 14 (Sonoma) or later
  • Xcode 15+ (for building)
  • Swift 5.9+

Building

Option 1: Xcode (Recommended)

open MixBoard.xcodeproj

Select the MixBoard scheme and press ⌘R.

Option 2: xcodegen + Xcode

If you prefer to regenerate the Xcode project from project.yml:

brew install xcodegen   # if not installed
xcodegen generate
open MixBoard.xcodeproj

Option 3: Command Line

xcodebuild -scheme MixBoard -destination 'platform=macOS' build

Chad Music Setup

MixBoard can connect to a Chad Music server to stream your cloud music library.

1. Get your API key

Chad Music uses Telegram-based authentication. To obtain an API key:

  1. Open the Chad Music web UI (e.g., https://music.your-server.com)
  2. Log in via the Telegram login widget
  3. Once logged in, your session token is your API key — copy it from the browser's developer tools (Application → Cookies or Network tab → Authorization header)

Note: Ask the server admin if they have a simpler way to issue API keys, as the method may vary by deployment.

2. Configure in MixBoard

  1. Open MixBoard → Settings (⌘,)
  2. Go to the Chad Music tab
  3. Enter your Server URL (e.g., https://music.tailnet.ts.net)
  4. Enter your API key
  5. Click Test Connection to verify

The API key is stored locally via UserDefaults. The connection uses Bearer token authentication over HTTPS.

API Endpoints Used

Endpoint Purpose
GET /api/stats Library statistics, connection test
GET /api/cat/:category Browse by artist, album, genre, year, etc.
GET /api/cat/album Full album listing with metadata
GET /api/album/:id/tracks Track list with stream URLs

Project Structure

MixBoard/
├── Package.swift              # SPM package definition
├── project.yml                # xcodegen project config
├── Sources/
│   ├── MixBoardApp.swift      # App entry point
│   ├── Models/                # SwiftData models
│   ├── Services/              # Audio engine, BPM/key detection,
│   │                          # Chad Music API, streaming, lyrics
│   ├── ViewModels/            # Player and playlist view models
│   ├── Views/                 # SwiftUI views
│   ├── Export/                # DAW export formats
│   └── OGG/                   # OGG Vorbis decoder (C bridge)
└── Tests/                     # Unit, integration, E2E tests

Running Tests

xcodebuild test -scheme MixBoard -destination 'platform=macOS'

License

MIT