Skip to content

Repository files navigation

Burn Lossy

A native macOS app for DJs to convert lossless audio to MP3 and burn to CD, with full Rekordbox integration.

Created by Jarrod Drugge

Features

  • Rekordbox XML Import — Import playlists directly from Rekordbox with all metadata (BPM, key, genre, comments, label, remixer)
  • Lossless → MP3 Conversion — Convert FLAC, WAV, AIFF, ALAC to MP3 via FFmpeg with ID3v2.3 + ID3v1 metadata embedding
  • CD Burning — Burn finalized ISO 9660 data CDs using macOS DiscRecording framework with configurable write speeds
  • Multi-Disc Capacity Bar — Visual disc fill indicator with color-coded segments showing exactly how many CDs you need
  • Multi-Disc Burn Flow — Automatic pause between discs with resume prompt, per-disc progress, and live track status
  • Camelot Key Display — Musical keys shown in both standard and Camelot notation (e.g., "Am (8A)")
  • Drag-and-Drop — Reorder tracks between disc segments, drag audio files from Finder
  • Duplicate Detection — Auto-detect and remove duplicate tracks
  • Sort & Filter — Sort by title, artist, BPM, key, duration, or file size; search across all fields
  • Print Labels — Generate and print track listings for each disc
  • Burn History — Track all past burns with full details
  • Bundled FFmpeg — FFmpeg can be bundled inside the app so users don't need to install anything

Requirements

  • macOS 15.0 (Sequoia) or later
  • Xcode 15 or later (for building from source)
  • CD/DVD burner — External USB drive or built-in (for burning)

Quick Start

1. Clone the project

gh repo clone keTECHNOamine/MP3CDBurner-macOS
cd MP3CDBurner-macOS

2. Bundle FFmpeg (recommended for distribution)

Run the included setup script to download and bundle a universal FFmpeg binary:

./scripts/download-ffmpeg.sh

This downloads static FFmpeg binaries for both Apple Silicon and Intel, creates a universal binary, and places it in MP3CDBurner/Resources/ffmpeg.

Then in Xcode:

  1. Right-click the MP3CDBurner group → Add Files to "MP3CDBurner"
  2. Navigate to MP3CDBurner/Resources/ffmpeg
  3. Check "Copy items if needed" and ensure "Add to target: MP3CDBurner" is checked
  4. Build and run

Note: If you skip this step, the app will fall back to using a system-installed FFmpeg (e.g., from Homebrew: brew install ffmpeg). But for distribution to other users, bundling is strongly recommended.

3. Open in Xcode

open MP3CDBurner.xcodeproj

4. Build and Run

  • Select "My Mac" as the build target in Xcode's toolbar
  • Press Cmd+R to build and run
  • The app will open as a native macOS window

Project Structure

MP3CDBurner/
├── MP3CDBurnerApp.swift          # App entry point, menu commands
├── ContentView.swift             # Main window with sidebar navigation
├── Models/
│   ├── AudioTrack.swift          # Track data model, format detection, duplicate fingerprinting
│   ├── AppSettings.swift         # Settings model (disc size, quality, write speed)
│   ├── BurnProgress.swift        # Burn workflow state with per-disc tracking
│   └── BurnHistoryModel.swift    # Burn history persistence
├── ViewModels/
│   ├── PlaylistViewModel.swift   # Playlist state, sorting, import/export
│   ├── SettingsViewModel.swift   # Settings state management
│   └── BurnViewModel.swift       # Burn workflow with multi-disc pause/resume
├── Views/
│   ├── PlaylistView.swift        # Main playlist screen with toolbar
│   ├── BurnView.swift            # Burn progress with per-disc sections and live track status
│   ├── HistoryView.swift         # Burn history list
│   ├── SettingsView.swift        # Settings tabs (General, Media)
│   └── Components/
│       ├── TrackRowView.swift        # Individual track row with badges
│       ├── MultiDiscCapacityBar.swift # Visual disc fill indicator
│       ├── DiscSectionHeader.swift    # Disc boundary headers in track list
│       ├── ImportConfirmDialog.swift   # Append vs replace dialog
│       ├── RekordboxImportView.swift  # Rekordbox XML import sheet
│       └── PrintLabelView.swift       # CD label printing
├── Services/
│   ├── FFmpegService.swift       # FFmpeg with bundled binary support + system fallback
│   ├── DiscBurnService.swift     # macOS DiscRecording CD burning (finalized ISO 9660)
│   └── RekordboxParser.swift     # Rekordbox XML parser
├── Resources/
│   └── ffmpeg                    # Bundled FFmpeg universal binary (after running setup script)
├── Utilities/
│   ├── CamelotWheel.swift        # Camelot key notation and harmonic matching
│   ├── DiscSegments.swift        # Multi-disc capacity calculation
│   └── FormatHelpers.swift       # Formatting utilities (bytes, duration, BPM)
├── Assets.xcassets/              # App icon and accent color
└── scripts/
    └── download-ffmpeg.sh        # Downloads and bundles FFmpeg universal binary

Keyboard Shortcuts

Shortcut Action
Cmd+N New Playlist
Cmd+O Import Audio Files
Cmd+Shift+R Import from Rekordbox
Cmd+S Save Playlist
Cmd+Shift+D Remove Duplicates

How It Works

  1. Import tracks from Rekordbox XML or drag audio files from Finder
  2. Arrange your playlist — sort, reorder, remove duplicates
  3. Check capacity — the bottom bar shows how many CDs you need, with color-coded disc segments
  4. Toggle "MP3 Estimate" to see projected sizes after conversion
  5. Click Burn — the app converts lossless files to MP3 (embedding BPM, key, genre as ID3 tags), then burns to disc
  6. Multi-disc burns — the app pauses between discs, shows a "Insert next disc" prompt, and resumes when you click Resume Burn

CDJ-1000MK3 Compatibility

Burn Lossy is specifically designed to produce CDs compatible with the Pioneer CDJ-1000MK3:

Requirement Burn Lossy Output
MPEG-1 Audio Layer-3 libmp3lame encoder, forced 44.1 kHz
Bit rate 32–320 kbps 320/256/192 kbps options
ID3 tags v1.0–v2.4 ID3v2.3 + ID3v1 dual tags
ISO 9660 CD-ROM ISO 9660 + Joliet filesystem
Disc At Once / Track At Once DAO/TAO (no packet write)
Finalized disc DRBurnAppendableKey: false
Max 8 folder layers Files in root (1 layer)

Metadata Embedding

During conversion, the following Rekordbox metadata is written as ID3v2.3 + ID3v1 tags:

Rekordbox Field ID3 Tag CDJ Display
BPM TBPM Yes
Key (Tonality) TKEY Yes
Genre TCON Yes
Comment COMM Yes
Label TPUB Some models
Remixer TPE4 Some models
Title TIT2 Yes
Artist TPE1 Yes
Album TALB Yes
Year TDRC Yes

Building a Release DMG

1. Bundle FFmpeg first

./scripts/download-ffmpeg.sh

Then add the MP3CDBurner/Resources/ffmpeg file to the Xcode project (see Quick Start step 2).

2. Build the app

In Xcode:

  • Product → Scheme → Edit Scheme → set Build Configuration to Release
  • Press Cmd+B to build
  • Product → Show Build Folder in Finder
  • Navigate to Build/Products/Release/ — you'll find Burn Lossy.app

3. Create the DMG

mkdir -p /tmp/burn-lossy-dmg
cp -R "Build/Products/Release/Burn Lossy.app" /tmp/burn-lossy-dmg/
ln -s /Applications /tmp/burn-lossy-dmg/Applications

hdiutil create \
  -volname "Burn Lossy" \
  -srcfolder /tmp/burn-lossy-dmg \
  -ov -format UDZO \
  "$HOME/Desktop/Burn-Lossy-1.0.dmg"

rm -rf /tmp/burn-lossy-dmg

The resulting Burn-Lossy-1.0.dmg is fully self-contained — users just drag to Applications and run. No Homebrew or FFmpeg installation needed.

License

© 2026 Jarrod Drugge. All rights reserved.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages