boolean Arpege::ChangePage(int value, byte Encoder) { boolean ret = false; int newValue; switch(Mode) { case MODE_PATT: newValue = encnewmap(value, 0, NB_ARP_TRACK-1, CurArp, Encoder); if (newValue != CurArp ) { if ( IsOn ) EventOff(); ret = true; CurArp = newValue; DessinPage(); UpdatePattern(); } break; case MODE_SONG: newValue = encnewmap(value, 0, NB_TR_SONG - 1, CurPlaySong, Encoder); if ( newValue != CurPlaySong ) { ret = true; ChangeCurPlaySong(newValue); } break; } return ret; }
boolean Arpege::ChangeM3(int value, byte Encoder) { boolean ret = false; if ( Menu->ChangeM3(value, Encoder) ) { if ( Menu->FirstPage ) { int newValue = Menu->M3-1; if (is_played==PLAYED) { NextArp = newValue; } else { if ( IsOn ) EventOff(); ret = true; CurArp = newValue; DessinPage(); UpdatePattern(); } ret = true; } } return ret; }
void Arpege::Init() { CurArp=0; CurTrSong=0; CurPlaySong=0; NextArp=-1; for (int pos=0;pos<NB_ARP_TRACK;pos++) { Tracks[pos].Direction=0; Tracks[pos].Octave=1; Tracks[pos].Note=0; Tracks[pos].Velomod=1; Tracks[pos].Veloci=127; Tracks[pos].Duree=9; Tracks[pos].Motif=0; Tracks[pos].Lg=16; Tracks[pos].Div=4; Tracks[pos].Maintien=0; Tracks[pos].Transpose=0; Tracks[pos].NMin=0; Tracks[pos].NMax=127; Tracks[pos].Modul=0; Tracks[pos].Ampli=0; Tracks[pos].Dest1=NOUT_MIDI1; Tracks[pos].Dest2=NOUT_NONE; Tracks[pos].Chanel=1; Tracks[pos].FillAuto=0; Tracks[pos].Tonale=48; Tracks[pos].Accord=0; Tracks[pos].Pattern = 0xFFF; } steep = 0; PosTrack=0; is_played=STOPPED; is_mode_write=true; is_played_Mode_Song=false; for (CurTrSong=0;CurTrSong<NB_TR_SONG;CurTrSong++) { Songs[CurTrSong].Track = ( CurTrSong % NB_ARP_TRACK ) + 1; Songs[CurTrSong].Repeat = 1; Songs[CurTrSong].Transpose = 0; Songs[CurTrSong].Next = (CurTrSong+1==NB_TR_SONG)?0:CurTrSong+2; } CurTrSong=0; mV_MIDI1=0; mV_MIDI2=0; mV_MIDI3=0; IsOn=false; TimeOff=0; CurNote=0; CurVelo=0; Mode=MODE_PATT; UpdatePattern(); AllIsOff=true; lastChangeValue = CHGT_PAGE; }
boolean Arpege::ChangePAT(int value) { boolean ret = false; int newValue; switch(Mode) { case MODE_PATT: newValue = PatLed.Map(value); if ( newValue > 0 ) { newValue--; if ( is_mode_write ) { uint16_t masq = 1 << newValue; if ( ( Tracks[CurArp].Pattern & masq ) == masq ) Tracks[CurArp].Pattern &= ~masq; else Tracks[CurArp].Pattern |= masq; } else { if ( newValue < NB_ARP_TRACK) { if (is_played==PLAYED) { NextArp = newValue; } else { if ( IsOn ) EventOff(); ret = true; CurArp = newValue; DessinPage(); UpdatePattern(); } } } } break; case MODE_SONG: newValue = newmap(value, 0, NB_TR_SONG - 5); if ( newValue != CurTrSong ) { ret = true; CurTrSong = newValue; DessinPage(); } break; } }
void wxMoColourPanel::OnPaint(wxPaintEvent& event) { wxBufferedPaintDC dc(this); if (m_Pattern.IsOk()) { UpdatePattern(); dc.DrawBitmap( m_Pattern, 0, 0, true ); } }
//Game logic bool CPatternTesterContext::Update() { m_fCounter += Ascension::Delta(); if(m_fCounter > PATTERN_UPDATE_GAP) { m_fCounter -= PATTERN_UPDATE_GAP; UpdatePattern(); } return m_bQuit == false; }
bool ADVBPatterns::DisablePattern(const AString& user, const AString& pattern) { ADVBLock lock("patterns"); bool changed = false; if (pattern[0] != '#') { changed = UpdatePattern(user, pattern, "#" + pattern); } return changed; }
bool ADVBPatterns::EnablePattern(const AString& user, const AString& pattern) { ADVBLock lock("patterns"); bool changed = false; if (pattern[0] == '#') { changed = UpdatePattern(user, pattern, pattern.Mid(1)); } return changed; }
bool ADVBPatterns::UpdatePattern(const AString& olduser, const AString& oldpattern, const AString& newuser, const AString& newpattern) { ADVBLock lock("patterns"); bool changed = false; if (newuser != olduser) { changed |= DeletePattern(olduser, oldpattern); if (newpattern.Valid()) { changed |= InsertPattern(newuser, newpattern); } } else if (newpattern != oldpattern) changed |= UpdatePattern(newuser, oldpattern, newpattern); return changed; }
void Arpege::ExStart(boolean pSong) { if ( is_played != STOPPED ) return; ParamGlo.MidiInput->Reset(1); AllIsOff = true; is_played_Mode_Song = pSong; steep = 0; PosTrack = 0; NextArp=-1; if ( is_played_Mode_Song ) { ChangeCurPlaySong(0); nbSteep=-1; CurArp = Songs[CurPlaySong].Track-1; if ( ActiFunc == NumFunc && Menu->FirstPage) Menu->ShowM3(CurArp+1); } UpdatePattern(); is_played = PLAYED; SClock.PostStart(); }
///internal process of colour void wxMoColourLevelCtrl::ProcessColour() { double hsv_val = 0.0f; ///update internals!! /// slide value, (m_value) /// min and max colours, /// hsv patterns switch( m_ColourChannel ) { case RED: m_value = m_ColourValue.Red(); m_ColourMin = wxColour( m_min, m_ColourValue.Green(), m_ColourValue.Blue(), m_ColourValue.Alpha() ); m_ColourMax = wxColour( m_max, m_ColourValue.Green(), m_ColourValue.Blue(), m_ColourValue.Alpha() ); break; case GREEN: m_value = m_ColourValue.Green(); m_ColourMin = wxColour( m_ColourValue.Red(), m_min, m_ColourValue.Blue(), m_ColourValue.Alpha() ); m_ColourMax = wxColour( m_ColourValue.Red(), m_max, m_ColourValue.Blue(), m_ColourValue.Alpha() ); break; case BLUE: m_value = m_ColourValue.Blue(); m_ColourMin = wxColour( m_ColourValue.Red(), m_ColourValue.Green(), m_min, m_ColourValue.Alpha() ); m_ColourMax = wxColour( m_ColourValue.Red(), m_ColourValue.Green(), m_max, m_ColourValue.Alpha() ); break; case ALPHA: m_value = m_ColourValue.Alpha(); m_ColourMin = wxColour( m_ColourValue.Red(), m_ColourValue.Green(), m_ColourValue.Blue(), m_min ); m_ColourMax = wxColour( m_ColourValue.Red(), m_ColourValue.Green(), m_ColourValue.Blue(), m_max ); break; case HUE: hsv_val = m_HSVValue.hue * (double) (m_max + 1); m_value = (int) hsv_val; ///m_ColourMin = wxColour( m_min, m_min, m_min, 255 ); ///m_ColourMax = wxColour( m_max, m_max, m_max, 255 ); ///has to draw it with a bitmap UpdatePattern(); break; case SATURATION: hsv_val = m_HSVValue.saturation * (double) m_max; m_value = (int) hsv_val; ///m_ColourMin = wxColour( m_min, m_min, m_min, 255 ); ///m_ColourMax = wxColour( m_max, m_max, m_max, 255 ); ///has to draw it with a bitmap to UpdatePattern(); break; case VALUE: hsv_val = m_HSVValue.value * (double) m_max; m_value = (int) hsv_val; ///m_ColourMin = wxColour( 0, 0, 0, m_ColourValue.Alpha() ); ///m_ColourMax = wxColour( m_ColourValue.Red(), m_max, m_max, m_ColourValue.Alpha() ); ///has to draw it with a bitmap to UpdatePattern(); break; default: break; } ///IMPORTANT ! to reflect changes!!! Refresh(); }
boolean Arpege::ChangeValue(int cpt, int value, byte Encoder) { int newValue; int pos; int ret=false; // cpt compte de 1 Ã ... if (cpt >=16) cpt-=6; cpt++; switch(Mode) { case MODE_PATT : switch(cpt) { /* case 1: newValue = encnewmap(value, 0, NB_ARP_TRACK-1, CurArp, Encoder); if (newValue != CurArp ) { if ( IsOn ) EventOff(); ret = true; CurArp = newValue; DessinPage(); UpdatePattern(); } break; */ case 2: newValue = encnewmap(value, 0, 5, Tracks[CurArp].Direction, Encoder); if (newValue != Tracks[CurArp].Direction ) { Tracks[CurArp].Direction = newValue; ret = true; UpdateCtrl(cpt); UpdatePattern(); }; break; case 3: newValue = encnewmap(value, 1, 6, Tracks[CurArp].Octave , Encoder ); if (newValue != Tracks[CurArp].Octave ) { Tracks[CurArp].Octave = newValue; ret = true; UpdateCtrl(cpt); UpdatePattern(); }; break; case 4: newValue = encnewmap(value, 0, 6, Tracks[CurArp].Note , Encoder ); if (newValue != Tracks[CurArp].Note ) { Tracks[CurArp].Note = newValue; ret = true; UpdateCtrl(cpt); UpdatePattern(); }; break; case 5: newValue = encnewmap(value, 1, 40, Tracks[CurArp].Duree , Encoder ); if (newValue != Tracks[CurArp].Duree ) { Tracks[CurArp].Duree = newValue; ret = true; UpdateCtrl(cpt); UpdatePattern(); }; break; case 6: newValue = encnewmap(value, 0, 1, Tracks[CurArp].Velomod , Encoder ); if (newValue != Tracks[CurArp].Velomod ) { Tracks[CurArp].Velomod = newValue; ret = true; UpdateCtrl(cpt); }; break; case 7: newValue = encnewmap(value, 0, 127, Tracks[CurArp].Veloci , Encoder ); if (newValue != Tracks[CurArp].Veloci ) { Tracks[CurArp].Veloci = newValue; ret = true; UpdateCtrl(cpt); UpdatePattern(); }; break; case 8: newValue = encnewmap(value, 0, 2, Tracks[CurArp].Motif , Encoder ); if (newValue != Tracks[CurArp].Motif ) { Tracks[CurArp].Motif = newValue; ret = true; UpdateCtrl(cpt); UpdatePattern(); }; break; case 9: newValue = encnewmap(value, 1, NB_EU_STEP_MAX, Tracks[CurArp].Lg , Encoder ); if (newValue != Tracks[CurArp].Lg ) { Tracks[CurArp].Lg = newValue; ret = true; UpdateCtrl(cpt); UpdatePattern(); }; break; case 10: newValue = encnewmap(value, 1, NB_EU_STEP_MAX, Tracks[CurArp].Div , Encoder ); if (newValue != Tracks[CurArp].Div ) { Tracks[CurArp].Div = newValue; ret = true; UpdateCtrl(cpt); UpdatePattern(); }; break; case 11: newValue = encnewmap(value, 0, 1, Tracks[CurArp].FillAuto , Encoder ); if (newValue != Tracks[CurArp].FillAuto ) { Tracks[CurArp].FillAuto = newValue; ret = true; UpdateCtrl(cpt); UpdatePattern(); }; break; case 12: newValue = encnewmap(value, 12, 96, Tracks[CurArp].Tonale , Encoder ); if (newValue != Tracks[CurArp].Tonale ) { Tracks[CurArp].Tonale = newValue; ret = true; UpdateCtrl(cpt); UpdatePattern(); }; break; case 13: newValue = encnewmap(value, 0, 32, Tracks[CurArp].Accord , Encoder ); if (newValue != Tracks[CurArp].Accord ) { Tracks[CurArp].Accord = newValue; ret = true; UpdateCtrl(cpt); UpdatePattern(); }; break; /* case 11: newValue = newmap(value, 0, 127 ); if (newValue != Tracks[CurArp].NMin ) { Tracks[CurArp].NMin = newValue; ret = true; UpdateCtrl(cpt); UpdatePattern(); }; break; case 12: newValue = newmap(value, 0, 127 ); if (newValue != Tracks[CurArp].NMax ) { Tracks[CurArp].NMax = newValue; ret = true; UpdateCtrl(cpt); UpdatePattern(); }; break; case 13: break; */ case 14: newValue = encnewmap(value, 0, 2, Tracks[CurArp].Maintien , Encoder ); if (newValue != Tracks[CurArp].Maintien ) { Tracks[CurArp].Maintien = newValue; ret = true; UpdateCtrl(cpt); }; break; case 15: newValue = encnewmap(value, 0, 1, Tracks[CurArp].Transpose , Encoder ); if (newValue != Tracks[CurArp].Transpose ) { Tracks[CurArp].Transpose = newValue; if ( newValue == 1) { switch( ParamGlo.ArpSrc ) { case 0: ParamGlo.LastNote = reelBuf[0].Note; break; case 1: ParamGlo.LastUpperNote = reelBuf[0].Note; break; case 2: ParamGlo.LastLowerNote = reelBuf[0].Note; break; case 3: LastOffset = 0; break; } } ret = true; UpdateCtrl(cpt); }; break; case 16: newValue = encnewmap(value, 0, 4, Tracks[CurArp].Modul , Encoder ); if (newValue != Tracks[CurArp].Modul ) { Tracks[CurArp].Modul = newValue; ret = true; UpdateCtrl(cpt); }; break; case 17: newValue = encnewmap(value, -99, 99, Tracks[CurArp].Ampli , Encoder ); if (newValue != Tracks[CurArp].Ampli ) { Tracks[CurArp].Ampli = newValue; ret = true; UpdateCtrl(cpt); }; break; case 18: newValue = encnewmap(value, 0, NB_OUTS, Tracks[CurArp].Dest1 , Encoder ); if (newValue != Tracks[CurArp].Dest1 ) { if ( IsOn ) EventOff(); SPOut.AutoOff( Tracks[CurArp].Dest1 ); Tracks[CurArp].Dest1 = newValue; ret = true; UpdateCtrl(cpt); }; break; case 19: newValue = encnewmap(value, 0, NB_OUTS, Tracks[CurArp].Dest2 , Encoder ); if (newValue != Tracks[CurArp].Dest2 ) { if ( IsOn ) EventOff(); SPOut.AutoOff( Tracks[CurArp].Dest2 ); Tracks[CurArp].Dest2 = newValue; ret = true; UpdateCtrl(cpt); }; break; case 20: newValue = encnewmap(value, 1, 16, Tracks[CurArp].Chanel , Encoder ); if (newValue != Tracks[CurArp].Chanel ) { if ( IsOn ) EventOff(); SPOut.AutoOff( Tracks[CurArp].Dest1 ); SPOut.AutoOff( Tracks[CurArp].Dest2 ); Tracks[CurArp].Chanel = newValue; ret = true; UpdateCtrl(cpt); }; break; } break; case MODE_SONG : switch(cpt) { case 1: case 2: case 3: case 4: case 5: pos=CurTrSong+cpt-1; newValue = encnewmap(value, 1, NB_ARP_TRACK, Songs[pos].Track , Encoder ); if (newValue != Songs[pos].Track ) { Songs[pos].Track = newValue; ret = true; UpdateCtrl(cpt); }; break; case 6: case 7: case 8: case 9: case 10: pos=CurTrSong+cpt-6; newValue = encnewmap(value, 1, 16, Songs[pos].Repeat , Encoder ); if (newValue != Songs[pos].Repeat ) { Songs[pos].Repeat = newValue; ret = true; UpdateCtrl(cpt); }; break; case 11: case 12: case 13: case 14: case 15: pos=CurTrSong+cpt-11; newValue = encnewmap(value, -12, +12, Songs[pos].Transpose , Encoder ); if (newValue != Songs[pos].Transpose ) { Songs[pos].Transpose = newValue; ret = true; UpdateCtrl(cpt); }; break; case 16: case 17: case 18: case 19: case 20: pos=CurTrSong+cpt-16; newValue = encnewmap(value, 0, NB_TR_SONG, Songs[pos].Next , Encoder ); if (newValue != Songs[pos].Next ) { Songs[pos].Next = newValue; ret = true; UpdateCtrl(cpt); }; break; } break; } return ret; }
void Arpege::TraiteEvent(uint32_t reftime) { if ( cpt24==0 ) { if ( ParamGlo.MidiInput->hNote.Version != mV_MIDI1 ) // Midi1 a changé { mV_MIDI1 = ParamGlo.MidiInput->hNote.Version; UpdatePattern(); } if (is_played==PLAYED && reelLen) { if ( ActiFunc==NumFunc && Tracks[CurArp].Motif > 0 ) { PatLed.SetPatt( Tracks[CurArp].Pattern ); } if ( is_played_Mode_Song ) { if ( steep==0) { EventOff(); nbSteep++; if ( nbSteep >= Songs[CurPlaySong].Repeat ) { if ( Songs[CurPlaySong].Next > 0 ) { ChangeCurPlaySong( Songs[CurPlaySong].Next-1 ); CurArp = Songs[CurPlaySong].Track-1; if ( ActiFunc == NumFunc && Menu->FirstPage) Menu->ShowM3(CurArp+1); UpdatePattern(); NextArp=-1; PosTrack=0; nbSteep=0; } else { ExStop(); lcdM.setCursor(8,3); lcdM.print("Play"); } } } } else { if ( steep==0 && NextArp > -1 ) { if ( IsOn ) EventOff(); CurArp=NextArp; DessinPage(); UpdatePattern(); NextArp=-1; PosTrack=0; } } if ( Tracks[CurArp].Motif == 0 || ( Tracks[CurArp].Motif == 1 && Pat[ steep ] ) || ( Tracks[CurArp].Motif == 2 && ( Tracks[CurArp].Pattern & ( 1 << steep ) ) != 0 )) { EventOn(PosTrack, reftime); if ( ActiFunc==NumFunc ) { if ( Tracks[CurArp].Motif == 0 ) PatLed.SetStep(PosTrack+1); else PatLed.SetStep(steep+1); } PosTrack++; PosTrack %= reelLen; } else { if ( ActiFunc==NumFunc && Tracks[CurArp].Motif > 0 ) PatLed.SetStep(steep+1); } steep++; if ( Tracks[CurArp].Motif == 0 ) // Si pas motif on prend la longueur reel de l'arpege pour fin, sinon la longueur du motif steep %= reelLen; else steep %= Tracks[CurArp].Lg; } else { if ( ActiFunc==NumFunc && Tracks[CurArp].Motif > 0 ) { PatLed.SetPatt( Tracks[CurArp].Pattern ); } else { if ( ActiFunc==NumFunc ) PatLed.SetStep(CurArp+1); } } } if (++cpt24>=nb24) cpt24=0; }
void Arpege::Restore() { MySD.ReadStream((byte *)Tracks, sizeof(Tracks) ) ; MySD.ReadStream((byte *)Songs, sizeof(Songs) ) ; UpdatePattern(); }
boolean Arpege::ChangeS1S5(int value) { boolean ret = false; if ( Menu->ChangeS1S5(value) ) { if ( Menu->FirstPage ) { switch (Menu->S1S5) { case 1: is_mode_write = !is_mode_write; DessinPage(); break; case 2: Mode = (Mode==MODE_SONG)? MODE_PATT : MODE_SONG; DessinPage(); break; case 3 : if ( is_played == STOPPED ) { ExStart(Mode==MODE_SONG); lcdM.setCursor(8,3); lcdM.print("Stop"); } else { ExStop(); lcdM.setCursor(8,3); lcdM.print("Play"); } break; case 4: is_echo = !is_echo; DessinPage(); break; } } else { switch (Menu->S1S5) { case 3: switch( Menu->curCmd ) { case 0: /* copy */ memcpy( &Tracks[Menu->V2-1], &Tracks[Menu->V1-1], sizeof (arpTrack) ) ; PatLed.Show(0); DessinPage(); break; case 1: /* Load */ SPOut.AutoOff( ParamGlo.UpperDest ); SPOut.AutoOff( ParamGlo.LowerDest ); if ( MySD.OpenFileForRead(MODE_ARPEGE, Menu->GetFName(FileName) ) ) { Restore(); MySD.CloseFile(); } PatLed.Show(0); DessinPage(); break; case 2: /* Save */ if ( MySD.OpenFileForWrite(MODE_ARPEGE, Menu->MenuFName(FileName) ) ) { Backup(); MySD.CloseFile(); } PatLed.Show(0); break; case 3: /* Init */ Init(); PatLed.Show(0); DessinPage(); UpdatePattern(); break; } } } } return ret; }
bool ADVBPatterns::DeletePattern(const AString& user, const AString& pattern) { return UpdatePattern(user, pattern, ""); }