From e6714edc3cd013e3422768417ae8859cade57214 Mon Sep 17 00:00:00 2001 From: Jan Holthuis Date: Fri, 12 Feb 2021 00:20:19 +0100 Subject: [PATCH] core/music/key: Add support for Serato key strings --- core/src/music/key/mod.rs | 62 +++++++++++++++++++++++++++++++++++++++ media/src/util/mod.rs | 4 +++ 2 files changed, 66 insertions(+) diff --git a/core/src/music/key/mod.rs b/core/src/music/key/mod.rs index 8cc6db82..3488ad76 100644 --- a/core/src/music/key/mod.rs +++ b/core/src/music/key/mod.rs @@ -449,6 +449,68 @@ impl KeyCode { _ => Unknown, } } + + pub fn as_serato_str(self) -> &'static str { + use KeyCode::*; + match self { + Unknown => "", + Cmaj => "C", + Amin => "Am", + Gmaj => "G", + Emin => "Em", + Dmaj => "D", + Bmin => "Bm", + Amaj => "A", + Gbmin => "F#m", + Emaj => "E", + Dbmin => "C#m", + Bmaj => "B", + Abmin => "G#m", + Gbmaj => "F#", + Ebmin => "Ebm", + Dbmaj => "C#", + Bbmin => "Bbm", + Abmaj => "G#", + Fmin => "Fm", + Ebmaj => "Eb", + Cmin => "Cm", + Bbmaj => "Bb", + Gmin => "Gm", + Fmaj => "F", + Dmin => "Dm", + } + } + + pub fn from_serato_str(s: &str) -> Self { + use KeyCode::*; + match s { + "C" => Cmaj, + "Am" => Amin, + "G" => Gmaj, + "Em" => Emin, + "D" => Dmaj, + "Bm" => Bmin, + "A" => Amaj, + "F#m" => Gbmin, + "E" => Emaj, + "C#m" => Dbmin, + "B" => Bmaj, + "G#m" => Abmin, + "F#" => Gbmaj, + "Ebm" => Ebmin, + "C#" => Dbmaj, + "Bbm" => Bbmin, + "G#" => Abmaj, + "Fm" => Fmin, + "Eb" => Ebmaj, + "Cm" => Cmin, + "Bb" => Bbmaj, + "Gm" => Gmin, + "F" => Fmaj, + "Dm" => Dmin, + _ => Unknown, + } + } } pub type KeyCodeValue = u8; diff --git a/media/src/util/mod.rs b/media/src/util/mod.rs index 60482a03..54a1e7e4 100644 --- a/media/src/util/mod.rs +++ b/media/src/util/mod.rs @@ -194,6 +194,10 @@ pub fn parse_key_signature(input: &str) -> Option { if key_code != KeyCode::Unknown { return Some(key_code.into()); } + let key_code = KeyCode::from_serato_str(input); + if key_code != KeyCode::Unknown { + return Some(key_code.into()); + } log::warn!("Failed to parse key signature from input '{}'", input); None } -- GitLab