📄 midiinstrumentparameterpanel.cpp
字号:
m_variationCheckBox->hide(); m_variationValue->hide(); } } else { //!!! seem to have problems here -- the grid layout doesn't //like us adding stuff in the middle so if we go from 1 //visible row (say program) to 2 (program + variation) the //second one overlaps the control knobs if (m_variationLabel->isHidden()) { m_variationLabel->show(); m_variationCheckBox->show(); m_variationValue->show(); } if (m_programValue->width() > m_variationValue->width()) { m_variationValue->setMinimumWidth(m_programValue->width()); } else { m_programValue->setMinimumWidth(m_variationValue->width()); } } m_variationValue->setEnabled(m_selectedInstrument->sendsBankSelect());}voidMIDIInstrumentParameterPanel::slotTogglePercussion(bool value){ if (m_selectedInstrument == 0) { m_percussionCheckBox->setChecked(false); emit updateAllBoxes(); return ; } m_selectedInstrument->setPercussion(value); populateBankList(); populateProgramList(); populateVariationList(); sendBankAndProgram(); emit changeInstrumentLabel(m_selectedInstrument->getId(), strtoqstr(m_selectedInstrument-> getProgramName())); emit updateAllBoxes(); emit instrumentParametersChanged(m_selectedInstrument->getId());}voidMIDIInstrumentParameterPanel::slotToggleBank(bool value){ if (m_selectedInstrument == 0) { m_bankCheckBox->setChecked(false); emit updateAllBoxes(); return ; } m_variationCheckBox->setChecked(value); m_selectedInstrument->setSendBankSelect(value); m_bankValue->setDisabled(!value); populateBankList(); populateProgramList(); populateVariationList(); sendBankAndProgram(); emit changeInstrumentLabel(m_selectedInstrument->getId(), strtoqstr(m_selectedInstrument-> getProgramName())); emit updateAllBoxes(); emit instrumentParametersChanged(m_selectedInstrument->getId());}voidMIDIInstrumentParameterPanel::slotToggleProgramChange(bool value){ if (m_selectedInstrument == 0) { m_programCheckBox->setChecked(false); emit updateAllBoxes(); return ; } m_selectedInstrument->setSendProgramChange(value); m_programValue->setDisabled(!value); populateProgramList(); populateVariationList(); if (value) sendBankAndProgram(); emit changeInstrumentLabel(m_selectedInstrument->getId(), strtoqstr(m_selectedInstrument-> getProgramName())); emit updateAllBoxes(); emit instrumentParametersChanged(m_selectedInstrument->getId());}voidMIDIInstrumentParameterPanel::slotToggleVariation(bool value){ if (m_selectedInstrument == 0) { m_variationCheckBox->setChecked(false); emit updateAllBoxes(); return ; } m_bankCheckBox->setChecked(value); m_selectedInstrument->setSendBankSelect(value); m_variationValue->setDisabled(!value); populateVariationList(); sendBankAndProgram(); emit changeInstrumentLabel(m_selectedInstrument->getId(), strtoqstr(m_selectedInstrument-> getProgramName())); emit updateAllBoxes(); emit instrumentParametersChanged(m_selectedInstrument->getId());}voidMIDIInstrumentParameterPanel::slotSelectBank(int index){ if (m_selectedInstrument == 0) return ; MidiDevice *md = dynamic_cast<MidiDevice*> (m_selectedInstrument->getDevice()); if (!md) { RG_DEBUG << "WARNING: MIDIInstrumentParameterPanel::slotSelectBank: No MidiDevice for Instrument " << m_selectedInstrument->getId() << endl; return ; } const MidiBank *bank = &m_banks[index]; bool change = false; if (md->getVariationType() != MidiDevice::VariationFromLSB) { if (m_selectedInstrument->getLSB() != bank->getLSB()) { m_selectedInstrument->setLSB(bank->getLSB()); change = true; } } if (md->getVariationType() != MidiDevice::VariationFromMSB) { if (m_selectedInstrument->getMSB() != bank->getMSB()) { m_selectedInstrument->setMSB(bank->getMSB()); change = true; } } populateProgramList(); if (change) { sendBankAndProgram(); emit updateAllBoxes(); } emit instrumentParametersChanged(m_selectedInstrument->getId());}voidMIDIInstrumentParameterPanel::slotSelectProgram(int index){ const MidiProgram *prg = &m_programs[index]; if (prg == 0) { RG_DEBUG << "program change not found in bank" << endl; return ; } bool change = false; if (m_selectedInstrument->getProgramChange() != prg->getProgram()) { m_selectedInstrument->setProgramChange(prg->getProgram()); change = true; } populateVariationList(); if (change) { sendBankAndProgram(); emit changeInstrumentLabel(m_selectedInstrument->getId(), strtoqstr(m_selectedInstrument-> getProgramName())); emit updateAllBoxes(); } emit instrumentParametersChanged(m_selectedInstrument->getId());}voidMIDIInstrumentParameterPanel::slotSelectVariation(int index){ MidiDevice *md = dynamic_cast<MidiDevice*> (m_selectedInstrument->getDevice()); if (!md) { RG_DEBUG << "WARNING: MIDIInstrumentParameterPanel::slotSelectVariation: No MidiDevice for Instrument " << m_selectedInstrument->getId() << endl; return ; } if (index < 0 || index > int(m_variations.size())) { RG_DEBUG << "WARNING: MIDIInstrumentParameterPanel::slotSelectVariation: index " << index << " out of range" << endl; return ; } MidiByte v = m_variations[index]; bool change = false; if (md->getVariationType() == MidiDevice::VariationFromLSB) { if (m_selectedInstrument->getLSB() != v) { m_selectedInstrument->setLSB(v); change = true; } } else if (md->getVariationType() == MidiDevice::VariationFromMSB) { if (m_selectedInstrument->getMSB() != v) { m_selectedInstrument->setMSB(v); change = true; } } if (change) { sendBankAndProgram(); } emit instrumentParametersChanged(m_selectedInstrument->getId());}voidMIDIInstrumentParameterPanel::sendBankAndProgram(){ if (m_selectedInstrument == 0) return ; MidiDevice *md = dynamic_cast<MidiDevice*> (m_selectedInstrument->getDevice()); if (!md) { RG_DEBUG << "WARNING: MIDIInstrumentParameterPanel::sendBankAndProgram: No MidiDevice for Instrument " << m_selectedInstrument->getId() << endl; return ; } if (m_selectedInstrument->sendsBankSelect()) { // Send the bank select message before any PC message // MappedEvent mEMSB(m_selectedInstrument->getId(), MappedEvent::MidiController, MIDI_CONTROLLER_BANK_MSB, m_selectedInstrument->getMSB()); RG_DEBUG << "MIDIInstrumentParameterPanel::sendBankAndProgram - " << "sending MSB = " << int(m_selectedInstrument->getMSB()) << endl; StudioControl::sendMappedEvent(mEMSB); MappedEvent mELSB(m_selectedInstrument->getId(), MappedEvent::MidiController, MIDI_CONTROLLER_BANK_LSB, m_selectedInstrument->getLSB()); RG_DEBUG << "MIDIInstrumentParameterPanel::sendBankAndProgram - " << "sending LSB = " << int(m_selectedInstrument->getLSB()) << endl; StudioControl::sendMappedEvent(mELSB); } MappedEvent mE(m_selectedInstrument->getId(), MappedEvent::MidiProgramChange, m_selectedInstrument->getProgramChange(), (MidiByte)0); RG_DEBUG << "MIDIInstrumentParameterPanel::sendBankAndProgram - " << "sending program change = " << int(m_selectedInstrument->getProgramChange()) << endl; // Send the controller change // StudioControl::sendMappedEvent(mE);}voidMIDIInstrumentParameterPanel::slotControllerChanged(int controllerNumber){ RG_DEBUG << "MIDIInstrumentParameterPanel::slotControllerChanged - " << "controller = " << controllerNumber << "\n"; if (m_selectedInstrument == 0) return ; MidiDevice *md = dynamic_cast<MidiDevice*> (m_selectedInstrument->getDevice()); if (!md) return ; /* ControlParameter *controller = md->getControlParameter(MidiByte(controllerNumber)); */ int value = getValueFromRotary(controllerNumber); if (value == -1) { RG_DEBUG << "MIDIInstrumentParameterPanel::slotControllerChanged - " << "couldn't get value of rotary for controller " << controllerNumber << endl; return ; } // two special cases if (controllerNumber == int(MIDI_CONTROLLER_PAN)) { float adjValue = value; if (m_selectedInstrument->getType() == Instrument::Audio || m_selectedInstrument->getType() == Instrument::SoftSynth) value += 100; m_selectedInstrument->setPan(MidiByte(adjValue)); } else if (controllerNumber == int(MIDI_CONTROLLER_VOLUME)) { m_selectedInstrument->setVolume(MidiByte(value)); } else // just set the controller (this will create it on the instrument if // it doesn't exist) { m_selectedInstrument->setControllerValue(MidiByte(controllerNumber), MidiByte(value)); RG_DEBUG << "SET CONTROLLER VALUE (" << controllerNumber << ") = " << value << endl; } /* else { RG_DEBUG << "MIDIInstrumentParameterPanel::slotControllerChanged - " << "no controller retrieved\n"; return; } */ MappedEvent mE(m_selectedInstrument->getId(), MappedEvent::MidiController, (MidiByte)controllerNumber, (MidiByte)value); StudioControl::sendMappedEvent(mE); emit updateAllBoxes(); emit instrumentParametersChanged(m_selectedInstrument->getId());}intMIDIInstrumentParameterPanel::getValueFromRotary(int rotary){ for (RotaryMap::iterator it = m_rotaries.begin(); it != m_rotaries.end(); ++it) { if (it->first == rotary) return int(it->second.first->getPosition()); } return -1;}voidMIDIInstrumentParameterPanel::showAdditionalControls(bool showThem){ m_instrumentLabel->setShown(showThem); int index = 0; for (RotaryMap::iterator it = m_rotaries.begin(); it != m_rotaries.end(); ++it) { it->second.first->parentWidget()->setShown(showThem || (index < 8)); //it->second.first->setShown(showThem || (index < 8)); //it->second.second->setShown(showThem || (index < 8)); index++; }}}#include "MIDIInstrumentParameterPanel.moc"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -