diff options
Diffstat (limited to 'src/pke-at-common.cpp')
| -rw-r--r-- | src/pke-at-common.cpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/src/pke-at-common.cpp b/src/pke-at-common.cpp index 8372bcc..1df5521 100644 --- a/src/pke-at-common.cpp +++ b/src/pke-at-common.cpp @@ -53,3 +53,130 @@ AssetHandle pke_at_audio_get_or_generate_sawtooth(double pitch_freq, double dura handle = AM_Register(key, PKE_ASSET_TYPE_AUDIO, bytes, len, 64, &details); return handle; } + +int case_insensitive_equal(const char *lhs, const char *rhs) { + while (*lhs && *rhs) { + if (tolower((unsigned char)*lhs) != tolower((unsigned char)*rhs)) { + return 0; + } + lhs++; + rhs++; + } + return *lhs == *rhs; +} + +PKE_AT_KEY_INDEX parse_key_from_string(const char *key) { + switch (key[0]) { + case 'c': + case 'C': + if (strlen(key) == 1 || key[1] != '#') { + return PKE_AT_KEY_INDEX_C; + } + if (key[1] == '#') { + return PKE_AT_KEY_INDEX_C_SHARP; + } + break; + case 'd': + case 'D': + if (strlen(key) == 1 || (key[1] != 'b' && key[1] != '#')) { + return PKE_AT_KEY_INDEX_D; + } + if (key[1] == 'b') { + return PKE_AT_KEY_INDEX_D_FLAT; + } + if (key[1] == '#') { + return PKE_AT_KEY_INDEX_D_SHARP; + } + break; + case 'e': + case 'E': + if (strlen(key) == 1 || key[1] != 'b') { + return PKE_AT_KEY_INDEX_E; + } + if (key[1] == 'b') { + return PKE_AT_KEY_INDEX_E_FLAT; + } + break; + case 'f': + case 'F': + if (strlen(key) == 1 || (key[1] != 'b' && key[1] != '#')) { + return PKE_AT_KEY_INDEX_F; + } + if (key[1] == '#') { + return PKE_AT_KEY_INDEX_F_SHARP; + } + break; + case 'g': + case 'G': + if (strlen(key) == 1 || (key[1] != 'b' && key[1] != '#')) { + return PKE_AT_KEY_INDEX_G; + } + if (key[1] == 'b') { + return PKE_AT_KEY_INDEX_G_FLAT; + } + if (key[1] == '#') { + return PKE_AT_KEY_INDEX_G_SHARP; + } + break; + case 'a': + case 'A': + if (strlen(key) == 1 || (key[1] != 'b' && key[1] != '#')) { + return PKE_AT_KEY_INDEX_A; + } + if (key[1] == 'b') { + return PKE_AT_KEY_INDEX_A_FLAT; + } + if (key[1] == '#') { + return PKE_AT_KEY_INDEX_A_SHARP; + } + break; + case 'b': + case 'B': + if (strlen(key) == 1 || key[1] != 'b') { + return PKE_AT_KEY_INDEX_B; + } + if (key[1] == 'b') { + return PKE_AT_KEY_INDEX_B_FLAT; + } + default: + break; + } + return PKE_AT_KEY_INDEX_NONE; +} + +PKE_AT_SECTION_TYPE_INDEX parse_section_type_from_string(const char *section) { + if (case_insensitive_equal(section, "verse")) { + return PKE_AT_SECTION_TYPE_INDEX_VERSE; + } + if (case_insensitive_equal(section, "chorus")) { + return PKE_AT_SECTION_TYPE_INDEX_CHORUS; + } + if (case_insensitive_equal(section, "bridge")) { + return PKE_AT_SECTION_TYPE_INDEX_BRIDGE; + } + if (case_insensitive_equal(section, "intro")) { + return PKE_AT_SECTION_TYPE_INDEX_INTRO; + } + if (case_insensitive_equal(section, "outro")) { + return PKE_AT_SECTION_TYPE_INDEX_OUTRO; + } + if (case_insensitive_equal(section, "end")) { + return PKE_AT_SECTION_TYPE_INDEX_END; + } + if (case_insensitive_equal(section, "ending")) { + return PKE_AT_SECTION_TYPE_INDEX_ENDING; + } + if (case_insensitive_equal(section, "instrumental")) { + return PKE_AT_SECTION_TYPE_INDEX_INSTRUMENTAL; + } + if (case_insensitive_equal(section, "interlude")) { + return PKE_AT_SECTION_TYPE_INDEX_INTERLUDE; + } + if (case_insensitive_equal(section, "refrain")) { + return PKE_AT_SECTION_TYPE_INDEX_REFRAIN; + } + if (case_insensitive_equal(section, "tag")) { + return PKE_AT_SECTION_TYPE_INDEX_TAG; + } + return PKE_AT_SECTION_TYPE_INDEX_NONE; +} |
