Compare Module
Compare module for mixref - A/B comparison tools.
- class mixref.compare.BandComparison[source]
Bases:
objectComparison of a single frequency band.
- __init__(band_name, track_energy, reference_energy, difference, is_significant)
- class mixref.compare.ComparisonResult[source]
Bases:
objectComplete A/B comparison result.
- loudness
Loudness comparison
- spectral
Spectral balance comparison
- loudness: LoudnessComparison
- spectral: SpectralComparison
- __init__(track_name, reference_name, loudness, spectral, track_bpm=None, reference_bpm=None, bpm_difference=None, track_key=None, reference_key=None)
- class mixref.compare.LoudnessComparison[source]
Bases:
objectComparison of loudness metrics between two tracks.
- __init__(track_lufs, reference_lufs, lufs_difference, track_peak, reference_peak, peak_difference, track_lra, reference_lra, lra_difference)
- class mixref.compare.SpectralComparison[source]
Bases:
objectComparison of spectral balance between two tracks.
- bands
List of band comparisons (Sub, Low, Mid, High, Air)
- bands: list[BandComparison]
- __init__(bands)
- mixref.compare.compare_loudness(track_result, reference_result)[source]
Compare loudness metrics between two tracks.
- Parameters:
track_result (LoudnessResult) – Loudness result for the track being analyzed
reference_result (LoudnessResult) – Loudness result for the reference track
- Returns:
LoudnessComparison with differences
- Return type:
Example
>>> from mixref.meters import calculate_lufs >>> track_lufs = calculate_lufs(track_audio, 44100) >>> ref_lufs = calculate_lufs(ref_audio, 44100) >>> comparison = compare_loudness(track_lufs, ref_lufs) >>> print(f"LUFS difference: {comparison.lufs_difference:+.1f} dB") LUFS difference: -2.1 dB
- mixref.compare.compare_spectral(track_result, reference_result, significance_threshold=3.0)[source]
Compare spectral balance between two tracks.
- Parameters:
track_result (SpectralResult) – Spectral result for the track being analyzed
reference_result (SpectralResult) – Spectral result for the reference track
significance_threshold (float) – Minimum difference (in percentage points) to be considered significant. Default: 3.0 (roughly 3dB difference)
- Returns:
SpectralComparison with band-by-band differences
- Return type:
Example
>>> from mixref.detective import analyze_spectrum >>> track_spec = analyze_spectrum(track_audio, 44100) >>> ref_spec = analyze_spectrum(ref_audio, 44100) >>> comparison = compare_spectral(track_spec, ref_spec) >>> for band in comparison.bands: ... if band.is_significant: ... print(f"{band.band_name}: {band.difference:+.1f}%") Sub: -3.2% High: +4.1%
- mixref.compare.compare_tracks(track_audio, reference_audio, sample_rate, track_name='Track', reference_name='Reference', include_bpm=False, include_key=False)[source]
Compare two audio tracks comprehensively.
Analyzes both tracks and compares loudness, spectral balance, BPM, and key.
- Parameters:
track_audio (ndarray[Any, dtype[float32]]) – Audio data for track being analyzed. Shape: (samples,) for mono or (samples, channels) for stereo
reference_audio (ndarray[Any, dtype[float32]]) – Audio data for reference track. Shape: (samples,) for mono or (samples, channels) for stereo
sample_rate (int) – Sample rate in Hz (must be same for both tracks)
track_name (str) – Human-readable name for the track (e.g., filename)
reference_name (str) – Human-readable name for the reference
include_bpm (bool) – If True, detect and compare BPM (slower)
include_key (bool) – If True, detect and compare musical key (slower)
- Returns:
ComparisonResult with all metrics
- Raises:
ValueError – If audio arrays have incompatible shapes or invalid sample rate
- Return type:
Example
>>> from mixref.audio import load_audio >>> track, sr = load_audio("my_mix.wav") >>> reference, _ = load_audio("pro_reference.wav", sample_rate=sr) >>> result = compare_tracks(track, reference, sr, include_bpm=True) >>> print(f"LUFS diff: {result.loudness.lufs_difference:+.1f} dB") LUFS diff: -2.3 dB