Skip to main content

Advanced FLAC authenticity analyzer - Detects MP3-to-FLAC transcodes with high precision

Project description

๐ŸŽต FLAC Detective

FLAC Detective Banner

Python Version PyPI version License Status

Advanced FLAC Authenticity Analyzer for Detecting MP3-to-FLAC Transcodes

FLAC Detective is a professional-grade command-line tool that analyzes FLAC audio files to detect MP3-to-FLAC transcodes with high precision. Using advanced spectral analysis and an 11-rule scoring system, it helps you maintain an authentic lossless music collection.


โœจ Key Features

  • ๐ŸŽฏ High Precision Detection: 11-rule scoring system with intelligent protection mechanisms
  • ๐Ÿ“Š 4-Level Verdict System: Clear confidence ratings from AUTHENTIC to FAKE_CERTAIN
  • โšก Performance Optimized: 80% faster than baseline through smart caching and parallel processing
  • ๐Ÿ” Advanced Analysis: Spectral analysis, compression artifact detection, and multi-segment validation
  • ๐Ÿ›ก๏ธ Protection Layers: Prevents false positives for vinyl rips, cassette transfers, and high-quality MP3s
  • ๐Ÿ“ Flexible Output: Console reports with Rich formatting, JSON export, and detailed logging
  • ๐Ÿ”ง Graceful Error Handling: Partial file reading for corrupted or problematic FLAC files

๐Ÿš€ Quick Start

Installation

pip install flac-detective

Basic Usage

# Analyze current directory
flac-detective .

# Analyze specific directory
flac-detective /path/to/music

# Generate JSON report
flac-detective /path/to/music --format json

# Verbose output with detailed analysis
flac-detective /path/to/music --verbose

๐Ÿ“– How It Works

Detection Rules

FLAC Detective uses 11 independent rules with additive scoring (0-150 points):

Rule Description Points
Rule 1 MP3 Spectral Signature (CBR patterns) +50
Rule 2 Cutoff Frequency Analysis +50
Rule 3 Bitrate Inflation Detection +50
Rule 4 Suspicious 24-bit Detection +30
Rule 5 High Variance Protection (VBR) -40
Rule 6 High Quality Protection -30
Rule 7 Vinyl & Silence Analysis -100
Rule 8 Nyquist Exception -50
Rule 9 Compression Artifacts +30
Rule 10 Multi-Segment Consistency Variable
Rule 11 Cassette Detection -60

Verdict System

Based on the total score, FLAC Detective assigns one of four verdicts:

Score โ‰ค 30   โ†’ โœ… AUTHENTIC      (High confidence - genuine lossless)
Score 31-60  โ†’ โšก WARNING        (Manual review recommended)
Score 61-85  โ†’ โš ๏ธ  SUSPICIOUS    (Likely transcode)
Score โ‰ฅ 86   โ†’ โŒ FAKE_CERTAIN   (Definite transcode)

Protection Mechanisms

The tool implements a multi-layer protection system to prevent false positives:

  1. Absolute Protection (Rule 8): Protects files with cutoff near Nyquist frequency
  2. MP3 320k Protection (Rule 1): Exception for high-quality MP3 320 kbps
  3. Analog Source Protection (Rules 7, 11): Detects vinyl rips and cassette transfers
  4. Dynamic Protection (Rule 10): Validates consistency across file segments

๐Ÿ†• What's New in v0.7.0

Partial File Reading

  • Gracefully handles FLAC files with decoder errors
  • Analyzes partial audio data when full decode fails
  • Reduces false "CORRUPTED" verdicts

Energy-Based Cutoff Detection

  • Critical Fix: Bass-heavy music no longer misidentified as MP3
  • Added 15 kHz minimum threshold to distinguish bass from MP3 artifacts
  • Impact: 77% reduction in false positives

Quality Improvements

  • False positives: 198 โ†’ 46 (-77%)
  • Authentic detection: 59 โ†’ 244 (+314%)
  • Overall quality score: 20.2% โ†’ 83.6%

๐Ÿ’ป Usage Examples

Command Line

# Basic analysis
flac-detective /path/to/music

# Save report to file
flac-detective /path/to/music --output report.txt

# JSON output for automation
flac-detective /path/to/music --format json > results.json

# Verbose mode with detailed rule execution
flac-detective /path/to/music --verbose

Python API

from flac_detective.analysis.new_scoring import new_calculate_score
from pathlib import Path

# Analyze a FLAC file
filepath = Path("/path/to/file.flac")
score, verdict, confidence, reasons = new_calculate_score(
    cutoff_freq=20500,
    metadata={"sample_rate": 44100, "bit_depth": 16, "channels": 2},
    duration_check={"duration": 180.5},
    filepath=filepath
)

print(f"Verdict: {verdict}")
print(f"Score: {score}/150")
print(f"Confidence: {confidence}")
print(f"Detection Reasons: {reasons}")

๐Ÿ“ฆ Requirements

Python Dependencies

  • Python 3.8 or higher
  • numpy >= 1.20.0
  • scipy >= 1.7.0
  • mutagen >= 1.45.0
  • soundfile >= 0.10.0
  • rich >= 13.0.0

Optional System Dependencies

The flac command-line tool is recommended for advanced features:

Linux (Debian/Ubuntu):

sudo apt-get install flac

macOS:

brew install flac

Windows: Download from Xiph.org FLAC


๐Ÿ—๏ธ Development

Installation from Source

# Clone the repository
git clone https://github.com/GuillainM/FLAC_Detective.git
cd FLAC_Detective

# Create virtual environment
python -m venv venv

# Activate virtual environment
# Linux/macOS:
source venv/bin/activate
# Windows:
venv\Scripts\activate

# Install in development mode
pip install -e ".[dev]"

Running Tests

# Run all tests
pytest

# Run with coverage report
pytest --cov=flac_detective --cov-report=html

# Run specific test file
pytest tests/test_new_scoring_rules.py -v

Project Structure

src/flac_detective/
โ”œโ”€โ”€ analysis/
โ”‚   โ”œโ”€โ”€ new_scoring/          # 11-rule scoring system
โ”‚   โ”‚   โ”œโ”€โ”€ rules/            # Individual rule implementations
โ”‚   โ”‚   โ”œโ”€โ”€ calculator.py     # Score orchestration
โ”‚   โ”‚   โ””โ”€โ”€ verdict.py        # Score interpretation
โ”‚   โ”œโ”€โ”€ spectrum.py           # Spectral analysis
โ”‚   โ””โ”€โ”€ audio_cache.py        # Optimized file reading
โ”œโ”€โ”€ reporting/                # Report generation
โ””โ”€โ”€ main.py                   # CLI entry point

๐Ÿ“š Documentation


๐ŸŽฏ Use Cases

โœ… Ideal For

  • Library Maintenance: Clean your music collection of fake lossless files
  • Quality Verification: Validate FLAC authenticity before archiving
  • Batch Processing: Analyze large music libraries efficiently
  • Format Validation: Ensure genuine lossless quality for critical listening

โš ๏ธ Limitations

  • Only analyzes FLAC files (other lossless formats not supported)
  • Designed for batch analysis, not real-time processing
  • Detects transcodes, not subjective audio quality
  • May require manual review for edge cases (WARNING verdicts)

๐Ÿค Contributing

Contributions are welcome! Here's how you can help:

  1. Report Issues: Found a bug? Open an issue
  2. Suggest Features: Have an idea? Start a discussion
  3. Submit PRs: Fork the repo, create a feature branch, and submit a pull request
  4. Improve Docs: Documentation improvements are always appreciated

Development Workflow

# Fork and clone the repository
git clone https://github.com/YOUR_USERNAME/FLAC_Detective.git
cd FLAC_Detective

# Create feature branch
git checkout -b feature/amazing-feature

# Make changes and test
pytest

# Format code
black src tests
isort src tests

# Commit and push
git commit -m "Add amazing feature"
git push origin feature/amazing-feature

# Open Pull Request on GitHub

๐Ÿ“ License

This project is licensed under the MIT License - see the LICENSE file for details.


๐Ÿ™ Acknowledgments

  • Audio analysis community for MP3 compression research
  • Contributors to NumPy, SciPy, and Soundfile libraries
  • Beta testers and community feedback

๐Ÿ“ž Support


FLAC Detective v0.7.0 - Maintaining authentic lossless audio collections

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flac_detective-0.7.0.tar.gz (145.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flac_detective-0.7.0-py3-none-any.whl (91.8 kB view details)

Uploaded Python 3

File details

Details for the file flac_detective-0.7.0.tar.gz.

File metadata

  • Download URL: flac_detective-0.7.0.tar.gz
  • Upload date:
  • Size: 145.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for flac_detective-0.7.0.tar.gz
Algorithm Hash digest
SHA256 3eac5a0b42b58e04722692c4f166c2cb5de26b3717ce181c7596e77757a80b03
MD5 28bc9c90552041488dc5dcf637f494fb
BLAKE2b-256 ffd9585bb746333bfea82887d919c39e40fda70f968648cab6bc1c6c854e997c

See more details on using hashes here.

File details

Details for the file flac_detective-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: flac_detective-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 91.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for flac_detective-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 91d1cc708e31bceaeb0ceb14db4bd1661608bcb7fa5f446a785c37c8840d67e6
MD5 ed83f159cd8be20c748ba94363c09e37
BLAKE2b-256 57c675d91bc71e4d43054bd2b5756f6a23c41a6b6d0082cc4aa4f0ec4731e338

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page