| 179 | } |
| 180 | |
| 181 | void OdinAudioProcessor::handleMidiMessage(const MidiMessage &p_midi_message) { |
| 182 | //DBG(p_midi_message.getDescription()); |
| 183 | // apply midi message |
| 184 | if (p_midi_message.isNoteOn()) { |
| 185 | handleMidiNoteOn(p_midi_message.getNoteNumber(), p_midi_message.getVelocity()); |
| 186 | } else if (p_midi_message.isNoteOff()) { |
| 187 | handleMidiNoteOff(p_midi_message.getNoteNumber()); |
| 188 | } else if (p_midi_message.isAllNotesOff() || p_midi_message.isAllSoundOff()) { |
| 189 | allNotesOff(); |
| 190 | } else if (p_midi_message.isPitchWheel()) { |
| 191 | setPitchWheelValue(p_midi_message.getPitchWheelValue()); |
| 192 | } else if (p_midi_message.isController() && p_midi_message.getControllerNumber() == 1) { // modwheel |
| 193 | setModWheelValue(p_midi_message.getControllerValue()); |
| 194 | } else if (p_midi_message.isSustainPedalOn()) { |
| 195 | if (m_arpeggiator_on) { |
| 196 | m_arpeggiator.setSustainActive(true); |
| 197 | } else { |
| 198 | m_voice_manager.setSustainActive(true); |
| 199 | } |
| 200 | DBG("Sustain pedal pressed"); |
| 201 | } else if (p_midi_message.isSustainPedalOff()) { |
| 202 | DBG("Sustain pedal released"); |
| 203 | m_voice_manager.setSustainActive(false); |
| 204 | for (int voice = 0; voice < VOICES; ++voice) { |
| 205 | if (m_voice_manager.isOnKillList(voice)) { |
| 206 | m_voice[voice].startRelease(); |
| 207 | } |
| 208 | } |
| 209 | m_arpeggiator.setSustainActive(false); |
| 210 | m_voice_manager.clearKillList(); |
| 211 | checkEndGlobalEnvelope(); |
| 212 | } else if (p_midi_message.isAftertouch()) { |
| 213 | // todo this is untested |
| 214 | DBG("receiving afterouch, note: " + std::to_string(p_midi_message.getNoteNumber()) + |
| 215 | ", value: " + std::to_string((float)p_midi_message.getAfterTouchValue() / 127.f)); |
| 216 | for (int voice = 0; voice < VOICES; ++voice) { |
| 217 | m_voice[voice].setAftertouch(p_midi_message.getNoteNumber(), |
| 218 | (float)p_midi_message.getAfterTouchValue() / 127.f); |
| 219 | } |
| 220 | } else if (p_midi_message.isChannelPressure()) { |
| 221 | m_MIDI_channel_pressure = (float)p_midi_message.getChannelPressureValue() / 127.f; |
| 222 | } else if (p_midi_message.isSoftPedalOn()) { |
| 223 | m_soft_pedal = 1.f; |
| 224 | } else if (p_midi_message.isSoftPedalOff()) { |
| 225 | m_soft_pedal = 0.f; |
| 226 | } else if(p_midi_message.isController() && p_midi_message.getControllerNumber() == MIDI_CONTROLLER_NUMBER_BREATH) { |
| 227 | m_midi_breath = p_midi_message.getControllerValue() / 127.f; |
| 228 | } |
| 229 | |
| 230 | else { |
| 231 | if (!p_midi_message.isMidiClock()) { |
| 232 | //DBG("UNHANDELED MIDI MESSAGE: " + p_midi_message.getDescription()); |
| 233 | if (p_midi_message.isController()) { |
| 234 | //DBG("Controller with number: " + std::to_string(p_midi_message.getControllerNumber())); |
| 235 | } |
| 236 | } |
| 237 | } |
| 238 | } |
nothing calls this directly
no test coverage detected