KeyIT is a macOS musical key detector using CoreML + Accelerate, based on a CoreML port of MusicalKeyCNN.
Example:
./build/keyit-cli --input /path/to/song.mp3Options:
-i, --input <path>audio input (required)-m, --model <path>model path (.mlmodelcor.mlpackage)--ml-input <name>CoreML input feature name (defaultspec)--ml-output <name>CoreML output feature name (defaultlogits)--max-seconds <sec>cap analyzed duration from start (default480)--ml-cpu-onlyforce CPU-only CoreML execution--cqt-log-bias-calibration <path>per-bin float list for CQT log-bias calibration--dump-features <path>write CQT features as CSV (rows = bins)--dump-probs <path>write probabilities as 24 lines--benchprint benchmark timings--verboseverbose diagnostics-h, --helpusage
CLI output includes:
- top prediction (
Class,Camelot,Key,Confidence) - ambiguity status (
Ambiguous,margin) - alternate class/camelot/key when ambiguous
- top-5 class probabilities
Core path:
- decode to mono float32 (
AVFoundation) - resample to target rate (default
44.1kHz) - compute log-CQT-like matrix (
105bins by default) - trim trailing frames (default
2) - harmonic time-median enhancement (enabled by default)
- windowed CoreML inference (default window/hop
100/100) - probability aggregation with frame-energy gating
- optional section-voted probability blending (enabled by default)
- ambiguity margin / alternate prediction derivation
Advanced knobs are exposed in keyit::KeyitConfig (include/keyit/keyit.h).
Public API:
keyit::estimate_key_from_samples(...)keyit::compute_log_cqt_features_from_samples(...)keyit::camelot_label(...)keyit::key_name_label(...)
See include/keyit/keyit.h for config and result structures (KeyitConfig, KeyEstimate, PipelineTiming).
KeyIT builds on ideas and model work from MusicalKeyCNN.
Please cite and refer to the original publication for scientific use and further reading:
[1] F. Korzeniowski and G. Widmer. "Genre-Agnostic Key Classification With Convolutional Neural Networks". In: Proceedings of the 19th International Society for Music Information Retrieval Conference (ISMIR) (2018) arXiv
[2] F. Korzeniowski and G. Widmer. "End-to-End Musical Key Estimation Using a Convolutional Neural Network". In: Proceedings of the 25th European Signal Processing Conference (2017) arXiv
