Skip to content

DanielLMcGuire/Mastering_Utility

Mastering Utility

CMake Multi-Platform Build Cargo Multi-Platform Build

C++ 20 / Rust library for audio tagging using a metadata markup format and a Wizard to aid in creating the format.

Features

  • Manage multiple albums and tracks via a single Markup config file
  • Batch re-encode audio files (WAV, FLAC, MP3, etc.) with consistent quality
  • Auto-apply metadata tags (title, artist, album, track number, year, genre, copyright)
  • Keep a structured workflow for mastering projects

Download

  • Windows: 64-bit installers on the Releases page
  • Windows / macOS / Linux: 64-bit artifacts from the latest GitHub Actions build: Rust C++
  • Build from source: See below

Prerequisites

  • ffmpeg in your system PATH (ffmpeg -version) – Download here
  • For building: CMake 3.10+, C++20 compiler, Cargo/Rust, 64-bit system recommended

Build from source

git clone --depth=1 https://github.com/DanielLMcGuire/Mastering_Utility.git
cd Mastering_Utility
# C++
cmake -S . -B build (-G Ninja)
cmake --build build (--config[Release|Debug|MinSizeRel|RelWithDebInfo])
# Rust
cargo build

Usage

cd build

1. Mastering Wizard (masteringwizard)

Interactive Markup creator / editor.

# Create new configuration
./masteringwizard --Markupfile="output.mas"

# Show help
./masteringwizard --help

Prompts for:

  • Album metadata (title, artist, genre, year, copyright, art)
  • Output directory
  • Songs (source file, title, artist, track number, output file)
  • Audio codec settings

Tip

Type exit or quit anytime to leave the wizard.

2. Mastering Utility (masteringutility)

Processes the Markup file and encodes all tracks.

./masteringutility --markupfile="myalbum.mas"

It will:

  • Read album/song metadata
  • Create output directories
  • Re-encode tracks via ffmpeg
  • Apply all metadata tags

Markup File Format

album 1 ("Album Title", "Artist Name", "© 2025 Copyright", "cover.jpg", "./source", "./output", "Genre", "2025", "Comment", "Flags")
{
    song 1 ("Track Title", "Artist Name", 1, "input.wav", "01-track.mp3", "libmp3lame", "Genre", "2025", "Comment")
    song 2 ("Another Track", "Artist Name", 2, "input2.flac", "02-track.flac", "flac", "Genre", "2025", "Comment", "-compression_level 12")
}

Album syntax:

album <ID> ("Title", "Artist", "Copyright", "AlbumArtPath", "SourcePath", "OutputPath", "Genre", "Year", "Comment", "Flags")

Song syntax:

song <ID> ("Title", "Artist", TrackNumber, "SourceFile", "OutputFile", "Codec", "Genre", "Year", "Comment", "Flags")

Comments = Optional, Comment metadata

Flags = Optional, Flags to pass to ffmpeg, must have optional comment field specified if flags are specified, even if it is empty.

Supported codecs: Any ffmpeg audio codec, including:

  • mp3 – MP3 (VBR quality 3 default)
  • flac – FLAC lossless (compression 12 default)
  • aac – AAC
  • libopus – Opus
  • copy – Copy stream without re-encoding

Run ffmpeg --codecs to see more

Example Workflow

./masteringwizard 
./masteringutility new.mas

Wizard will prompt for album/song info and generate a ready-to-use Markup file.

AI Content Disclosure

  • 90%+ of code written manually
  • GitHub Actions/workflows partially AI-generated (checked)
  • Issue responses manually written
  • (autogenerated) tag marks AI-generated issues

License

GPL 3.0 See LICENSE for details.

Contributing

Issues and PRs welcome.

Support

Use the GitHub Issues page for questions or feature requests.