Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;

}
Пример #4
0
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;
  }


}
Пример #5
0
void
wxMoColourPanel::OnPaint(wxPaintEvent& event) {

    wxBufferedPaintDC dc(this);

    if (m_Pattern.IsOk()) {
      UpdatePattern();
      dc.DrawBitmap( m_Pattern,  0, 0, true );
    }

}
Пример #6
0
//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;
}
Пример #7
0
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;
}
Пример #8
0
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;
}
Пример #9
0
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;
}
Пример #10
0
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();
}
Пример #12
0
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;

}
Пример #13
0
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;
}
Пример #14
0
void Arpege::Restore()
{
  MySD.ReadStream((byte *)Tracks, sizeof(Tracks) ) ;
  MySD.ReadStream((byte *)Songs, sizeof(Songs) ) ;
  UpdatePattern();
}
Пример #15
0
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;
}
Пример #16
0
bool ADVBPatterns::DeletePattern(const AString& user, const AString& pattern)
{
	return UpdatePattern(user, pattern, "");
}