kohacraft Lab
/
kc_YMZ294player
YMZ294 Player. modified from "Yamaguchi's YMZ294 Library" for LPC1114.
Player/Layer.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 "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 | } |