Skip to content

Commit

Permalink
Refactor arpdirdown, arpdirdownup
Browse files Browse the repository at this point in the history
Fix issue with wrong pattern when going down and cycle is over 0.
  • Loading branch information
zonkmachine committed Nov 30, 2023
1 parent 67ce167 commit 325df3b
Showing 1 changed file with 8 additions and 20 deletions.
28 changes: 8 additions & 20 deletions src/core/InstrumentFunctions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -433,16 +433,11 @@ void InstrumentFunctionArpeggio::processNote( NotePlayHandle * _n )

int cur_arp_idx = 0;
// process according to arpeggio-direction...
if( dir == ArpDirection::Up )
if (dir == ArpDirection::Up || dir == ArpDirection::Down)
{
cur_arp_idx = ( cur_frame / arp_frames ) % range;
}
else if( dir == ArpDirection::Down )
{
cur_arp_idx = range - ( cur_frame / arp_frames ) %
range - 1;
}
else if( dir == ArpDirection::UpAndDown && range > 1 )
else if ((dir == ArpDirection::UpAndDown || dir == ArpDirection::DownAndUp) && range > 1)
{
// imagine, we had to play the arp once up and then
// once down -> makes 2 * range possible notes...
Expand All @@ -456,19 +451,6 @@ void InstrumentFunctionArpeggio::processNote( NotePlayHandle * _n )
cur_arp_idx = range - cur_arp_idx % ( range - 1 ) - 1;
}
}
else if( dir == ArpDirection::DownAndUp && range > 1 )
{
// copied from ArpDirection::UpAndDown above
cur_arp_idx = ( cur_frame / arp_frames ) % ( range * 2 - 2 );
// if greater than range, we have to play down...
// looks like the code for arp_dir==DOWN... :)
if( cur_arp_idx >= range )
{
cur_arp_idx = range - cur_arp_idx % ( range - 1 ) - 1;
}
// inverts direction
cur_arp_idx = range - cur_arp_idx - 1;
}
else if( dir == ArpDirection::Random )
{
// just pick a random chord-index
Expand All @@ -485,6 +467,12 @@ void InstrumentFunctionArpeggio::processNote( NotePlayHandle * _n )
cur_arp_idx %= static_cast<int>( range / m_arpRepeatsModel.value() );
}

// If ArpDirection::Down or ArpDirection::DownAndUp, invert the final range.
if (dir == ArpDirection::Down || dir == ArpDirection::DownAndUp)
{
cur_arp_idx = static_cast<int>(range) - cur_arp_idx - 1;
}

// now calculate final key for our arp-note
const int sub_note_key = base_note_key + (cur_arp_idx / cur_chord_size ) *
KeysPerOctave + chord_table.chords()[selected_arp][cur_arp_idx % cur_chord_size];
Expand Down

0 comments on commit 325df3b

Please sign in to comment.