Skip to content

Add support for audio CD ripping #46

@mapitman

Description

@mapitman

Overview

Add support for ripping audio CDs alongside existing DVD/Blu-ray/UHD disc support.

Audio Ripping Tools/Libraries

Command-Line Utilities

  • abcde (A Better CD Encoder) - Popular all-in-one CD ripper/encoder
    • Supports multiple formats and backends
    • Scriptable and highly configurable
  • cdparanoia - Robust CD ripper with error correction
    • Industry standard for audio extraction
    • Can be used as backend for other tools
  • whipper - Modern CD ripper focusing on accuracy
    • Uses AccurateRip/MusicBrainz
    • Python-based, well-maintained
  • morituri - Accurate CD ripper (predecessor to whipper)
  • cd-discid - For disc identification

Libraries

  • libcdio - CD access library (C)
  • python-cdio - Python bindings for libcdio
  • ruby-cdparanoia - Ruby bindings

Audio Format Support

The feature should support encoding to:

  • MP3 (using lame or ffmpeg)
  • FLAC (lossless, using flac encoder)
  • AAC/M4A (using fdkaac or ffmpeg)
  • Opus (modern, efficient)
  • Vorbis/OGG (open format)
  • WAV (uncompressed, for archival)

Metadata/Disc Identification APIs

  • MusicBrainz API (recommended, free, open)
    • Disc ID lookup
    • Track metadata (artist, album, year, genre)
    • Cover art via Cover Art Archive
  • CDDB/freedb (legacy, but still supported)
  • AccurateRip (for verification of rip accuracy)
  • Discogs API (alternative metadata source)

Implementation Considerations

Disc Detection Updates

The existing IDiscTypeDetector and DiscScanner will need to:

  1. Detect if inserted disc is audio CD vs data disc (DVD/BD/UHD)
  2. Return appropriate disc type enum value (add Audio type)
  3. Route to appropriate ripping service based on disc type

Architecture Changes

  • Create IAudioDiscRipper interface
  • Implement AudioDiscRipper service
  • Add IAudioEncoder for format conversion
  • Create IAudioMetadataProvider for MusicBrainz/CDDB lookups
  • Update RipOptions to support audio-specific options:
    • --format (mp3, flac, etc.)
    • --bitrate (for lossy formats)
    • --quality (compression level)
    • --paranoia-mode (error correction level)

File Naming

Audio files should follow standard naming conventions:

  • Single disc: {Artist} - {Album} ({Year})/{TrackNumber:D2} - {Title}.{ext}
  • Multi-disc: {Artist} - {Album} ({Year})/Disc {DiscNumber}/{TrackNumber:D2} - {Title}.{ext}

Metadata Embedding

  • ID3v2 tags for MP3
  • Vorbis comments for FLAC/Opus/OGG
  • MP4 atoms for AAC/M4A
  • Include: artist, album, title, track number, year, genre, cover art

User Experience

The tool should automatically:

  1. Detect audio CD insertion
  2. Query MusicBrainz for disc ID and metadata
  3. Display track listing with artist/album info
  4. Rip tracks with error correction
  5. Encode to selected format(s)
  6. Embed metadata and cover art
  7. Organize files in output directory

Example Usage

# Rip to FLAC (lossless)
dotnet run -- --output ~/Music --format flac

# Rip to MP3 V0 (high quality VBR)
dotnet run -- --output ~/Music --format mp3 --quality v0

# Rip to multiple formats
dotnet run -- --output ~/Music --format flac,mp3 --bitrate 320

Related Issues

This feature complements existing video disc ripping functionality and uses similar architecture patterns.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions