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

📄 midimixerwindow.cpp

📁 LINUX下的混音软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
voidMidiMixerWindow::slotControllerChanged(float value){    const QObject *s = sender();    unsigned int i = 0, j = 0;    for (i = 0; i < m_faders.size(); ++i) {        for (j = 0; j < m_faders[i]->m_controllerRotaries.size(); ++j) {            if (m_faders[i]->m_controllerRotaries[j].second == s)                break;        }        // break out on match        if (j != m_faders[i]->m_controllerRotaries.size())            break;    }    // Don't do anything if we've not matched and got solid values    // for i and j    //    if (i == m_faders.size() || j == m_faders[i]->m_controllerRotaries.size())        return ;    //RG_DEBUG << "MidiMixerWindow::slotControllerChanged - found a controller"    //<< endl;    Instrument *instr = m_studio->getInstrumentById(                            m_faders[i]->m_id);    if (instr) {        //RG_DEBUG << "MidiMixerWindow::slotControllerChanged - "        //<< "got instrument to change" << endl;        if (m_faders[i]->m_controllerRotaries[j].first ==                MIDI_CONTROLLER_PAN)            instr->setPan(MidiByte(value));        else {            instr->setControllerValue(m_faders[i]->                                      m_controllerRotaries[j].first,                                      MidiByte(value));        }        MappedEvent mE(m_faders[i]->m_id,                       MappedEvent::MidiController,                       m_faders[i]->m_controllerRotaries[j].first,                       MidiByte(value));        StudioControl::sendMappedEvent(mE);        int tabIndex = m_tabWidget->currentPageIndex();        if (tabIndex < 0)            tabIndex = 0;        int i = 0;        for (DeviceList::const_iterator dit = m_studio->begin();                dit != m_studio->end(); ++dit) {            RG_DEBUG << "slotControllerChanged: i = " << i << ", tabIndex " << tabIndex << endl;            if (!dynamic_cast<MidiDevice*>(*dit))                continue;            if (i != tabIndex) {                ++i;                continue;            }            RG_DEBUG << "slotControllerChanged: device id = " << instr->getDevice()->getId() << ", visible device id " << (*dit)->getId() << endl;            if (instr->getDevice()->getId() == (*dit)->getId()) {                RG_DEBUG << "slotControllerChanged: sending control device mapped event for channel " << instr->getMidiChannel() << endl;                // send out to external controllers as well.                //!!! really want some notification of whether we have any!                mE.setRecordedChannel(instr->getMidiChannel());                mE.setRecordedDevice(Device::CONTROL_DEVICE);                StudioControl::sendMappedEvent(mE);            }        }        emit instrumentParametersChanged(m_faders[i]->m_id);    }}voidMidiMixerWindow::slotUpdateInstrument(InstrumentId id){    //RG_DEBUG << "MidiMixerWindow::slotUpdateInstrument - id = " << id << endl;    DeviceListConstIterator it;    MidiDevice *dev = 0;    InstrumentList instruments;    InstrumentList::const_iterator iIt;    int count = 0;    blockSignals(true);    for (it = m_studio->begin(); it != m_studio->end(); ++it) {        dev = dynamic_cast<MidiDevice*>(*it);        if (dev) {            instruments = dev->getPresentationInstruments();            ControlList controls = dev->getIPBControlParameters();            for (iIt = instruments.begin(); iIt != instruments.end(); ++iIt) {                // Match and set                //                if ((*iIt)->getId() == id) {                    // Set Volume fader                    //                    m_faders[count]->m_volumeFader->blockSignals(true);                    m_faders[count]->m_volumeFader->                    setFader(float((*iIt)->getVolume()));                    m_faders[count]->m_volumeFader->blockSignals(false);                    /*                    StaticControllers &staticControls =                         (*iIt)->getStaticControllers();                    RG_DEBUG << "STATIC CONTROLS SIZE = "                              << staticControls.size() << endl;                    */                    // Set all controllers for this Instrument                    //                    for (unsigned int i = 0; i < controls.size(); ++i) {                        float value = 0.0;                        m_faders[count]->m_controllerRotaries[i].second->blockSignals(true);                        if (controls[i].getControllerValue() ==                                MIDI_CONTROLLER_PAN) {                            m_faders[count]->m_controllerRotaries[i].                            second->setPosition((*iIt)->getPan());                        } else {                            // The ControllerValues might not yet be set on                            // the actual Instrument so don't always expect                            // to find one.  There might be a hole here for                            // deleted Controllers to hang around on                            // Instruments..                            //                            try {                                value = float((*iIt)->getControllerValue                                              (controls[i].getControllerValue()));                            } catch (std::string s) {                                /*                                RG_DEBUG <<                                 "MidiMixerWindow::slotUpdateInstrument - "                                         << "can't match controller "                                          << int(controls[i].                                             getControllerValue()) << " - \""                                         << s << "\"" << endl;                                         */                                continue;                            }                            /*                            RG_DEBUG << "MidiMixerWindow::slotUpdateInstrument"                                     << " - MATCHED "                                     << int(controls[i].getControllerValue())                                     << endl;                                     */                            m_faders[count]->m_controllerRotaries[i].                            second->setPosition(value);                        }                        m_faders[count]->m_controllerRotaries[i].second->blockSignals(false);                    }                }                count++;            }        }    }    blockSignals(false);}voidMidiMixerWindow::updateMeters(SequencerMapper *mapper){    for (unsigned int i = 0; i != m_faders.size(); ++i) {        LevelInfo info;        if (!mapper->                getInstrumentLevelForMixer(m_faders[i]->m_id, info))            continue;        m_faders[i]->m_vuMeter->setLevel(double(info.level / 127.0));        RG_DEBUG << "MidiMixerWindow::updateMeters - level  " << info.level << endl;    }}voidMidiMixerWindow::updateMonitorMeter(SequencerMapper *){    // none here}voidMidiMixerWindow::slotControllerDeviceEventReceived(MappedEvent *e,        const void *preferredCustomer){    if (preferredCustomer != this)        return ;    RG_DEBUG << "MidiMixerWindow::slotControllerDeviceEventReceived: this one's for me" << endl;    raise();    // get channel number n from event    // get nth instrument on current tab    if (e->getType() != MappedEvent::MidiController)        return ;    unsigned int channel = e->getRecordedChannel();    MidiByte controller = e->getData1();    MidiByte value = e->getData2();    int tabIndex = m_tabWidget->currentPageIndex();    int i = 0;    for (DeviceList::const_iterator it = m_studio->begin();            it != m_studio->end(); ++it) {        MidiDevice *dev =            dynamic_cast<MidiDevice*>(*it);        if (!dev)            continue;        if (i != tabIndex) {            ++i;            continue;        }        InstrumentList instruments = dev->getPresentationInstruments();        for (InstrumentList::const_iterator iIt =                    instruments.begin(); iIt != instruments.end(); ++iIt) {            Instrument *instrument = *iIt;            if (instrument->getMidiChannel() != channel)                continue;            switch (controller) {            case MIDI_CONTROLLER_VOLUME:                RG_DEBUG << "Setting volume for instrument " << instrument->getId() << " to " << value << endl;                instrument->setVolume(value);                break;            case MIDI_CONTROLLER_PAN:                RG_DEBUG << "Setting pan for instrument " << instrument->getId() << " to " << value << endl;                instrument->setPan(value);                break;            default: {                    ControlList cl = dev->getIPBControlParameters();                    for (ControlList::const_iterator i = cl.begin();                            i != cl.end(); ++i) {                        if ((*i).getControllerValue() == controller) {                            RG_DEBUG << "Setting controller " << controller << " for instrument " << instrument->getId() << " to " << value << endl;                            instrument->setControllerValue(controller, value);                            break;                        }                    }                    break;                }            }            MappedEvent mE(instrument->getId(),                           MappedEvent::MidiController,                           MidiByte(controller),                           MidiByte(value));            StudioControl::sendMappedEvent(mE);            slotUpdateInstrument(instrument->getId());            emit instrumentParametersChanged(instrument->getId());        }        break;    }}voidMidiMixerWindow::slotCurrentTabChanged(QWidget *){    sendControllerRefresh();}voidMidiMixerWindow::sendControllerRefresh(){    //!!! need to know if we have a current external controller device,    // as this is expensive    int tabIndex = m_tabWidget->currentPageIndex();    RG_DEBUG << "MidiMixerWindow::slotCurrentTabChanged: current is " << tabIndex << endl;    if (tabIndex < 0)        return ;    int i = 0;    for (DeviceList::const_iterator dit = m_studio->begin();            dit != m_studio->end(); ++dit) {        MidiDevice *dev = dynamic_cast<MidiDevice*>(*dit);        RG_DEBUG << "device is " << (*dit)->getId() << ", dev " << dev << endl;        if (!dev)            continue;        if (i != tabIndex) {            ++i;            continue;        }        InstrumentList instruments = dev->getPresentationInstruments();        ControlList controls = dev->getIPBControlParameters();        RG_DEBUG << "device has " << instruments.size() << " presentation instruments, " << dev->getAllInstruments().size() << " instruments " << endl;        for (InstrumentList::const_iterator iIt =                    instruments.begin(); iIt != instruments.end(); ++iIt) {            Instrument *instrument = *iIt;            int channel = instrument->getMidiChannel();            RG_DEBUG << "instrument is " << instrument->getId() << endl;            for (ControlList::const_iterator cIt =                        controls.begin(); cIt != controls.end(); ++cIt) {                int controller = (*cIt).getControllerValue();                int value;                if (controller == MIDI_CONTROLLER_PAN) {                    value = instrument->getPan();                } else {                    try {                        value = instrument->getControllerValue(controller);                    } catch (std::string s) {                        std::cerr << "Exception in MidiMixerWindow::currentChanged: " << s << " (controller " << controller << ", instrument " << instrument->getId() << ")" << std::endl;                        value = 0;                    }                }                MappedEvent mE(instrument->getId(),                               MappedEvent::MidiController,                               controller, value);                mE.setRecordedChannel(channel);                mE.setRecordedDevice(Device::CONTROL_DEVICE);                StudioControl::sendMappedEvent(mE);            }            MappedEvent mE(instrument->getId(),                           MappedEvent::MidiController,                           MIDI_CONTROLLER_VOLUME,                           instrument->getVolume());            mE.setRecordedChannel(channel);            mE.setRecordedDevice(Device::CONTROL_DEVICE);            RG_DEBUG << "sending controller mapped event for channel " << channel << ", volume " << instrument->getVolume() << endl;            StudioControl::sendMappedEvent(mE);        }        break;    }}voidMidiMixerWindow::slotSynchronise(){    RG_DEBUG << "MidiMixer::slotSynchronise" << endl;    //setupTabs();}}#include "MidiMixerWindow.moc"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -