Mercurial > hg > sonic-annotator
diff runner/FeatureExtractionManager.h @ 1:92911f967a16
* some reorganisation
author | Chris Cannam |
---|---|
date | Thu, 11 Dec 2008 10:26:12 +0000 |
parents | FeatureExtractionManager.h@581b1b150a4d |
children | 8b20521fc40f |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runner/FeatureExtractionManager.h Thu Dec 11 10:26:12 2008 +0000 @@ -0,0 +1,110 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Annotator + A utility for batch feature extraction from audio files. + Mark Levy, Chris Sutton and Chris Cannam, Queen Mary, University of London. + Copyright 2007-2008 QMUL. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#ifndef _FEATURE_EXTRACTION_MANAGER_H_ +#define _FEATURE_EXTRACTION_MANAGER_H_ + +#include <vector> +#include <set> +#include <string> + +#include <vamp-hostsdk/Plugin.h> +#include <vamp-hostsdk/PluginSummarisingAdapter.h> +#include <transform/Transform.h> + +using std::vector; +using std::set; +using std::string; +using std::pair; +using std::map; + +class FeatureWriter; + +class FeatureExtractionManager +{ +public: + FeatureExtractionManager(); + virtual ~FeatureExtractionManager(); + + void setChannels(int channels); + void setDefaultSampleRate(int sampleRate); + + bool setSummaryTypes(const set<string> &summaryTypes, + bool summariesOnly, + const Vamp::HostExt::PluginSummarisingAdapter::SegmentBoundaries &boundaries); + + bool addFeatureExtractor(Transform transform, + const vector<FeatureWriter*> &writers); + + bool addFeatureExtractorFromFile(QString transformXmlFile, + const vector<FeatureWriter*> &writers); + + bool addDefaultFeatureExtractor(TransformId transformId, + const vector<FeatureWriter*> &writers); + + void extractFeatures(QString audioSource); + +private: + // A plugin may have many outputs, so we can have more than one + // transform requested for a single plugin. The things we want to + // run in our process loop are plugins rather than their outputs, + // so we maintain a map from the plugins to the transforms desired + // of them and then iterate through this map + + typedef map<Transform, vector<FeatureWriter *> > TransformWriterMap; + typedef map<Vamp::Plugin *, TransformWriterMap> PluginMap; + PluginMap m_plugins; + + // And a map back from transforms to their plugins. Note that + // this is keyed by transform, not transform ID -- two differently + // configured transforms with the same ID must use different + // plugin instances. + + typedef map<Transform, Vamp::Plugin *> TransformPluginMap; + TransformPluginMap m_transformPluginMap; + + // Cache the plugin output descriptors, mapping from plugin to a + // map from output ID to output descriptor. + typedef map<string, Vamp::Plugin::OutputDescriptor> OutputMap; + typedef map<Vamp::Plugin *, OutputMap> PluginOutputMap; + PluginOutputMap m_pluginOutputs; + + // Map from plugin output identifier to plugin output index + typedef map<string, int> OutputIndexMap; + OutputIndexMap m_pluginOutputIndices; + + typedef set<std::string> SummaryNameSet; + SummaryNameSet m_summaries; + bool m_summariesOnly; + Vamp::HostExt::PluginSummarisingAdapter::SegmentBoundaries m_boundaries; + + void writeSummaries(QString audioSource, Vamp::Plugin *); + + void writeFeatures(QString audioSource, + Vamp::Plugin *, + const Vamp::Plugin::FeatureSet &, + Transform::SummaryType summaryType = + Transform::NoSummary); + void finish(); + + int m_blockSize; + int m_defaultSampleRate; + int m_sampleRate; + int m_channels; + + void print(Transform transform) const; +}; + +#endif