/* called when a split is crossed */ extern "C" __declspec(dllexport) void RunSplit(void *_pData, int _iDataSize) { SPluginsKartSplit_t *psSplitData; psSplitData = (SPluginsKartSplit_t*)_pData; if (pBuf) UpdateSplit(psSplitData); }
void Global::Init() { lastChangeValue = CHGT_PAGE; memset(tapTempo,0, sizeof(tapTempo)); CurPage=0; Recorder.nb_Rec_Record = 0; Recorder.cur_Rec_Record = 0; Recorder.cur_Play_Record = 0; Recorder.mode_Record = RECORD_OFF; ParamGlo.Tempo = 100; ParamGlo.Groove = 0; ParamGlo.Active[MODE_SEQEUCLID]=0; ParamGlo.Active[MODE_SEQSTEP]=0; ParamGlo.Active[MODE_SEQTR]=0; ParamGlo.Active[MODE_ARPEGE]=1; ParamGlo.keyInput=0; ParamGlo.canInput=0; ParamGlo.Split=0; ParamGlo.LastNote=ParamGlo.LastLowerNote=ParamGlo.LastUpperNote=ParamGlo.NoteSplit=48; ParamGlo.UpperDest=NOUT_NONE; ParamGlo.UpperTrans=0; ParamGlo.LowerDest=NOUT_NONE; ParamGlo.LowerTrans=0; ParamGlo.LowerChan=1; ParamGlo.CVTrig=0; ParamGlo.ArpSrc=0; ParamGlo.EuSrc=0; ParamGlo.StSrc=0; ParamGlo.TrSrc=0; ParamGlo.ClockSrc=CLOCK_INT; ParamGlo.ClockDiv=1; ParamGlo.TrigInDir=1; ParamGlo.Bend=2; memset(ParamGlo.FINE_CV,0,sizeof(int16_t)*8); SClock.SetModeClock(ParamGlo.ClockSrc, ParamGlo.ClockDiv); for (int ct=0;ct<NB_ROUTES;ct++) { Routes[ct].Perim = PER_NONE; Routes[ct].Source = 0; Routes[ct].Chanel = 0; Routes[ct].MidiType = 0; } UpdateSplit(); }
void Global::Restore() { MySD.ReadStream((byte *)Routes, sizeof(Routes) ) ; MySD.ReadStream((byte *)&ParamGlo, sizeof(ParamGlo) ) ; MySD.ReadStream((byte *)&Recorder, sizeof(Recorder) ) ; UpdateRoute(0); UpdateSplit(); SClock.ChangeTempo(); }
boolean Global::ChangeValue(int cpt, int value, byte Encoder) { boolean ret = false; int newValue; int pos; int offset; // cpt compte de 1 Ã ... if (cpt >=16) cpt-=6; cpt++; switch (CurPage) { case 0 : switch(cpt) { case 2: newValue = encnewmap(value, 0, 2, ParamGlo.Active[MODE_SEQEUCLID] ,Encoder); if (newValue != ParamGlo.Active[MODE_SEQEUCLID] ) { ParamGlo.Active[MODE_SEQEUCLID] = newValue; if ( ParamGlo.Active[MODE_SEQEUCLID] && is_played && !SeqEu.is_played ) SeqEu.ExStart(false); if ( !ParamGlo.Active[MODE_SEQEUCLID] && is_played && SeqEu.is_played ) SeqEu.ExStop(); ret = true; UpdateCtrl(cpt); }; break; case 3: newValue = encnewmap(value, 0, 2, ParamGlo.Active[MODE_SEQSTEP],Encoder); if (newValue != ParamGlo.Active[MODE_SEQSTEP] ) { ParamGlo.Active[MODE_SEQSTEP] = newValue; if ( ParamGlo.Active[MODE_SEQSTEP] && is_played && !SeqSt.is_played ) SeqSt.ExStart(false); if ( !ParamGlo.Active[MODE_SEQSTEP] && is_played && SeqSt.is_played ) SeqSt.ExStop(); ret = true; UpdateCtrl(cpt); }; break; case 4: newValue = encnewmap(value, 0, 2, ParamGlo.Active[MODE_SEQTR] ,Encoder); if (newValue != ParamGlo.Active[MODE_SEQTR] ) { ParamGlo.Active[MODE_SEQTR] = newValue; if ( ParamGlo.Active[MODE_SEQTR] && is_played && !SeqTr.is_played ) SeqTr.ExStart(false); if ( !ParamGlo.Active[MODE_SEQTR] && is_played && SeqTr.is_played ) SeqTr.ExStop(); ret = true; UpdateCtrl(cpt); }; break; case 5: newValue = encnewmap(value, 0, 2, ParamGlo.Active[MODE_ARPEGE],Encoder); if (newValue != ParamGlo.Active[MODE_ARPEGE] ) { ParamGlo.Active[MODE_ARPEGE] = newValue; if ( ParamGlo.Active[MODE_ARPEGE] && is_played && !Arp.is_played ) Arp.ExStart(false); if ( !ParamGlo.Active[MODE_ARPEGE] && is_played && Arp.is_played ) Arp.ExStop(); ret = true; UpdateCtrl(cpt); }; break; case 7: newValue = encnewmap(value, 0, 3, ParamGlo.EuSrc,Encoder); if (newValue != ParamGlo.EuSrc ) { switch( ParamGlo.EuSrc ) { case 0: LastOffset = ParamGlo.LastNote;break; case 1: LastOffset = ParamGlo.LastUpperNote;break; case 2: LastOffset = ParamGlo.LastLowerNote;break; } ParamGlo.EuSrc = newValue; switch( ParamGlo.EuSrc ) { case 0: ParamGlo.LastNote = LastOffset; break; case 1: ParamGlo.LastUpperNote = LastOffset; break; case 2: ParamGlo.LastLowerNote = LastOffset; break; } ret = true; UpdateCtrl(cpt); UpdateSplit(); }; break; case 8: newValue = encnewmap(value, 0, 3, ParamGlo.StSrc,Encoder); if (newValue != ParamGlo.StSrc ) { switch( ParamGlo.StSrc ) { case 0: LastOffset = ParamGlo.LastNote;break; case 1: LastOffset = ParamGlo.LastUpperNote;break; case 2: LastOffset = ParamGlo.LastLowerNote;break; } ParamGlo.StSrc = newValue; switch( ParamGlo.StSrc ) { case 0: ParamGlo.LastNote = LastOffset; break; case 1: ParamGlo.LastUpperNote = LastOffset; break; case 2: ParamGlo.LastLowerNote = LastOffset; break; } ret = true; UpdateCtrl(cpt); UpdateSplit(); }; break; case 9: newValue = encnewmap(value, 0, 3, ParamGlo.TrSrc,Encoder); if (newValue != ParamGlo.TrSrc ) { switch( ParamGlo.TrSrc ) { case 0: LastOffset = ParamGlo.LastNote;break; case 1: LastOffset = ParamGlo.LastUpperNote;break; case 2: LastOffset = ParamGlo.LastLowerNote;break; } ParamGlo.TrSrc = newValue; switch( ParamGlo.TrSrc ) { case 0: ParamGlo.LastNote = LastOffset; break; case 1: ParamGlo.LastUpperNote = LastOffset; break; case 2: ParamGlo.LastLowerNote = LastOffset; break; } ret = true; UpdateCtrl(cpt); UpdateSplit(); }; break; case 10: newValue = encnewmap(value, 0, 3, ParamGlo.ArpSrc,Encoder); if (newValue != ParamGlo.ArpSrc ) { switch( ParamGlo.ArpSrc ) { case 0: LastOffset = ParamGlo.LastNote;break; case 1: LastOffset = ParamGlo.LastUpperNote;break; case 2: LastOffset = ParamGlo.LastLowerNote;break; } ParamGlo.ArpSrc = newValue; switch( ParamGlo.ArpSrc ) { case 0: ParamGlo.LastNote = LastOffset; break; case 1: ParamGlo.LastUpperNote = LastOffset; break; case 2: ParamGlo.LastLowerNote = LastOffset; break; } ret = true; UpdateCtrl(cpt); UpdateSplit(); }; break; case 11: newValue = encnewmap(value, 0, 4, ParamGlo.keyInput,Encoder); if (newValue != ParamGlo.keyInput ) { ParamGlo.keyInput = newValue; ret = true; UpdateCtrl(cpt); UpdateSplit(); }; break; case 12: newValue = encnewmap(value, 0, 1, ParamGlo.Split,Encoder); if (newValue !=ParamGlo.Split ) { SPOut.AutoOff( ParamGlo.UpperDest ); SPOut.AutoOff( ParamGlo.LowerDest ); ParamGlo.Split = newValue; ret = true; UpdateCtrl(cpt); UpdateSplit(); }; break; case 13: newValue = encnewmap(value, 0, NB_OUTS , ParamGlo.UpperDest,Encoder); if (newValue != ParamGlo.UpperDest ) { SPOut.AutoOff( ParamGlo.UpperDest ); ParamGlo.UpperDest = newValue; ret = true; UpdateCtrl(cpt); }; break; case 14: newValue = encnewmap(value, 0, NB_OUTS, ParamGlo.LowerDest,Encoder ); if (newValue != ParamGlo.LowerDest ) { SPOut.AutoOff( ParamGlo.LowerDest ); ParamGlo.LowerDest = newValue; ret = true; UpdateCtrl(cpt); }; break; case 15: newValue = encnewmap(value, 0, 6 , ParamGlo.CVTrig,Encoder); if (newValue != ParamGlo.CVTrig ) { ParamGlo.CVTrig = newValue; ret = true; UpdateCtrl(cpt); }; break; case 16: newValue = encnewmap(value, 0, 20 , ParamGlo.canInput,Encoder); if (newValue != ParamGlo.canInput ) { ParamGlo.canInput = newValue; ret = true; UpdateCtrl(cpt); }; break; case 17: newValue = encnewmap(value, 12, 72 , ParamGlo.NoteSplit,Encoder); if (newValue != ParamGlo.NoteSplit ) { SPOut.AutoOff( ParamGlo.UpperDest ); SPOut.AutoOff( ParamGlo.LowerDest ); ParamGlo.NoteSplit = newValue; ret = true; UpdateCtrl(cpt); UpdateSplit(); }; break; case 18: newValue = encnewmap(value, -3, 3 , ParamGlo.UpperTrans,Encoder); if (newValue != ParamGlo.UpperTrans ) { SPOut.AutoOff( ParamGlo.UpperDest ); ParamGlo.UpperTrans = newValue; ret = true; UpdateCtrl(cpt); UpdateSplit(); }; break; case 19: newValue = encnewmap(value, -3, 3 , ParamGlo.LowerTrans,Encoder); if (newValue != ParamGlo.LowerTrans ) { SPOut.AutoOff( ParamGlo.LowerDest ); ParamGlo.LowerTrans = newValue; ret = true; UpdateCtrl(cpt); UpdateSplit(); }; break; case 20: newValue = encnewmap(value, 1, 16, ParamGlo.LowerChan,Encoder ); if (newValue != ParamGlo.LowerChan ) { SPOut.AutoOff( ParamGlo.LowerDest ); ParamGlo.LowerChan = newValue; ret = true; UpdateCtrl(cpt); }; break; } break; case 1 : switch(cpt) { case 2: newValue = encnewmap(value, 0, 6, ParamGlo.ClockSrc,Encoder); if (newValue != ParamGlo.ClockSrc ) { ParamGlo.ClockSrc = newValue; SClock.SetModeClock(ParamGlo.ClockSrc, ParamGlo.ClockDiv); ret = true; UpdateCtrl(cpt); }; break; case 3: newValue = encnewmap(value, 1, 8, ParamGlo.ClockDiv,Encoder); if (newValue != ParamGlo.ClockDiv ) { ParamGlo.ClockDiv = newValue; SClock.SetModeClock(ParamGlo.ClockSrc, ParamGlo.ClockDiv); ret = true; UpdateCtrl(cpt); }; break; case 4: newValue = encnewmap(value, 1, 2, ParamGlo.TrigInDir,Encoder); if (newValue != ParamGlo.TrigInDir ) { ParamGlo.TrigInDir = newValue; ret = true; UpdateCtrl(cpt); }; break; case 5: newValue = encnewmap(value, 1, 12, ParamGlo.Bend,Encoder); if (newValue != ParamGlo.Bend ) { ParamGlo.Bend = newValue; ret = true; UpdateCtrl(cpt); }; break; case 12: case 13: case 14: case 15: case 17: case 18: case 19: case 20: pos=(cpt > 15)?cpt-13:cpt-12; newValue = encnewmap(value, -100, +100 , ParamGlo.FINE_CV[pos],Encoder); if (newValue != ParamGlo.FINE_CV[pos] ) { ParamGlo.FINE_CV[pos] = newValue; ret = true; UpdateCtrl(cpt); } break; } break; case 2: offset = CurPage-2; switch(cpt) { case 2: case 3: case 4: case 5: case 7: case 8: case 9: case 10: pos=(cpt > 6)?cpt-3:cpt-2; newValue = encnewmap(value, 0, 1 , CV_Type[pos],Encoder); if (newValue != CV_Type[pos] ) { CV_Type[pos] = newValue; ret = true; UpdateCtrl(cpt); } break; case 12: case 13: case 14: case 15: case 17: case 18: case 19: case 20: pos=(cpt > 15)?cpt-13:cpt-12; newValue = encnewmap(value, 0, 1 , TRIG_Type[pos],Encoder); if (newValue != TRIG_Type[pos] ) { TRIG_Type[pos] = newValue; ret = true; UpdateCtrl(cpt); SPOut.AutoOff(NOUT_CVALL+pos); } break; } break; default: offset = CurPage-3; switch(cpt) { case 1: case 2: case 3: case 4: case 5: pos=cpt-1; newValue = encnewmap(value, 0, 2 , Routes[pos + offset].Perim,Encoder); if (newValue != Routes[pos + offset].Perim ) { Routes[pos + offset].Perim = newValue; ret = true; UpdateCtrl(cpt); UpdateRoute( Routes[pos + offset].Route); } break; case 6: case 7: case 8: case 9: case 10: pos=cpt-6; newValue = encnewmap(value, 0, ( Routes[pos + offset].Type == RT_MIDI ) ? 4 : 2 , Routes[pos + offset].Source, Encoder); if (newValue != Routes[pos + offset].Source ) { Routes[pos + offset].Source = newValue; ret = true; UpdateCtrl(cpt); UpdateRoute( Routes[pos + offset].Route); } break; case 11: case 12: case 13: case 14: case 15: pos=cpt-11; newValue = encnewmap(value, 0, 23, Routes[pos + offset].Chanel, Encoder ); if (newValue != Routes[pos + offset].Chanel) { Routes[pos + offset].Chanel = newValue; ret = true; UpdateCtrl(cpt); UpdateRoute( Routes[pos + offset].Route); } break; case 16: case 17: case 18: case 19: case 20: pos=cpt-16; if ( Routes[pos + offset].Type != RT_MIDI ) { newValue = encnewmap(value, 0, 127 + 2, Routes[pos + offset].MidiType , Encoder ); if (newValue != Routes[pos + offset].MidiType) { Routes[pos + offset].MidiType = newValue; ret = true; UpdateCtrl(cpt); UpdateRoute( Routes[pos + offset].Route); } } break; } break; } return ret; }