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

📄 audiomixerwindow.cpp

📁 LINUX下的混音软件
💻 CPP
📖 第 1 页 / 共 4 页
字号:
        m_faders[(*i)->getId()] = rec;        updateFader((*i)->getId());        updateRouteButtons((*i)->getId());        updateStereoButton((*i)->getId());        updatePluginButtons((*i)->getId());        if (rec.m_input) {            connect(rec.m_input, SIGNAL(changed()),                    this, SLOT(slotInputChanged()));        }        connect(rec.m_output, SIGNAL(changed()),                this, SLOT(slotOutputChanged()));        connect(rec.m_fader, SIGNAL(faderChanged(float)),                this, SLOT(slotFaderLevelChanged(float)));        connect(rec.m_pan, SIGNAL(valueChanged(float)),                this, SLOT(slotPanChanged(float)));        connect(rec.m_soloButton, SIGNAL(clicked()),                this, SLOT(slotSoloChanged()));        connect(rec.m_muteButton, SIGNAL(clicked()),                this, SLOT(slotMuteChanged()));        connect(rec.m_stereoButton, SIGNAL(clicked()),                this, SLOT(slotChannelsChanged()));        connect(rec.m_recordButton, SIGNAL(clicked()),                this, SLOT(slotRecordChanged()));        ++count;        mainLayout->addMultiCell(new QSpacerItem(2, 0), 0, 6, col + 2, col + 2);        col += 3;    }    count = 1;    for (BussList::iterator i = busses.begin();            i != busses.end(); ++i) {        if (i == busses.begin())            continue; // that one's the master        FaderRec rec;        rec.m_populated = true;        rec.m_pan = new Rotary                    (m_mainBox, -100.0, 100.0, 1.0, 5.0, 0.0, 20,                     Rotary::NoTicks, false, true);        rec.m_pan->setKnobColour(GUIPalette::getColour(GUIPalette::RotaryPastelBlue));        QToolTip::add            (rec.m_pan, i18n("Pan"));        rec.m_fader = new Fader                      (AudioLevel::LongFader, 20, 240, m_mainBox);        rec.m_meter = new AudioVUMeter                      (m_mainBox, VUMeter::AudioPeakHoldIECLong, true, false, 20, 240);        QToolTip::add            (rec.m_fader, i18n("Audio level"));        QToolTip::add            (rec.m_meter, i18n("Audio level"));        rec.m_muteButton = new QPushButton(m_mainBox);        rec.m_muteButton->setText("M");        rec.m_muteButton->setToggleButton(true);        rec.m_muteButton->setFlat(true);        QToolTip::add            (rec.m_muteButton, i18n("Mute"));        rec.m_pluginBox = new QVBox(m_mainBox);        for (int p = 0; p < 5; ++p) {            QPushButton *plugin = new QPushButton(rec.m_pluginBox, "pluginButton");            plugin->setText(i18n("<none>"));            plugin->setMaximumWidth(45);            QToolTip::add                (plugin, i18n("Audio plugin button"));            rec.m_plugins.push_back(plugin);            connect(plugin, SIGNAL(clicked()),                    this, SLOT(slotSelectPlugin()));        }        QLabel *idLabel = new QLabel(i18n("Sub %1").arg(count), m_mainBox, "subMaster");        idLabel->setFont(boldFont);        //	mainLayout->addWidget(idLabel, 2, col, Qt::AlignCenter);        mainLayout->addMultiCellWidget(idLabel, 0, 0, col, col + 1, Qt::AlignCenter);        //	mainLayout->addWidget(rec.m_pan, 2, col+1, Qt::AlignLeft);        mainLayout->addMultiCellWidget(rec.m_pan, 5, 5, col, col + 1, Qt::AlignCenter);        mainLayout->addWidget(rec.m_fader, 3, col, Qt::AlignCenter);        mainLayout->addWidget(rec.m_meter, 3, col + 1, Qt::AlignCenter);        //	mainLayout->addMultiCellWidget(rec.m_muteButton, 4, 4, col, col+1);        rec.m_muteButton->hide();        if (rec.m_pluginBox) {            mainLayout->addMultiCellWidget(rec.m_pluginBox, 6, 6, col, col + 1);        }        m_submasters.push_back(rec);        updateFader(count);        updatePluginButtons(count);        connect(rec.m_fader, SIGNAL(faderChanged(float)),                this, SLOT(slotFaderLevelChanged(float)));        connect(rec.m_pan, SIGNAL(valueChanged(float)),                this, SLOT(slotPanChanged(float)));        connect(rec.m_muteButton, SIGNAL(clicked()),                this, SLOT(slotMuteChanged()));        ++count;        mainLayout->addMultiCell(new QSpacerItem(2, 0), 0, 6, col + 2, col + 2);        col += 3;    }    if (busses.size() > 0) {        FaderRec rec;        rec.m_populated = true;        rec.m_fader = new Fader                      (AudioLevel::LongFader, 20, 240, m_mainBox);        rec.m_meter = new AudioVUMeter                      (m_mainBox, VUMeter::AudioPeakHoldIEC, true, false, 20, 240);        QToolTip::add            (rec.m_fader, i18n("Audio master output level"));        QToolTip::add            (rec.m_meter, i18n("Audio master output level"));        rec.m_muteButton = new QPushButton(m_mainBox);        rec.m_muteButton->setText("M");        rec.m_muteButton->setToggleButton(true);        rec.m_muteButton->setFlat(true);        QLabel *idLabel = new QLabel(i18n("Master"), m_mainBox);        idLabel->setFont(boldFont);        mainLayout->addMultiCellWidget(idLabel, 0, 0, col, col + 1, Qt::AlignCenter);        mainLayout->addWidget(rec.m_fader, 3, col, Qt::AlignCenter);        mainLayout->addWidget(rec.m_meter, 3, col + 1, Qt::AlignCenter);        //	mainLayout->addMultiCellWidget(rec.m_muteButton, 4, 4, col, col+1);        rec.m_muteButton->hide();        mainLayout->addMultiCell(new QSpacerItem(2, 0), 0, 6, col + 2, col + 2);        m_master = rec;        updateFader(0);        connect(rec.m_fader, SIGNAL(faderChanged(float)),                this, SLOT(slotFaderLevelChanged(float)));        connect(rec.m_muteButton, SIGNAL(clicked()),                this, SLOT(slotMuteChanged()));    }    m_mainBox->show();    slotUpdateFaderVisibility();    slotUpdateSynthFaderVisibility();    slotUpdateSubmasterVisibility();    slotUpdatePluginButtonVisibility();    adjustSize();}boolAudioMixerWindow::isInstrumentAssigned(InstrumentId id){    Composition::trackcontainer &tracks =        m_document->getComposition().getTracks();    for (Composition::trackcontainer::iterator ti =                tracks.begin(); ti != tracks.end(); ++ti) {        if (ti->second->getInstrument() == id) {            return true;        }    }    return false;}voidAudioMixerWindow::slotTrackAssignmentsChanged(){    for (FaderMap::iterator i = m_faders.begin(); i != m_faders.end(); ++i) {        InstrumentId id = i->first;        bool assigned = isInstrumentAssigned(id);        if (assigned != i->second.m_populated) {            // found an inconsistency            populate();            return ;        }    }}voidAudioMixerWindow::slotUpdateInstrument(InstrumentId id){    RG_DEBUG << "AudioMixerWindow::slotUpdateInstrument(" << id << ")" << endl;    blockSignals(true);    updateFader(id);    updateStereoButton(id);    updateRouteButtons(id);    updatePluginButtons(id);    updateMiscButtons(id);    blockSignals(false);}voidAudioMixerWindow::slotPluginSelected(InstrumentId id,                                     int index, int plugin){    if (id >= (int)AudioInstrumentBase) {        FaderRec &rec = m_faders[id];        if (!rec.m_populated || !rec.m_pluginBox)            return ;        // nowhere to display synth plugin info yet        if (index >= rec.m_plugins.size())            return ;        if (plugin == -1) {            rec.m_plugins[index]->setText(i18n("<none>"));            QToolTip::add                (rec.m_plugins[index], i18n("<no plugin>"));            rec.m_plugins[index]->setPaletteBackgroundColor            (kapp->palette().             color(QPalette::Active, QColorGroup::Button));        } else {            AudioPlugin *pluginClass            = m_document->getPluginManager()->getPlugin(plugin);            QColor pluginBgColour =                kapp->palette().color(QPalette::Active, QColorGroup::Light);            if (pluginClass) {                rec.m_plugins[index]->                setText(pluginClass->getLabel());                QToolTip::add                    (rec.m_plugins[index], pluginClass->getLabel());                pluginBgColour = pluginClass->getColour();            }            rec.m_plugins[index]->setPaletteForegroundColor(Qt::white);            rec.m_plugins[index]->setPaletteBackgroundColor(pluginBgColour);        }    } else if (id > 0 && id <= m_submasters.size()) {        FaderRec &rec = m_submasters[id - 1];        if (!rec.m_populated || !rec.m_pluginBox)            return ;        if (index >= rec.m_plugins.size())            return ;        if (plugin == -1) {            rec.m_plugins[index]->setText(i18n("<none>"));            QToolTip::add                (rec.m_plugins[index], i18n("<no plugin>"));            rec.m_plugins[index]->setPaletteBackgroundColor            (kapp->palette().             color(QPalette::Active, QColorGroup::Button));        } else {            AudioPlugin *pluginClass            = m_document->getPluginManager()->getPlugin(plugin);            QColor pluginBgColour =                kapp->palette().color(QPalette::Active, QColorGroup::Light);            if (pluginClass) {                rec.m_plugins[index]->                setText(pluginClass->getLabel());                QToolTip::add                    (rec.m_plugins[index], pluginClass->getLabel());                pluginBgColour = pluginClass->getColour();            }            rec.m_plugins[index]->setPaletteForegroundColor(Qt::white);            rec.m_plugins[index]->setPaletteBackgroundColor(pluginBgColour);        }    }}voidAudioMixerWindow::slotPluginBypassed(InstrumentId instrumentId,                                     int , bool ){    RG_DEBUG << "AudioMixerWindow::slotPluginBypassed(" << instrumentId << ")" << endl;    updatePluginButtons(instrumentId);}voidAudioMixerWindow::updateFader(int id){    if (id == -1) {        // This used to be the special code for updating the monitor fader.        return ;    } else if (id >= (int)AudioInstrumentBase) {        FaderRec &rec = m_faders[id];        if (!rec.m_populated)            return ;        Instrument *instrument = m_studio->getInstrumentById(id);        rec.m_fader->blockSignals(true);        rec.m_fader->setFader(instrument->getLevel());        rec.m_fader->blockSignals(false);        rec.m_pan->blockSignals(true);        rec.m_pan->setPosition(instrument->getPan() - 100);        rec.m_pan->blockSignals(false);    } else {        FaderRec &rec = (id == 0 ? m_master : m_submasters[id - 1]);        BussList busses = m_studio->getBusses();        Buss *buss = busses[id];        rec.m_fader->blockSignals(true);        rec.m_fader->setFader(buss->getLevel());        rec.m_fader->blockSignals(false);        if (rec.m_pan) {            rec.m_pan->blockSignals(true);            rec.m_pan->setPosition(buss->getPan() - 100);            rec.m_pan->blockSignals(false);        }    }}voidAudioMixerWindow::updateRouteButtons(int id){    if (id >= (int)AudioInstrumentBase) {        FaderRec &rec = m_faders[id];        if (!rec.m_populated)            return ;        if (rec.m_input)            rec.m_input->slotRepopulate();        rec.m_output->slotRepopulate();    }}voidAudioMixerWindow::updateStereoButton(int id){    if (id >= (int)AudioInstrumentBase) {        FaderRec &rec = m_faders[id];        if (!rec.m_populated)            return ;        Instrument *i = m_studio->getInstrumentById(id);        bool stereo = (i->getAudioChannels() > 1);        if (stereo == rec.m_stereoness)            return ;        rec.m_stereoness = stereo;        if (stereo)            rec.m_stereoButton->setPixmap(m_stereoPixmap);        else            rec.m_stereoButton->setPixmap(m_monoPixmap);    }}voidAudioMixerWindow::updateMiscButtons(int ){    //... complications here, because the mute/solo status is actually    // per-track rather than per-instrument... doh.}voidAudioMixerWindow::updatePluginButtons(int id){    FaderRec *rec = 0;    PluginContainer *container = 0;    if (id >= (int)AudioInstrumentBase) {        container = m_studio->getInstrumentById(id);        rec = &m_faders[id];        if (!rec->m_populated || !rec->m_pluginBox)            return ;    } else {        BussList busses = m_studio->getBusses();        if (busses.size() > id) {            container = busses[id];        }        rec = &m_submasters[id - 1];        if (!rec->m_populated || !rec->m_pluginBox)            return ;    }

⌨️ 快捷键说明

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