📄 audiomixerwindow.cpp
字号:
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 + -