本文整理汇总了C++中plugin::OutputList::size方法的典型用法代码示例。如果您正苦于以下问题:C++ OutputList::size方法的具体用法?C++ OutputList::size怎么用?C++ OutputList::size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类plugin::OutputList
的用法示例。
在下文中一共展示了OutputList::size方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
// Get & load plugins that return timing marks
std::list<std::string> xLightsVamp::GetAvailablePlugins(AudioManager* paudio)
{
std::list<std::string> ret;
// Load the plugins in case they have not already been loaded
LoadPlugins(paudio);
for (std::vector<Vamp::Plugin *>::iterator it = _loadedPlugins.begin(); it != _loadedPlugins.end(); ++it)
{
Plugin::OutputList outputs = (*it)->getOutputDescriptors();
for (Plugin::OutputList::iterator j = outputs.begin(); j != outputs.end(); ++j)
{
if (j->sampleType == Plugin::OutputDescriptor::FixedSampleRate ||
j->sampleType == Plugin::OutputDescriptor::OneSamplePerStep ||
!j->hasFixedBinCount ||
(j->hasFixedBinCount && j->binCount > 1))
{
// We are filering out this from our return array
continue;
}
std::string name = std::string(wxString::FromUTF8((*it)->getName().c_str()).c_str());
if (outputs.size() > 1)
{
// This is not the plugin's only output.
// Use "plugin name: output name" as the effect name,
// unless the output name is the same as the plugin name
std::string outputName = std::string(wxString::FromUTF8(j->name.c_str()).c_str());
if (outputName != name)
{
std::ostringstream stringStream;
stringStream << name << ": " << outputName.c_str();
name = stringStream.str();
}
}
_plugins[name] = (*it);
}
}
for (std::map<std::string, Vamp::Plugin *>::iterator it = _plugins.begin(); it != _plugins.end(); ++it)
{
ret.push_back(it->first);
}
return ret;
}
示例2: populate
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;
}
}
}
示例3: populate
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;
}
}
}
示例4: if
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) {
//.........这里部分代码省略.........
示例5: runPlugin
int runPlugin(string myname, string soname, string id,
string output, int outputNo, bool useFrames, PaStreamParameters inputParameters)
{
float *recordedSamples;
float *fifo;
PaStream* stream;
PaError err = paNoError;
int elapsed = 0;
int returnValue = 1;
RealTime rt;
PluginWrapper *wrapper = 0;
RealTime adjustment = RealTime::zeroTime;
PluginLoader *loader = PluginLoader::getInstance();
PluginLoader::PluginKey key = loader->composePluginKey(soname, id);
// load plugin
Plugin *plugin = loader->loadPlugin(key, SAMPLE_RATE, PluginLoader::ADAPT_ALL_SAFE);
if (!plugin) {
cerr << myname << ": ERROR: Failed to load plugin \"" << id
<< "\" from library \"" << soname << "\"" << endl;
return 1;
}
// Find block/step size
int blockSize = plugin->getPreferredBlockSize();
int stepSize = plugin->getPreferredStepSize();
if (blockSize == 0) {
blockSize = 1024;
}
if (stepSize == 0) {
if (plugin->getInputDomain() == Plugin::FrequencyDomain) {
stepSize = blockSize/2;
} else {
stepSize = blockSize;
}
} else if (stepSize > blockSize) {
cerr << "WARNING: stepSize " << stepSize << " > blockSize " << blockSize << ", resetting blockSize to ";
if (plugin->getInputDomain() == Plugin::FrequencyDomain) {
blockSize = stepSize * 2;
} else {
blockSize = stepSize;
}
cerr << blockSize << endl;
}
// set up port audio
fifo = new float[blockSize]();
recordedSamples = new float[stepSize]();
ofstream *out = 0;
cerr << "Running plugin: \"" << plugin->getIdentifier() << "\"..." << endl;
cerr << "Using block size = " << blockSize << ", step size = " << stepSize << endl;
// display output name
Plugin::OutputList outputs = plugin->getOutputDescriptors();
Plugin::OutputDescriptor od;
if (outputs.empty()) {
cerr << "ERROR: Plugin has no outputs!" << endl;
goto done;
}
if (outputNo < 0) {
for (size_t oi = 0; oi < outputs.size(); ++oi) {
if (outputs[oi].identifier == output) {
outputNo = oi;
break;
}
}
if (outputNo < 0) {
cerr << "ERROR: Non-existent output \"" << output << "\" requested" << endl;
goto done;
}
} else {
if (int(outputs.size()) <= outputNo) {
cerr << "ERROR: Output " << outputNo << " requested, but plugin has only " << outputs.size() << " output(s)" << endl;
goto done;
}
}
od = outputs[outputNo];
cerr << "Output is: \"" << od.identifier << "\"" << endl;
// Initialise plugin
if (!plugin->initialise(1, stepSize, blockSize)) {
cerr << "ERROR: Plugin initialise (stepSize = " << stepSize << ", blockSize = "
<< blockSize << ") failed." << endl;
goto done;
}
// Compensate timestamp if in freq domain
wrapper = dynamic_cast<PluginWrapper *>(plugin);
if (wrapper) {
PluginInputDomainAdapter *ida = wrapper->getWrapper<PluginInputDomainAdapter>();
if (ida) adjustment = ida->getTimestampAdjustment();
//.........这里部分代码省略.........
示例6: runPlugin
int runPlugin(string myname, string soname, string id,
string output, int outputNo, string wavname,
string outfilename, bool useFrames,
map<string,float> parameters)
{
PluginLoader *loader = PluginLoader::getInstance();
PluginLoader::PluginKey key = loader->composePluginKey(soname, id);
SNDFILE *sndfile;
SF_INFO sfinfo;
memset(&sfinfo, 0, sizeof(SF_INFO));
if (wavname == "")
sndfile = sf_open_fd(0, SFM_READ, &sfinfo, true);
else
sndfile = sf_open(wavname.c_str(), SFM_READ, &sfinfo);
if (!sndfile) {
cerr << myname << ": ERROR: Failed to open input file \""
<< wavname << "\": " << sf_strerror(sndfile) << endl;
return 1;
}
ofstream *out = 0;
if (outfilename != "") {
out = new ofstream(outfilename.c_str(), ios::out);
if (!*out) {
cerr << myname << ": ERROR: Failed to open output file \""
<< outfilename << "\" for writing" << endl;
delete out;
return 1;
}
}
Plugin *plugin = loader->loadPlugin
(key, sfinfo.samplerate, PluginLoader::ADAPT_ALL_SAFE);
if (!plugin) {
cerr << myname << ": ERROR: Failed to load plugin \"" << id
<< "\" from library \"" << soname << "\"" << endl;
sf_close(sndfile);
if (out) {
out->close();
delete out;
}
return 1;
}
cerr << "Running plugin: \"" << plugin->getIdentifier() << "\"..." << endl;
// parameters
for (map<string,float>::iterator iter = parameters.begin(); iter!=parameters.end(); iter++) {
plugin->setParameter(iter->first, iter->second);
cerr << "Set parameter " << iter->first << " = " << iter->second << endl;
}
// Note that the following would be much simpler if we used a
// PluginBufferingAdapter as well -- i.e. if we had passed
// PluginLoader::ADAPT_ALL to loader->loadPlugin() above, instead
// of ADAPT_ALL_SAFE. Then we could simply specify our own block
// size, keep the step size equal to the block size, and ignore
// the plugin's bleatings. However, there are some issues with
// using a PluginBufferingAdapter that make the results sometimes
// technically different from (if effectively the same as) the
// un-adapted plugin, so we aren't doing that here. See the
// PluginBufferingAdapter documentation for details.
int blockSize = plugin->getPreferredBlockSize();
int stepSize = plugin->getPreferredStepSize();
if (blockSize == 0) {
blockSize = 1024;
}
if (stepSize == 0) {
if (plugin->getInputDomain() == Plugin::FrequencyDomain) {
stepSize = blockSize/2;
} else {
stepSize = blockSize;
}
} else if (stepSize > blockSize) {
cerr << "WARNING: stepSize " << stepSize << " > blockSize " << blockSize << ", resetting blockSize to ";
if (plugin->getInputDomain() == Plugin::FrequencyDomain) {
blockSize = stepSize * 2;
} else {
blockSize = stepSize;
}
cerr << blockSize << endl;
}
int overlapSize = blockSize - stepSize;
sf_count_t currentStep = 0;
int finalStepsRemaining = max(1, (blockSize / stepSize) - 1); // at end of file, this many part-silent frames needed after we hit EOF
int channels = sfinfo.channels;
float *filebuf = new float[blockSize * channels];
float **plugbuf = new float*[channels];
for (int c = 0; c < channels; ++c) plugbuf[c] = new float[blockSize + 2];
cerr << "Using block size = " << blockSize << ", step size = "
<< stepSize << endl;
//.........这里部分代码省略.........
示例7: AutoRegisterPlugins
bool VampEffectsModule::AutoRegisterPlugins(PluginManagerInterface & pm)
{
#ifdef EFFECT_CATEGORIES
InitCategoryMap();
#endif
PluginLoader *loader = PluginLoader::getInstance();
EffectManager& em = EffectManager::Get();
PluginLoader::PluginKeyList keys = loader->listPlugins();
for (PluginLoader::PluginKeyList::iterator i = keys.begin();
i != keys.end(); ++i) {
Plugin *vp = loader->loadPlugin(*i, 48000); // rate doesn't matter here
if (!vp) continue;
#ifdef EFFECT_CATEGORIES
PluginLoader::PluginCategoryHierarchy category =
loader->getPluginCategory(*i);
wxString vampCategory = VampHierarchyToUri(category);
#endif
// We limit the listed plugin outputs to those whose results can
// readily be displayed in an Audacity label track.
//
// - Any output whose features have no values (time instants only),
// with or without duration, is fine
//
// - Any output whose features have more than one value, or an
// unknown or variable number of values, is right out
//
// - Any output whose features have exactly one value, with
// variable sample rate or with duration, should be OK --
// this implies a sparse feature, of which the time and/or
// duration are significant aspects worth displaying
//
// - An output whose features have exactly one value, with
// fixed sample rate and no duration, cannot be usefully
// displayed -- the value is the only significant piece of
// data there and we have no good value plot
Plugin::OutputList outputs = vp->getOutputDescriptors();
int n = 0;
bool hasParameters = !vp->getParameterDescriptors().empty();
for (Plugin::OutputList::iterator j = outputs.begin();
j != outputs.end(); ++j) {
if (j->sampleType == Plugin::OutputDescriptor::FixedSampleRate ||
j->sampleType == Plugin::OutputDescriptor::OneSamplePerStep ||
!j->hasFixedBinCount ||
(j->hasFixedBinCount && j->binCount > 1)) {
// All of these qualities disqualify (see notes above)
++n;
continue;
}
wxString name = LAT1CTOWX(vp->getName().c_str());
if (outputs.size() > 1) {
// This is not the plugin's only output.
// Use "plugin name: output name" as the effect name,
// unless the output name is the same as the plugin name
wxString outputName = LAT1CTOWX(j->name.c_str());
if (outputName != name) {
name = wxString::Format(wxT("%s: %s"),
name.c_str(), outputName.c_str());
}
}
#ifdef EFFECT_CATEGORIES
VampEffect *effect = new VampEffect(*i, n, hasParameters, name,
vampCategory);
#else
VampEffect *effect = new VampEffect(*i, n, hasParameters, name);
#endif
em.RegisterEffect(this, effect);
++n;
}
delete vp;
}
return true;
}
示例8: main
int main(int argc, char **argv)
{
const char *myname = argv[0];
if (argc != 2) {
cerr << "usage: " << myname << " file.wav" << endl;
return 2;
}
const char *infile = argv[1];
SF_INFO sfinfo;
SNDFILE *sndfile = sf_open(infile, SFM_READ, &sfinfo);
if (!sndfile) {
cerr << myname << ": Failed to open input file " << infile
<< ": " << sf_strerror(sndfile) << endl;
return 1;
}
Chordino *chordino = new Chordino(sfinfo.samplerate);
PluginInputDomainAdapter *ia = new PluginInputDomainAdapter(chordino);
ia->setProcessTimestampMethod(PluginInputDomainAdapter::ShiftData);
PluginBufferingAdapter *adapter = new PluginBufferingAdapter(ia);
int blocksize = adapter->getPreferredBlockSize();
// Plugin requires 1 channel (we will mix down)
if (!adapter->initialise(1, blocksize, blocksize)) {
cerr << myname << ": Failed to initialise Chordino adapter!" << endl;
return 1;
}
float *filebuf = new float[sfinfo.channels * blocksize];
float *mixbuf = new float[blocksize];
Plugin::FeatureList chordFeatures;
Plugin::FeatureSet fs;
int chordFeatureNo = -1;
Plugin::OutputList outputs = adapter->getOutputDescriptors();
for (int i = 0; i < int(outputs.size()); ++i) {
if (outputs[i].identifier == "simplechord") {
chordFeatureNo = i;
}
}
if (chordFeatureNo < 0) {
cerr << myname << ": Failed to identify chords output!" << endl;
return 1;
}
int frame = 0;
while (frame < sfinfo.frames) {
int count = -1;
if ((count = sf_readf_float(sndfile, filebuf, blocksize)) <= 0) break;
// mix down
for (int i = 0; i < blocksize; ++i) {
mixbuf[i] = 0.f;
if (i < count) {
for (int c = 0; c < sfinfo.channels; ++c) {
mixbuf[i] += filebuf[i * sfinfo.channels + c] / sfinfo.channels;
}
}
}
RealTime timestamp = RealTime::frame2RealTime(frame, sfinfo.samplerate);
// feed to plugin: can just take address of buffer, as only one channel
fs = adapter->process(&mixbuf, timestamp);
chordFeatures.insert(chordFeatures.end(),
fs[chordFeatureNo].begin(),
fs[chordFeatureNo].end());
frame += count;
}
sf_close(sndfile);
// features at end of processing (actually Chordino does all its work here)
fs = adapter->getRemainingFeatures();
// chord output is output index 0
chordFeatures.insert(chordFeatures.end(),
fs[chordFeatureNo].begin(),
fs[chordFeatureNo].end());
for (int i = 0; i < (int)chordFeatures.size(); ++i) {
cout << chordFeatures[i].timestamp.toString() << ": "
<< chordFeatures[i].label << endl;
}
delete[] filebuf;
delete[] mixbuf;
delete adapter;
}
示例9: SelectOutput
void VampAnalyser::SelectOutput(const int outputnumber) {
Plugin::OutputList outputs = m_plugin->getOutputDescriptors();
if (outputnumber >= 0 && outputnumber < int(outputs.size())) {
m_iOutput = outputnumber;
}
}
示例10:
Plugin *VampEffectsModule::FindPlugin(const wxString & path,
int & output,
bool & hasParameters)
{
PluginLoader::PluginKey key = path.BeforeLast(wxT('/')).ToUTF8().data();
Plugin *vp = PluginLoader::getInstance()->loadPlugin(key, 48000); // rate doesn't matter here
if (!vp)
{
return false;
}
// We limit the listed plugin outputs to those whose results can
// readily be displayed in an Audacity label track.
//
// - Any output whose features have no values (time instants only),
// with or without duration, is fine
//
// - Any output whose features have more than one value, or an
// unknown or variable number of values, is right out
//
// - Any output whose features have exactly one value, with
// variable sample rate or with duration, should be OK --
// this implies a sparse feature, of which the time and/or
// duration are significant aspects worth displaying
//
// - An output whose features have exactly one value, with
// fixed sample rate and no duration, cannot be usefully
// displayed -- the value is the only significant piece of
// data there and we have no good value plot
Plugin::OutputList outputs = vp->getOutputDescriptors();
output = 0;
hasParameters = !vp->getParameterDescriptors().empty();
for (Plugin::OutputList::iterator j = outputs.begin(); j != outputs.end(); ++j)
{
if (j->sampleType == Plugin::OutputDescriptor::FixedSampleRate ||
j->sampleType == Plugin::OutputDescriptor::OneSamplePerStep ||
!j->hasFixedBinCount ||
(j->hasFixedBinCount && j->binCount > 1))
{
// All of these qualities disqualify (see notes above)
++output;
continue;
}
wxString name = wxString::FromUTF8(vp->getName().c_str());
if (outputs.size() > 1)
{
// This is not the plugin's only output.
// Use "plugin name: output name" as the effect name,
// unless the output name is the same as the plugin name
wxString outputName = wxString::FromUTF8(j->name.c_str());
if (outputName != name)
{
name = wxString::Format(wxT("%s: %s"),
name.c_str(), outputName.c_str());
}
}
if (wxString::FromUTF8(key.c_str()) + wxT("/") + name == path)
{
return vp;
}
++output;
}
delete vp;
return NULL;
}
示例11: FindPlugins
wxArrayString VampEffectsModule::FindPlugins(PluginManagerInterface & WXUNUSED(pm))
{
wxArrayString names;
PluginLoader *loader = PluginLoader::getInstance();
PluginLoader::PluginKeyList keys = loader->listPlugins();
for (PluginLoader::PluginKeyList::iterator i = keys.begin(); i != keys.end(); ++i)
{
Plugin *vp = PluginLoader::getInstance()->loadPlugin(*i, 48000); // rate doesn't matter here
if (!vp)
{
continue;
}
// We limit the listed plugin outputs to those whose results can
// readily be displayed in an Audacity label track.
//
// - Any output whose features have no values (time instants only),
// with or without duration, is fine
//
// - Any output whose features have more than one value, or an
// unknown or variable number of values, is right out
//
// - Any output whose features have exactly one value, with
// variable sample rate or with duration, should be OK --
// this implies a sparse feature, of which the time and/or
// duration are significant aspects worth displaying
//
// - An output whose features have exactly one value, with
// fixed sample rate and no duration, cannot be usefully
// displayed -- the value is the only significant piece of
// data there and we have no good value plot
Plugin::OutputList outputs = vp->getOutputDescriptors();
int output = 0;
for (Plugin::OutputList::iterator j = outputs.begin(); j != outputs.end(); ++j)
{
if (j->sampleType == Plugin::OutputDescriptor::FixedSampleRate ||
j->sampleType == Plugin::OutputDescriptor::OneSamplePerStep ||
!j->hasFixedBinCount ||
(j->hasFixedBinCount && j->binCount > 1))
{
// All of these qualities disqualify (see notes above)
++output;
continue;
}
wxString name = wxString::FromUTF8(vp->getName().c_str());
if (outputs.size() > 1)
{
// This is not the plugin's only output.
// Use "plugin name: output name" as the effect name,
// unless the output name is the same as the plugin name
wxString outputName = wxString::FromUTF8(j->name.c_str());
if (outputName != name)
{
name = wxString::Format(wxT("%s: %s"),
name.c_str(), outputName.c_str());
}
}
wxString path = wxString::FromUTF8(i->c_str()) + wxT("/") + name;
names.Add(path);
++output;
}
delete vp;
}
return names;
}
示例12: ProcessPlugin
wxString VAMPPluginDialog::ProcessPlugin(xLightsXmlFile* xml_file, xLightsFrame *xLightsParent, const wxString &name, AudioManager* media)
{
Vamp::Plugin *p = media->GetVamp()->GetPlugin(std::string(name.c_str()));
Label1->SetLabel(p->getName());
Label2->SetLabel(p->getDescription());
int output = 0;
Plugin::OutputList outputs = p->getOutputDescriptors();
if (outputs.size() > 1) {
for (int x = 0; x < outputs.size(); x++) {
wxString pname = wxString::FromUTF8(p->getName().c_str());
wxString outputName = wxString::FromUTF8(outputs[x].name.c_str());
if (outputName != pname) {
pname = wxString::Format(wxT("%s: %s"),
pname.c_str(), outputName.c_str());
}
if (name == pname) {
output = x;
TimingName->SetValue(outputName);
}
}
} else {
TimingName->SetValue(p->getName());
}
PluginBase::ParameterList params = p->getParameterDescriptors();
std::vector<void *> controls;
for (int x = 0; x < params.size(); x++) {
wxString tip = wxString::FromUTF8(params[x].description.c_str());
wxString unit = wxString::FromUTF8(params[x].unit.c_str());
float value = p->getParameter(params[x].identifier);
wxString labelText = wxString::FromUTF8(params[x].name.c_str());
if (!unit.IsEmpty()) {
labelText += wxT(" (") + unit + wxT(")");
}
wxStaticText *desc = new wxStaticText(this, wxID_ANY, labelText + wxT(":"));
SettingsSizer->Add(desc, 1, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
if (params[x].isQuantized &&
params[x].quantizeStep == 1.0 &&
params[x].minValue == 0.0 &&
params[x].maxValue == 1.0)
{
wxCheckBox *cb = new wxCheckBox(this, wxID_ANY, _(""));
cb->SetValue(value > 0.5);
if (!tip.IsEmpty())
{
cb->SetToolTip(tip);
}
SettingsSizer->Add(cb, 1, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5);
controls.push_back(cb);
}
else if (params[x].isQuantized &&
params[x].quantizeStep == 1.0 &&
!params[x].valueNames.empty())
{
wxChoice *choice = new wxChoice(this, wxID_ANY);
for (size_t i = 0, cnt = params[x].valueNames.size(); i < cnt; i++)
{
wxString choicetxt = wxString::FromUTF8(params[x].valueNames[i].c_str());
choice->Append(choicetxt);
if (size_t(value - params[x].minValue + 0.5) == i) {
choice->SetSelection(i);
}
}
choice->SetSizeHints(-1, -1);
if (!tip.IsEmpty())
{
choice->SetToolTip(tip);
}
SettingsSizer->Add(choice, 1, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5);
controls.push_back(choice);
}
else
{
FloatSliderControl *slider = new FloatSliderControl(this, value, params[x].minValue, params[x].maxValue, tip);
SettingsSizer->Add(slider,
1, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5);
controls.push_back(slider);
}
}
Fit();
int res = ShowModal();
if (res == wxID_OK) {
while (xml_file->TimingAlreadyExists(TimingName->GetValue().ToStdString(), xLightsParent)) {
wxMessageBox("Timing track " + TimingName->GetValue() + " already exists");
res = ShowModal();
if (res != wxID_OK) {
return "";
}
}
std::vector<int> starts;
std::vector<int> ends;
std::vector<std::string> labels;
//.........这里部分代码省略.........