| 123 | } |
| 124 | |
| 125 | bool CSeqInstHandler::ProcessSequence(const CSequence &Seq, int Pos) |
| 126 | { |
| 127 | int Value = Seq.GetItem(Pos); |
| 128 | seq_setting_t Setting = Seq.GetSetting(); |
| 129 | |
| 130 | switch (Seq.GetSequenceType()) { |
| 131 | // Volume modifier |
| 132 | case sequence_t::Volume: |
| 133 | m_pInterface->SetVolume(Value); |
| 134 | return true; |
| 135 | // Arpeggiator |
| 136 | case sequence_t::Arpeggio: |
| 137 | switch (Setting) { |
| 138 | case SETTING_ARP_ABSOLUTE: |
| 139 | m_pInterface->SetPeriod(m_pInterface->TriggerNote(m_pInterface->GetNote() + Value)); |
| 140 | return true; |
| 141 | case SETTING_ARP_FIXED: |
| 142 | m_pInterface->SetPeriod(m_pInterface->TriggerNote(Value)); |
| 143 | return true; |
| 144 | case SETTING_ARP_RELATIVE: |
| 145 | m_pInterface->SetNote(m_pInterface->GetNote() + Value); |
| 146 | m_pInterface->SetPeriod(m_pInterface->TriggerNote(m_pInterface->GetNote())); |
| 147 | return true; |
| 148 | case SETTING_ARP_SCHEME: // // // |
| 149 | if (Value < 0) Value += 256; |
| 150 | int lim = Value % 0x40, scheme = Value / 0x40; |
| 151 | if (lim > ARPSCHEME_MAX) |
| 152 | lim -= 64; |
| 153 | { |
| 154 | unsigned char Param = m_pInterface->GetArpParam(); |
| 155 | switch (scheme) { |
| 156 | case 0: break; |
| 157 | case 1: lim += Param >> 4; break; |
| 158 | case 2: lim += Param & 0x0F; break; |
| 159 | case 3: lim -= Param & 0x0F; break; |
| 160 | } |
| 161 | } |
| 162 | m_pInterface->SetPeriod(m_pInterface->TriggerNote(m_pInterface->GetNote() + lim)); |
| 163 | return true; |
| 164 | } |
| 165 | return false; |
| 166 | // Pitch |
| 167 | case sequence_t::Pitch: |
| 168 | switch (Setting) { // // // |
| 169 | case SETTING_PITCH_RELATIVE: |
| 170 | m_pInterface->SetPeriod(m_pInterface->GetPeriod() + Value); |
| 171 | return true; |
| 172 | case SETTING_PITCH_ABSOLUTE: // // // 050B |
| 173 | m_pInterface->SetPeriod(m_pInterface->TriggerNote(m_pInterface->GetNote()) + Value); |
| 174 | return true; |
| 175 | } |
| 176 | return false; |
| 177 | // Hi-pitch |
| 178 | case sequence_t::HiPitch: |
| 179 | m_pInterface->SetPeriod(m_pInterface->GetPeriod() + (Value << 4)); |
| 180 | return true; |
| 181 | // Duty cycling |
| 182 | case sequence_t::DutyCycle: |
nothing calls this directly
no test coverage detected