void DlgPrefBeats::populate() { VampAnalyser::initializePluginPaths(); m_listIdentifier.clear(); m_listName.clear(); m_listLibrary.clear(); disconnect(plugincombo, SIGNAL(currentIndexChanged(int)), this, SLOT(pluginSelected(int))); plugincombo->clear(); plugincombo->setDuplicatesEnabled(false); connect(plugincombo, SIGNAL(currentIndexChanged(int)), this, SLOT(pluginSelected(int))); VampPluginLoader *loader = VampPluginLoader::getInstance(); std::vector<PluginLoader::PluginKey> plugins = loader->listPlugins(); qDebug() << "VampPluginLoader::listPlugins() returned" << plugins.size() << "plugins"; for (unsigned int iplugin=0; iplugin < plugins.size(); iplugin++) { // TODO(XXX): WTF, 48000 Plugin *plugin = loader->loadPlugin(plugins[iplugin], 48000); //TODO: find a way to add beat trackers only if (plugin) { Plugin::OutputList outputs = plugin->getOutputDescriptors(); for (unsigned int ioutput=0; ioutput < outputs.size(); ioutput++) { QString displayname = QString::fromStdString(plugin->getIdentifier()) + ":" + QString::number(ioutput); QString displaynametext = QString::fromStdString(plugin->getName()); qDebug() << "Plugin output displayname:" << displayname << displaynametext; bool goodones = ((displayname.contains("mixxxbpmdetection")|| displayname.contains("qm-tempotracker:0"))|| displayname.contains("beatroot:0")|| displayname.contains("marsyas_ibt:0")|| displayname.contains("aubiotempo:0") ); if (goodones) { m_listName << displaynametext; QString pluginlibrary = QString::fromStdString(plugins[iplugin]).section(":",0,0); m_listLibrary << pluginlibrary; QString displayname = QString::fromStdString(plugin->getIdentifier()) + ":" + QString::number(ioutput); m_listIdentifier << displayname; plugincombo->addItem(displaynametext, displayname); } } delete plugin; plugin = 0; } } }
void DlgPrefKey::populate() { VampAnalyser::initializePluginPaths(); m_listIdentifier.clear(); m_listName.clear(); m_listLibrary.clear(); plugincombo->clear(); plugincombo->setDuplicatesEnabled(false); VampPluginLoader* loader = VampPluginLoader::getInstance(); std::vector<PluginLoader::PluginKey> plugins = loader->listPlugins(); qDebug() << "VampPluginLoader::listPlugins() returned" << plugins.size() << "plugins"; for (unsigned int iplugin=0; iplugin < plugins.size(); iplugin++) { // TODO(XXX): WTF, 48000 Plugin* plugin = loader->loadPlugin(plugins[iplugin], 48000); //TODO(XXX): find a general way to add key detectors only if (plugin) { Plugin::OutputList outputs = plugin->getOutputDescriptors(); for (unsigned int ioutput=0; ioutput < outputs.size(); ioutput++) { QString displayname = QString::fromStdString(plugin->getIdentifier()) + ":" + QString::number(ioutput); QString displaynametext = QString::fromStdString(plugin->getName()); qDebug() << "Plugin output displayname:" << displayname << displaynametext; bool goodones = displayname.contains(VAMP_ANALYSER_KEY_DEFAULT_PLUGIN_ID); if (goodones) { m_listName << displaynametext; QString pluginlibrary = QString::fromStdString(plugins[iplugin]).section(":",0,0); m_listLibrary << pluginlibrary; QString displayname = QString::fromStdString(plugin->getIdentifier()) + ":" + QString::number(ioutput); m_listIdentifier << displayname; plugincombo->addItem(displaynametext, displayname); } } delete plugin; plugin = 0; } } }
bool VampAnalyser::Init(const QString pluginlibrary, const QString pluginid, const int samplerate, const int TotalSamples, bool bFastAnalysis) { m_iRemainingSamples = TotalSamples; m_rate = samplerate; if (samplerate <= 0.0) { qDebug() << "VampAnalyser: Track has non-positive samplerate"; return false; } if (TotalSamples <= 0) { qDebug() << "VampAnalyser: Track has non-positive # of samples"; return false; } if (m_plugin != NULL) { delete m_plugin; m_plugin = NULL; qDebug() << "VampAnalyser: kill plugin"; } VampPluginLoader *loader = VampPluginLoader::getInstance(); QStringList pluginlist = pluginid.split(":"); if (pluginlist.size() != 2) { qDebug() << "VampAnalyser: got malformed pluginid: " << pluginid; return false; } bool isNumber = false; int outputnumber = (pluginlist.at(1)).toInt(&isNumber); if (!isNumber) { qDebug() << "VampAnalyser: got malformed pluginid: " << pluginid; return false; } QString plugin = pluginlist.at(0); m_key = loader->composePluginKey(pluginlibrary.toStdString(), plugin.toStdString()); m_plugin = loader->loadPlugin(m_key, m_rate, Vamp::HostExt::PluginLoader::ADAPT_ALL_SAFE); if (!m_plugin) { qDebug() << "VampAnalyser: Cannot load Vamp Plug-in."; qDebug() << "Please copy libmixxxminimal.so from build dir to one of the following:"; std::vector<std::string> path = PluginHostAdapter::getPluginPath(); for (unsigned int i = 0; i < path.size(); i++) { qDebug() << QString::fromStdString(path[i]); } return false; } Plugin::OutputList outputs = m_plugin->getOutputDescriptors(); if (outputs.empty()) { qDebug() << "VampAnalyser: Plugin has no outputs!"; return false; } SelectOutput(outputnumber); m_iBlockSize = m_plugin->getPreferredBlockSize(); qDebug() << "Vampanalyser BlockSize: " << m_iBlockSize; if (m_iBlockSize == 0) { // A plugin that can handle any block size may return 0. The final block // size will be set in the initialise() call. Since 0 means it is // accepting any size, 1024 should be good m_iBlockSize = 1024; qDebug() << "Vampanalyser: setting m_iBlockSize to 1024"; } m_iStepSize = m_plugin->getPreferredStepSize(); qDebug() << "Vampanalyser StepSize: " << m_iStepSize; if (m_iStepSize == 0 || m_iStepSize > m_iBlockSize) { // A plugin may return 0 if it has no particular interest in the step // size. In this case, the host should make the step size equal to the // block size if the plugin is accepting input in the time domain. If // the plugin is accepting input in the frequency domain, the host may // use any step size. The final step size will be set in the // initialise() call. m_iStepSize = m_iBlockSize; qDebug() << "Vampanalyser: setting m_iStepSize to" << m_iStepSize; } if (!m_plugin->initialise(2, m_iStepSize, m_iBlockSize)) { qDebug() << "VampAnalyser: Cannot initialise plugin"; return false; } // Here we are using m_iBlockSize: it cannot be 0 m_pluginbuf[0] = new CSAMPLE[m_iBlockSize]; m_pluginbuf[1] = new CSAMPLE[m_iBlockSize]; m_FastAnalysisEnabled = bFastAnalysis; if (m_FastAnalysisEnabled) { qDebug() << "Using fast analysis methods for BPM and Replay Gain."; m_iMaxSamplesToAnalyse = 120 * m_rate; //only consider the first minute } return true; }