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