annotate rdf/RDFFeatureWriter.h @ 631:3a5ee4b6c9ad

* Complete the overhaul of CSV file import; now you can pick the purpose for each column in the file, and SV should do the rest. The most significant practical improvement here is that we can now handle files in which time and duration do not necessarily appear in known columns.
author Chris Cannam
date Mon, 19 Jul 2010 17:08:56 +0000
parents 133418f4e74c
children 27c861cce97b
rev   line source
Chris@498 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@498 2
Chris@498 3 /*
Chris@498 4 Sonic Visualiser
Chris@498 5 An audio file viewer and annotation editor.
Chris@498 6
Chris@498 7 Sonic Annotator
Chris@498 8 A utility for batch feature extraction from audio files.
Chris@498 9
Chris@498 10 Mark Levy, Chris Sutton and Chris Cannam, Queen Mary, University of London.
Chris@498 11 Copyright 2007-2008 QMUL.
Chris@498 12
Chris@498 13 This program is free software; you can redistribute it and/or
Chris@498 14 modify it under the terms of the GNU General Public License as
Chris@498 15 published by the Free Software Foundation; either version 2 of the
Chris@498 16 License, or (at your option) any later version. See the file
Chris@498 17 COPYING included with this distribution for more information.
Chris@498 18 */
Chris@498 19
Chris@498 20 #ifndef _RDF_FEATURE_WRITER_H_
Chris@498 21 #define _RDF_FEATURE_WRITER_H_
Chris@498 22
Chris@498 23 #include <string>
Chris@498 24 #include <map>
Chris@498 25 #include <set>
Chris@498 26
Chris@498 27 #include <QString>
Chris@498 28
Chris@498 29 #include "transform/FileFeatureWriter.h"
Chris@498 30
Chris@498 31 #include "PluginRDFDescription.h"
Chris@498 32
Chris@498 33 using std::string;
Chris@498 34 using std::map;
Chris@498 35 using std::set;
Chris@498 36 using std::pair;
Chris@498 37
Chris@498 38 class QTextStream;
Chris@498 39 class QFile;
Chris@498 40
Chris@498 41 class RDFFeatureWriter : public FileFeatureWriter
Chris@498 42 {
Chris@498 43 public:
Chris@498 44 RDFFeatureWriter();
Chris@498 45 virtual ~RDFFeatureWriter();
Chris@498 46
Chris@498 47 virtual ParameterList getSupportedParameters() const;
Chris@498 48 virtual void setParameters(map<string, string> &params);
Chris@498 49
Chris@504 50 virtual void setTrackMetadata(QString trackid, TrackMetadata metadata);
Chris@504 51
Chris@498 52 virtual void write(QString trackid,
Chris@498 53 const Transform &transform,
Chris@498 54 const Vamp::Plugin::OutputDescriptor &output,
Chris@498 55 const Vamp::Plugin::FeatureList &features,
Chris@498 56 std::string summaryType = "");
Chris@498 57
Chris@510 58 virtual void setFixedEventTypeURI(QString uri); // something of a hack
Chris@510 59
Chris@498 60 virtual void finish();
Chris@498 61
Chris@605 62 virtual QString getWriterTag() const { return "rdf"; }
Chris@605 63
Chris@498 64 private:
Chris@498 65 typedef map<QString, PluginRDFDescription> RDFDescriptionMap; // by plugin id
Chris@498 66 RDFDescriptionMap m_rdfDescriptions;
Chris@498 67
Chris@504 68 typedef map<QString, TrackMetadata> TrackMetadataMap;
Chris@504 69 TrackMetadataMap m_metadata;
Chris@504 70
Chris@510 71 QString m_fixedEventTypeURI;
Chris@510 72
Chris@590 73 virtual void reviewFileForAppending(QString filename);
Chris@590 74
Chris@498 75 void writePrefixes(QTextStream *);
Chris@498 76 void writeSignalDescription(QTextStream *, QString);
Chris@498 77 void writeLocalFeatureTypes(QTextStream *,
Chris@498 78 const Transform &,
Chris@498 79 const Vamp::Plugin::OutputDescriptor &,
Chris@498 80 PluginRDFDescription &);
Chris@498 81
Chris@498 82 void writeSparseRDF(QTextStream *stream,
Chris@498 83 const Transform &transform,
Chris@498 84 const Vamp::Plugin::OutputDescriptor &output,
Chris@498 85 const Vamp::Plugin::FeatureList &features,
Chris@498 86 PluginRDFDescription &desc,
Chris@498 87 QString timelineURI);
Chris@498 88
Chris@507 89 void writeTrackLevelRDF(QTextStream *stream,
Chris@507 90 const Transform &transform,
Chris@507 91 const Vamp::Plugin::OutputDescriptor &output,
Chris@507 92 const Vamp::Plugin::FeatureList &features,
Chris@507 93 PluginRDFDescription &desc,
Chris@507 94 QString signalURI);
Chris@507 95
Chris@498 96 void writeDenseRDF(QTextStream *stream,
Chris@498 97 const Transform &transform,
Chris@498 98 const Vamp::Plugin::OutputDescriptor &output,
Chris@498 99 const Vamp::Plugin::FeatureList &features,
Chris@498 100 PluginRDFDescription &desc,
Chris@498 101 QString signalURI,
Chris@498 102 QString timelineURI);
Chris@498 103
Chris@498 104 set<QString> m_startedTrackIds;
Chris@498 105
Chris@498 106 map<QTextStream *, set<Transform> > m_startedStreamTransforms;
Chris@498 107
Chris@585 108 map<QString, QString> m_trackTrackURIs;
Chris@498 109 map<QString, QString> m_trackTimelineURIs;
Chris@498 110 map<QString, QString> m_trackSignalURIs;
Chris@498 111
Chris@498 112 map<Transform, QString> m_transformURIs;
Chris@498 113 map<Transform, QString> m_syntheticEventTypeURIs;
Chris@498 114 map<Transform, QString> m_syntheticSignalTypeURIs;
Chris@498 115
Chris@498 116 typedef pair<QString, Transform> StringTransformPair;
Chris@498 117 typedef pair<QTextStream *, QString> StreamBuffer;
Chris@498 118 map<StringTransformPair, StreamBuffer> m_openDenseFeatures; // signal URI + transform -> stream + text
Chris@594 119 QString m_userAudioFileUri;
Chris@594 120 QString m_userTrackUri;
Chris@594 121 QString m_userMakerUri;
Chris@498 122
Chris@498 123 bool m_plain;
Chris@498 124
Chris@597 125 bool m_network;
Chris@597 126 bool m_networkRetrieved;
Chris@597 127
Chris@602 128 unsigned long m_count;
Chris@498 129 };
Chris@498 130
Chris@498 131 #endif