Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Flush(void) {
- //! calculate delta
- u32 delta = (gMidi.gTick - gTick) * 24/gMidi.gDiv;
- //if(!delta) return;
- //! update tick position
- gTick += delta * gMidi.gDiv/24;
- //! flush chan cmds
- if(gVol&0x80) PushCmd(0x82, 1, (u8[]) {gVol &= 0x7F});
- if(gExp&0x80) PushCmd(0x83, 1, (u8[]) {gExp &= 0x7F});
- if(gPan&0x80) PushCmd(0x84, 1, (u8[]) {gPan &= 0x7F});
- if(gBnd&0x80) PushCmd(0x85, 1, (u8[]) {gBnd &= 0x7F});
- //! flush song cmds
- if(gBRn&0x80) PushCmd(0x88, 1, (u8[]) {gBRn &= 0x7F});
- if(gMidi.gTmp&0x800) {
- PushCmd(0x86, 1, (u8[]) {gMidi.gTmp &= 0xFF});
- }
- //! flush note off
- for(u32 i=0;i<gNoteOff.size();i++) {
- PushCmd(0x81, 1, (u8[]) {gNoteOff[i]});
- } gNoteOff.clear();
- //! flush note on (and patch set)
- for(u32 i=0;i<gNoteOn.size();i++) {
- u32 dat = gNoteOn[i];
- //! patch set or note on?
- if(dat & 0x80) {
- PushCmd(dat, 1, (u8[]) {dat>>8});
- } else PushCmd(0x80, 2, (u8[]) {dat, dat>>8});
- } gNoteOn.clear();
- //! push delta
- while(delta >= 96) {
- PushCmd(0x90+96, 0, 0);
- delta -= 96;
- } if(delta) PushCmd(0x90+delta, 0, 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement