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 "Layer.h"
kohacraft 0:7a56bf0441ea 2
kohacraft 0:7a56bf0441ea 3 Layer::Layer() {}
kohacraft 0:7a56bf0441ea 4
kohacraft 0:7a56bf0441ea 5 Layer::Layer(MusicString& ms) : ms(ms), note(), tick(0) {}
kohacraft 0:7a56bf0441ea 6
kohacraft 0:7a56bf0441ea 7 int Layer::play(YMZ294& soundGen, Ch channel, int tick, bool attenuate) {
kohacraft 0:7a56bf0441ea 8 note.dur -= tick - this->tick;
kohacraft 0:7a56bf0441ea 9 this->tick = tick;
kohacraft 0:7a56bf0441ea 10
kohacraft 0:7a56bf0441ea 11 if (note.dur == 0) {
kohacraft 0:7a56bf0441ea 12 if (ms.hasMoreNote()) {
kohacraft 0:7a56bf0441ea 13 note = ms.getNextNote();
kohacraft 0:7a56bf0441ea 14 while (note.tie && ms.hasMoreNote()) {
kohacraft 0:7a56bf0441ea 15 Note note2 = ms.getNextNote();
kohacraft 0:7a56bf0441ea 16 note.dur += note2.dur;
kohacraft 0:7a56bf0441ea 17 note.tie = note2.tie;
kohacraft 0:7a56bf0441ea 18 }
kohacraft 0:7a56bf0441ea 19
kohacraft 0:7a56bf0441ea 20 if (note.pitch != 0) {
kohacraft 0:7a56bf0441ea 21 float freq = 30.8677 * pow(1.059463, note.pitch - 23);
kohacraft 0:7a56bf0441ea 22 soundGen.setVolume(channel, 16);
kohacraft 0:7a56bf0441ea 23 soundGen.setTone(channel, freq);
kohacraft 0:7a56bf0441ea 24 } else {
kohacraft 0:7a56bf0441ea 25 if (attenuate)
kohacraft 0:7a56bf0441ea 26 soundGen.setVolume(channel, 0);
kohacraft 0:7a56bf0441ea 27 }
kohacraft 0:7a56bf0441ea 28 }
kohacraft 0:7a56bf0441ea 29 } else {
kohacraft 0:7a56bf0441ea 30 soundGen.setVolume(channel, 0);
kohacraft 0:7a56bf0441ea 31 }
kohacraft 0:7a56bf0441ea 32
kohacraft 0:7a56bf0441ea 33 return note.dur;
kohacraft 0:7a56bf0441ea 34 }
kohacraft 0:7a56bf0441ea 35
kohacraft 0:7a56bf0441ea 36 void Layer::rewind() {
kohacraft 0:7a56bf0441ea 37 ms.rewind();
kohacraft 0:7a56bf0441ea 38 note.pitch = 0;
kohacraft 0:7a56bf0441ea 39 note.dur = 0;
kohacraft 0:7a56bf0441ea 40 note.tie = false;
kohacraft 0:7a56bf0441ea 41 tick = 0;
kohacraft 0:7a56bf0441ea 42 }
kohacraft 0:7a56bf0441ea 43
kohacraft 0:7a56bf0441ea 44 bool Layer::isNull() {
kohacraft 0:7a56bf0441ea 45 return ms.isNull();
kohacraft 0:7a56bf0441ea 46 }