⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 midiinstrumentparameterpanel.cpp

📁 LINUX下的混音软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
            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 + -