MCPcopy Create free account
hub / github.com/HertzDevil/0CC-FamiTracker / ProcessSequence

Method ProcessSequence

Source/SeqInstHandler.cpp:125–187  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

123}
124
125bool 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:

Callers

nothing calls this directly

Calls 11

GetItemMethod · 0.80
GetSettingMethod · 0.80
GetSequenceTypeMethod · 0.80
SetPeriodMethod · 0.80
GetArpParamMethod · 0.80
SetDutyPeriodMethod · 0.80
SetVolumeMethod · 0.45
TriggerNoteMethod · 0.45
GetNoteMethod · 0.45
SetNoteMethod · 0.45
GetPeriodMethod · 0.45

Tested by

no test coverage detected