YMZ294 Player. modified from "Yamaguchi's YMZ294 Library" for LPC1114.

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }