annotate runner/FeatureExtractionManager.h @ 77:adce5f7e2917 qt5

Don't need to check for Dataquay, and in fact we can pick up the wrong version if we do. Just assume it is available (building in e.g. sv subdir configuration)
author Chris Cannam
date Tue, 07 May 2013 15:58:20 +0100
parents 91d20795a109
children fae326c22df5
rev   line source
Chris@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@0 2
Chris@0 3 /*
Chris@0 4 Sonic Annotator
Chris@0 5 A utility for batch feature extraction from audio files.
Chris@0 6 Mark Levy, Chris Sutton and Chris Cannam, Queen Mary, University of London.
Chris@0 7 Copyright 2007-2008 QMUL.
Chris@0 8
Chris@0 9 This program is free software; you can redistribute it and/or
Chris@0 10 modify it under the terms of the GNU General Public License as
Chris@0 11 published by the Free Software Foundation; either version 2 of the
Chris@0 12 License, or (at your option) any later version. See the file
Chris@0 13 COPYING included with this distribution for more information.
Chris@0 14 */
Chris@0 15
Chris@0 16 #ifndef _FEATURE_EXTRACTION_MANAGER_H_
Chris@0 17 #define _FEATURE_EXTRACTION_MANAGER_H_
Chris@0 18
Chris@0 19 #include <vector>
Chris@0 20 #include <set>
Chris@0 21 #include <string>
Chris@0 22
Chris@45 23 #include <QMap>
Chris@45 24
Chris@0 25 #include <vamp-hostsdk/Plugin.h>
Chris@0 26 #include <vamp-hostsdk/PluginSummarisingAdapter.h>
Chris@0 27 #include <transform/Transform.h>
Chris@0 28
Chris@0 29 using std::vector;
Chris@0 30 using std::set;
Chris@0 31 using std::string;
Chris@0 32 using std::pair;
Chris@0 33 using std::map;
Chris@0 34
Chris@0 35 class FeatureWriter;
Chris@45 36 class AudioFileReader;
Chris@0 37
Chris@0 38 class FeatureExtractionManager
Chris@0 39 {
Chris@0 40 public:
Chris@0 41 FeatureExtractionManager();
Chris@0 42 virtual ~FeatureExtractionManager();
Chris@0 43
Chris@0 44 void setChannels(int channels);
Chris@0 45 void setDefaultSampleRate(int sampleRate);
Chris@0 46
Chris@0 47 bool setSummaryTypes(const set<string> &summaryTypes,
Chris@0 48 bool summariesOnly,
Chris@0 49 const Vamp::HostExt::PluginSummarisingAdapter::SegmentBoundaries &boundaries);
Chris@0 50
Chris@0 51 bool addFeatureExtractor(Transform transform,
Chris@0 52 const vector<FeatureWriter*> &writers);
Chris@0 53
Chris@0 54 bool addFeatureExtractorFromFile(QString transformXmlFile,
Chris@0 55 const vector<FeatureWriter*> &writers);
Chris@0 56
Chris@0 57 bool addDefaultFeatureExtractor(TransformId transformId,
Chris@0 58 const vector<FeatureWriter*> &writers);
Chris@0 59
Chris@47 60 // Make a note of an audio or playlist file which will be passed
Chris@47 61 // to extractFeatures later. Amongst other things, this may
Chris@47 62 // initialise the default sample rate and channel count
Chris@45 63 void addSource(QString audioSource);
Chris@47 64
Chris@47 65 // Extract features from the given audio or playlist file. If the
Chris@47 66 // file is a playlist and force is true, continue extracting even
Chris@47 67 // if a file in the playlist fails.
Chris@47 68 void extractFeatures(QString audioSource, bool force);
Chris@0 69
Chris@0 70 private:
Chris@0 71 // A plugin may have many outputs, so we can have more than one
Chris@0 72 // transform requested for a single plugin. The things we want to
Chris@0 73 // run in our process loop are plugins rather than their outputs,
Chris@0 74 // so we maintain a map from the plugins to the transforms desired
Chris@0 75 // of them and then iterate through this map
Chris@0 76
Chris@0 77 typedef map<Transform, vector<FeatureWriter *> > TransformWriterMap;
Chris@0 78 typedef map<Vamp::Plugin *, TransformWriterMap> PluginMap;
Chris@0 79 PluginMap m_plugins;
Chris@0 80
Chris@0 81 // And a map back from transforms to their plugins. Note that
Chris@0 82 // this is keyed by transform, not transform ID -- two differently
Chris@0 83 // configured transforms with the same ID must use different
Chris@0 84 // plugin instances.
Chris@0 85
Chris@0 86 typedef map<Transform, Vamp::Plugin *> TransformPluginMap;
Chris@0 87 TransformPluginMap m_transformPluginMap;
Chris@0 88
Chris@0 89 // Cache the plugin output descriptors, mapping from plugin to a
Chris@0 90 // map from output ID to output descriptor.
Chris@0 91 typedef map<string, Vamp::Plugin::OutputDescriptor> OutputMap;
Chris@0 92 typedef map<Vamp::Plugin *, OutputMap> PluginOutputMap;
Chris@0 93 PluginOutputMap m_pluginOutputs;
Chris@0 94
Chris@0 95 // Map from plugin output identifier to plugin output index
Chris@0 96 typedef map<string, int> OutputIndexMap;
Chris@0 97 OutputIndexMap m_pluginOutputIndices;
Chris@0 98
Chris@0 99 typedef set<std::string> SummaryNameSet;
Chris@0 100 SummaryNameSet m_summaries;
Chris@0 101 bool m_summariesOnly;
Chris@0 102 Vamp::HostExt::PluginSummarisingAdapter::SegmentBoundaries m_boundaries;
Chris@0 103
Chris@0 104 void writeSummaries(QString audioSource, Vamp::Plugin *);
Chris@0 105
Chris@0 106 void writeFeatures(QString audioSource,
Chris@0 107 Vamp::Plugin *,
Chris@0 108 const Vamp::Plugin::FeatureSet &,
Chris@0 109 Transform::SummaryType summaryType =
Chris@0 110 Transform::NoSummary);
Chris@31 111
Chris@31 112 void testOutputFiles(QString audioSource);
Chris@0 113 void finish();
Chris@0 114
Chris@0 115 int m_blockSize;
Chris@0 116 int m_defaultSampleRate;
Chris@0 117 int m_sampleRate;
Chris@0 118 int m_channels;
Chris@45 119
Chris@45 120 QMap<QString, AudioFileReader *> m_readyReaders;
Chris@0 121
Chris@0 122 void print(Transform transform) const;
Chris@0 123 };
Chris@0 124
Chris@0 125 #endif