diff options
Diffstat (limited to 'vamphost/src/ofxVamphost.cpp')
| -rw-r--r-- | vamphost/src/ofxVamphost.cpp | 318 |
1 files changed, 28 insertions, 290 deletions
diff --git a/vamphost/src/ofxVamphost.cpp b/vamphost/src/ofxVamphost.cpp index 6d2cefc..4a8ade6 100644 --- a/vamphost/src/ofxVamphost.cpp +++ b/vamphost/src/ofxVamphost.cpp @@ -1,317 +1,53 @@ #include "ofxVamphost.h" using namespace std; +using namespace Vamp; int Vamphost::getRT(){ return rt.msec(); } -enum Verbosity { - PluginIds, - PluginOutputIds, - PluginInformation, - PluginInformationDetailed -}; - -static string header(string text, int level) -{ - string out = '\n' + text + '\n'; - for (size_t i = 0; i < text.length(); ++i) { - out += (level == 1 ? '=' : level == 2 ? '-' : '~'); - } - out += '\n'; - return out; -} -void printPluginPath(bool verbose) -{ - if (verbose) { - cout << "\nVamp plugin search path: "; - } - - vector<string> path = PluginHostAdapter::getPluginPath(); - for (size_t i = 0; i < path.size(); ++i) { - if (verbose) { - cout << "[" << path[i] << "]"; - } else { - cout << path[i] << endl; - } - } - - if (verbose) cout << endl; +Vamphost::Vamphost(){ + loader = PluginLoader::getInstance(); + list=loader->listPlugins(); + for (auto p: list) { + cerr<<p<<endl; + } } -void enumeratePlugins(Verbosity verbosity) -{ - PluginLoader *loader = PluginLoader::getInstance(); - - if (verbosity == PluginInformation) { - cout << "\nVamp plugin libraries found in search path:" << endl; - } - - vector<PluginLoader::PluginKey> plugins = loader->listPlugins(); - typedef multimap<string, PluginLoader::PluginKey> - LibraryMap; - LibraryMap libraryMap; - - for (size_t i = 0; i < plugins.size(); ++i) { - string path = loader->getLibraryPathForPlugin(plugins[i]); - libraryMap.insert(LibraryMap::value_type(path, plugins[i])); - } - - string prevPath = ""; - int index = 0; - - for (LibraryMap::iterator i = libraryMap.begin(); - i != libraryMap.end(); ++i) { - - string path = i->first; - PluginLoader::PluginKey key = i->second; - - if (path != prevPath) { - prevPath = path; - index = 0; - if (verbosity == PluginInformation) { - cout << "\n " << path << ":" << endl; - } else if (verbosity == PluginInformationDetailed) { - string::size_type ki = i->second.find(':'); - string text = "Library \"" + i->second.substr(0, ki) + "\""; - cout << "\n" << header(text, 1); - } - } - - Plugin *plugin = loader->loadPlugin(key, 48000); - if (plugin) { - - char c = char('A' + index); - if (c > 'Z') c = char('a' + (index - 26)); - - PluginLoader::PluginCategoryHierarchy category = - loader->getPluginCategory(key); - string catstr; - if (!category.empty()) { - for (size_t ci = 0; ci < category.size(); ++ci) { - if (ci > 0) catstr += " > "; - catstr += category[ci]; - } - } - - if (verbosity == PluginInformation) { - - cout << " [" << c << "] [v" - << plugin->getVampApiVersion() << "] " - << plugin->getName() << ", \"" - << plugin->getIdentifier() << "\"" << " [" - << plugin->getMaker() << "]" << endl; - - if (catstr != "") { - cout << " > " << catstr << endl; - } - - if (plugin->getDescription() != "") { - cout << " - " << plugin->getDescription() << endl; - } - - } else if (verbosity == PluginInformationDetailed) { - - cout << header(plugin->getName(), 2); - cout << " - Identifier: " - << key << endl; - cout << " - Plugin Version: " - << plugin->getPluginVersion() << endl; - cout << " - Vamp API Version: " - << plugin->getVampApiVersion() << endl; - cout << " - Maker: \"" - << plugin->getMaker() << "\"" << endl; - cout << " - Copyright: \"" - << plugin->getCopyright() << "\"" << endl; - cout << " - Description: \"" - << plugin->getDescription() << "\"" << endl; - cout << " - Input Domain: " - << (plugin->getInputDomain() == Vamp::Plugin::TimeDomain ? - "Time Domain" : "Frequency Domain") << endl; - cout << " - Default Step Size: " - << plugin->getPreferredStepSize() << endl; - cout << " - Default Block Size: " - << plugin->getPreferredBlockSize() << endl; - cout << " - Minimum Channels: " - << plugin->getMinChannelCount() << endl; - cout << " - Maximum Channels: " - << plugin->getMaxChannelCount() << endl; - - } else if (verbosity == PluginIds) { - cout << "vamp:" << key << endl; - } - - Plugin::OutputList outputs = - plugin->getOutputDescriptors(); - - if (verbosity == PluginInformationDetailed) { - - Plugin::ParameterList params = plugin->getParameterDescriptors(); - for (size_t j = 0; j < params.size(); ++j) { - Plugin::ParameterDescriptor &pd(params[j]); - cout << "\nParameter " << j+1 << ": \"" << pd.name << "\"" << endl; - cout << " - Identifier: " << pd.identifier << endl; - cout << " - Description: \"" << pd.description << "\"" << endl; - if (pd.unit != "") { - cout << " - Unit: " << pd.unit << endl; - } - cout << " - Range: "; - cout << pd.minValue << " -> " << pd.maxValue << endl; - cout << " - Default: "; - cout << pd.defaultValue << endl; - if (pd.isQuantized) { - cout << " - Quantize Step: " - << pd.quantizeStep << endl; - } - if (!pd.valueNames.empty()) { - cout << " - Value Names: "; - for (size_t k = 0; k < pd.valueNames.size(); ++k) { - if (k > 0) cout << ", "; - cout << "\"" << pd.valueNames[k] << "\""; - } - cout << endl; - } - } - - if (outputs.empty()) { - cout << "\n** Note: This plugin reports no outputs!" << endl; - } - for (size_t j = 0; j < outputs.size(); ++j) { - Plugin::OutputDescriptor &od(outputs[j]); - cout << "\nOutput " << j+1 << ": \"" << od.name << "\"" << endl; - cout << " - Identifier: " << od.identifier << endl; - cout << " - Description: \"" << od.description << "\"" << endl; - if (od.unit != "") { - cout << " - Unit: " << od.unit << endl; - } - if (od.hasFixedBinCount) { - cout << " - Default Bin Count: " << od.binCount << endl; - } - if (!od.binNames.empty()) { - bool have = false; - for (size_t k = 0; k < od.binNames.size(); ++k) { - if (od.binNames[k] != "") { - have = true; break; - } - } - if (have) { - cout << " - Bin Names: "; - for (size_t k = 0; k < od.binNames.size(); ++k) { - if (k > 0) cout << ", "; - cout << "\"" << od.binNames[k] << "\""; - } - cout << endl; - } - } - if (od.hasKnownExtents) { - cout << " - Default Extents: "; - cout << od.minValue << " -> " << od.maxValue << endl; - } - if (od.isQuantized) { - cout << " - Quantize Step: " - << od.quantizeStep << endl; - } - cout << " - Sample Type: " - << (od.sampleType == - Plugin::OutputDescriptor::OneSamplePerStep ? - "One Sample Per Step" : - od.sampleType == - Plugin::OutputDescriptor::FixedSampleRate ? - "Fixed Sample Rate" : - "Variable Sample Rate") << endl; - if (od.sampleType != - Plugin::OutputDescriptor::OneSamplePerStep) { - cout << " - Default Rate: " - << od.sampleRate << endl; - } - cout << " - Has Duration: " - << (od.hasDuration ? "Yes" : "No") << endl; - } - } - - if (outputs.size() > 1 || verbosity == PluginOutputIds) { - for (size_t j = 0; j < outputs.size(); ++j) { - if (verbosity == PluginInformation) { - cout << " (" << j << ") " - << outputs[j].name << ", \"" - << outputs[j].identifier << "\"" << endl; - if (outputs[j].description != "") { - cout << " - " - << outputs[j].description << endl; - } - } else if (verbosity == PluginOutputIds) { - cout << "vamp:" << key << ":" << outputs[j].identifier << endl; - } - } - } - - ++index; - - delete plugin; - } - } - - if (verbosity == PluginInformation || - verbosity == PluginInformationDetailed) { - cout << endl; - } +int Vamphost::init(int whichplugin,const int &_channels,const int &_rate,const int &_outputNo,const string &_output){ + key = list[whichplugin]; + init(_channels,_rate,_outputNo,_output); } -void printPluginCategoryList() -{ - PluginLoader *loader = PluginLoader::getInstance(); - - vector<PluginLoader::PluginKey> plugins = loader->listPlugins(); - - set<string> printedcats; - - for (size_t i = 0; i < plugins.size(); ++i) { - - PluginLoader::PluginKey key = plugins[i]; - - PluginLoader::PluginCategoryHierarchy category = - loader->getPluginCategory(key); - - Plugin *plugin = loader->loadPlugin(key, 48000); - if (!plugin) continue; - - string catstr = ""; - - if (category.empty()) catstr = '|'; - else { - for (size_t j = 0; j < category.size(); ++j) { - catstr += category[j]; - catstr += '|'; - if (printedcats.find(catstr) == printedcats.end()) { - std::cout << catstr << std::endl; - printedcats.insert(catstr); - } - } - } - - std::cout << catstr << key << ":::" << plugin->getName() << ":::" << plugin->getMaker() << ":::" << plugin->getDescription() << std::endl; - } -} int Vamphost::init(const string &soname,const string &id,const int &_channels,const int &_rate,const int &_outputNo,const string &_output){ - - //stuff that only happens once + key = loader->composePluginKey(soname, id); + init(_channels,_rate,_outputNo,_output); +} +int Vamphost::init(const int &_channels,const int &_rate,const int &_outputNo,const string &_output){ channels =_channels; rate=_rate; outputNo=_outputNo; output=_output; +} +int Vamphost::init(int whichplugin){ + key = list[whichplugin]; + init(); +} +int Vamphost::init(){ + //stuff that only happens once + features[0.0f]=0; - loader = PluginLoader::getInstance(); - key = loader->composePluginKey(soname, id); - plugin = loader->loadPlugin(key, _rate, PluginLoader::ADAPT_ALL_SAFE); + + + plugin = loader->loadPlugin(key, rate, PluginLoader::ADAPT_ALL_SAFE); if (!plugin) { - cerr << ": ERROR: Failed to load plugin \"" << id - << "\" from library \"" << soname << "\"" << endl; + cerr << ": ERROR: Failed to load plugin \"" << key<< "\"" << endl; return -1; } @@ -455,6 +191,8 @@ void Vamphost::process_frame(float *data,int samples_in_frame){ Plugin::FeatureSet feat=plugin->process(plugbuf, rt); + //if (feat[outputNo].size()>0) cerr<<"BEAT"<<endl; + for (unsigned int i = 0; i < feat[outputNo].size(); ++i) { features[((float)feat[outputNo][i].timestamp.sec)+(((float)feat[outputNo][i].timestamp.nsec)*.000000001)]=featureNo; featureNo++; |
