feat: implement .chord file parser and canonical transposer; freeze requirements
src/tokenizer.py:
- parse_chord_file(Path) → ChordPeriod: reads header + bar body, strips //
comments, validates bar position counts and chord symbols, raises
ChordFormatError with filename and bar number on any violation.
- transpose_to_canonical(ChordPeriod) → ChordPeriod: shifts all chord roots
and bass notes by the semitone offset to C major / A minor; fast-path
returns the original object when shift == 0.
tests/test_chord_file_parser.py: 39 tests covering parsing of 4 valid fixtures
(C major, F# major, B minor, G# minor), error messages for 2 invalid
fixtures, and transposition correctness including slash chord root+bass.
tests/fixtures/: 6 .chord fixture files (4 valid, 2 invalid).
requirements.txt: pinned to current latest stable versions
(torch 2.12.0, music21 10.1.0, pretty_midi 0.2.11, matplotlib 3.10.9,
numpy 2.4.6, pandas 3.0.3, pytest 9.0.3); Python >= 3.11 noted.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+17
-7
@@ -1,7 +1,17 @@
|
||||
torch
|
||||
music21
|
||||
pretty_midi
|
||||
pytest
|
||||
matplotlib
|
||||
numpy
|
||||
pandas
|
||||
# Python >= 3.11 required
|
||||
# Tested on Python 3.12.10
|
||||
|
||||
# Core ML
|
||||
torch==2.12.0
|
||||
numpy==2.4.6
|
||||
pandas==3.0.3
|
||||
|
||||
# Music processing
|
||||
music21==10.1.0
|
||||
pretty_midi==0.2.11
|
||||
|
||||
# Visualization
|
||||
matplotlib==3.10.9
|
||||
|
||||
# Testing
|
||||
pytest==9.0.3
|
||||
|
||||
Reference in New Issue
Block a user