kohacraft Lab
/
kc_YMZ294player
YMZ294 Player. modified from "Yamaguchi's YMZ294 Library" for LPC1114.
Player/Note.cpp@0:7a56bf0441ea, 2015-12-09 (annotated)
- Committer:
- kohacraft
- Date:
- Wed Dec 09 01:38:08 2015 +0000
- Revision:
- 0:7a56bf0441ea
YMZ294 Player. modified from "Yamaguchi's YMZ294 Library" for LPC1114
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kohacraft | 0:7a56bf0441ea | 1 | #include "Note.h" |
kohacraft | 0:7a56bf0441ea | 2 | |
kohacraft | 0:7a56bf0441ea | 3 | int const WHOLE = 1920; |
kohacraft | 0:7a56bf0441ea | 4 | |
kohacraft | 0:7a56bf0441ea | 5 | Note::Note(int pitch, int dur, bool tie) { |
kohacraft | 0:7a56bf0441ea | 6 | this->pitch = pitch; |
kohacraft | 0:7a56bf0441ea | 7 | this->dur = dur; |
kohacraft | 0:7a56bf0441ea | 8 | this->tie = tie; |
kohacraft | 0:7a56bf0441ea | 9 | } |
kohacraft | 0:7a56bf0441ea | 10 | |
kohacraft | 0:7a56bf0441ea | 11 | Note::Note(const char* s) { |
kohacraft | 0:7a56bf0441ea | 12 | char c = *s; |
kohacraft | 0:7a56bf0441ea | 13 | pitch = ('A' <= c && c <= 'G') ? (5 * (c - 'A') + 1) / 3 : -1; |
kohacraft | 0:7a56bf0441ea | 14 | |
kohacraft | 0:7a56bf0441ea | 15 | if (pitch != -1) { |
kohacraft | 0:7a56bf0441ea | 16 | c = *++s; |
kohacraft | 0:7a56bf0441ea | 17 | while (c < '0' || '9' < c) { |
kohacraft | 0:7a56bf0441ea | 18 | if (c == '#') { |
kohacraft | 0:7a56bf0441ea | 19 | pitch++; |
kohacraft | 0:7a56bf0441ea | 20 | } else if (c == 'b') { |
kohacraft | 0:7a56bf0441ea | 21 | pitch--; |
kohacraft | 0:7a56bf0441ea | 22 | } |
kohacraft | 0:7a56bf0441ea | 23 | c = *++s; |
kohacraft | 0:7a56bf0441ea | 24 | } |
kohacraft | 0:7a56bf0441ea | 25 | if (pitch < 3) { |
kohacraft | 0:7a56bf0441ea | 26 | pitch += 12; |
kohacraft | 0:7a56bf0441ea | 27 | } |
kohacraft | 0:7a56bf0441ea | 28 | pitch += (c - '0') * 12 + 9; |
kohacraft | 0:7a56bf0441ea | 29 | } else { |
kohacraft | 0:7a56bf0441ea | 30 | pitch = 0; |
kohacraft | 0:7a56bf0441ea | 31 | } |
kohacraft | 0:7a56bf0441ea | 32 | |
kohacraft | 0:7a56bf0441ea | 33 | s++; |
kohacraft | 0:7a56bf0441ea | 34 | dur = 0; |
kohacraft | 0:7a56bf0441ea | 35 | tie = false; |
kohacraft | 0:7a56bf0441ea | 36 | while (*s) { |
kohacraft | 0:7a56bf0441ea | 37 | switch (*s++) { |
kohacraft | 0:7a56bf0441ea | 38 | case 'w': |
kohacraft | 0:7a56bf0441ea | 39 | dur += WHOLE; //whole note |
kohacraft | 0:7a56bf0441ea | 40 | break; |
kohacraft | 0:7a56bf0441ea | 41 | case 'h': |
kohacraft | 0:7a56bf0441ea | 42 | dur += WHOLE / 2; // half note |
kohacraft | 0:7a56bf0441ea | 43 | break; |
kohacraft | 0:7a56bf0441ea | 44 | case 'q': |
kohacraft | 0:7a56bf0441ea | 45 | dur += WHOLE / 4; // quarter |
kohacraft | 0:7a56bf0441ea | 46 | break; |
kohacraft | 0:7a56bf0441ea | 47 | case 'i': |
kohacraft | 0:7a56bf0441ea | 48 | dur += WHOLE / 8; // eighth |
kohacraft | 0:7a56bf0441ea | 49 | break; |
kohacraft | 0:7a56bf0441ea | 50 | case 's': |
kohacraft | 0:7a56bf0441ea | 51 | dur += WHOLE / 16; // sixteenth |
kohacraft | 0:7a56bf0441ea | 52 | break; |
kohacraft | 0:7a56bf0441ea | 53 | case 't': |
kohacraft | 0:7a56bf0441ea | 54 | dur += WHOLE / 32; // thirty-second |
kohacraft | 0:7a56bf0441ea | 55 | break; |
kohacraft | 0:7a56bf0441ea | 56 | case 'x': |
kohacraft | 0:7a56bf0441ea | 57 | dur += WHOLE / 64; // sixty-fourth |
kohacraft | 0:7a56bf0441ea | 58 | break; |
kohacraft | 0:7a56bf0441ea | 59 | case 'o': |
kohacraft | 0:7a56bf0441ea | 60 | dur += WHOLE / 128; // one-twenty-eighth |
kohacraft | 0:7a56bf0441ea | 61 | break; |
kohacraft | 0:7a56bf0441ea | 62 | case '.': // dot - only single . is supported |
kohacraft | 0:7a56bf0441ea | 63 | dur += dur / 2; |
kohacraft | 0:7a56bf0441ea | 64 | break; |
kohacraft | 0:7a56bf0441ea | 65 | case '/': // triplet |
kohacraft | 0:7a56bf0441ea | 66 | dur = dur * 2 / 3; |
kohacraft | 0:7a56bf0441ea | 67 | break; |
kohacraft | 0:7a56bf0441ea | 68 | case '-': |
kohacraft | 0:7a56bf0441ea | 69 | case '_': |
kohacraft | 0:7a56bf0441ea | 70 | tie = true; |
kohacraft | 0:7a56bf0441ea | 71 | break; |
kohacraft | 0:7a56bf0441ea | 72 | } |
kohacraft | 0:7a56bf0441ea | 73 | } |
kohacraft | 0:7a56bf0441ea | 74 | } |