void EffectRack::choosePlugin(QListWidgetItem* it, bool replace)/*{{{*/ { PluginI* plugi = PluginDialog::getPlugin(track->type(), this); if (plugi) { BasePlugin* nplug = 0; if (plugi->type() == PLUGIN_LADSPA) nplug = new LadspaPlugin(); else if (plugi->type() == PLUGIN_LV2) nplug = new Lv2Plugin(); else if (plugi->type() == PLUGIN_VST) nplug = new VstPlugin(); if (nplug) { if (nplug->init(plugi->filename(), plugi->label())) { // just in case is needed later //if (!audioDevice || audioDevice->deviceType() != AudioDevice::JACK_AUDIO) // nplug->aboutToRemove(); int idx = row(it); if (replace) { audio->msgAddPlugin(track, idx, 0); //Do this part from the GUI context so user interfaces can be properly deleted // track->efxPipe()->insert(0, idx); was set on lv2 only } audio->msgAddPlugin(track, idx, nplug); nplug->setChannels(track->channels()); nplug->setActive(true); song->dirty = true; } else { QMessageBox::warning(this, tr("Failed to load plugin"), tr("Plugin '%1'' failed to initialize properly, error was:\n%2").arg(plugi->name()).arg(get_last_error())); nplug->deleteMe(); return; } } updateContents(); } }/*}}}*/
void Pipeline::apply(int ports, uint32_t nframes, float** buffer1) { //fprintf(stderr, "Pipeline::apply data: nframes:%ld %e %e %e %e\n", nframes, buffer1[0][0], buffer1[0][1], buffer1[0][2], buffer1[0][3]); bool swap = false; for (iPluginI ip = begin(); ip != end(); ++ip) { BasePlugin* p = *ip; if (p && p->enabled()) { p->setChannels(ports); if (p->hints() & PLUGIN_HAS_IN_PLACE_BROKEN) { if (swap) p->process(nframes, buffer, buffer1, 0); else p->process(nframes, buffer1, buffer, 0); swap = !swap; } else { if (swap) p->process(nframes, buffer, buffer, 0); else p->process(nframes, buffer1, buffer1, 0); } } } if (swap) { for (int i = 0; i < ports; ++i) AL::dsp->cpy(buffer1[i], buffer[i], nframes); } // p3.3.41 //fprintf(stderr, "Pipeline::apply after data: nframes:%ld %e %e %e %e\n", nframes, buffer1[0][0], buffer1[0][1], buffer1[0][2], buffer1[0][3]); }