annotate rdf/RDFFeatureWriter.h @ 1008:d9e0e59a1581

When using an aggregate model to pass data to a transform, zero-pad the shorter input to the duration of the longer rather than truncating the longer. (This is better behaviour for e.g. MATCH, and in any case the code was previously truncating incorrectly and ending up with garbage data at the end.)
author Chris Cannam
date Fri, 14 Nov 2014 13:51:33 +0000
parents e25dc8d57565
children c8e291700c0e
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@998 47 virtual string getDescription() const;
Chris@998 48
Chris@498 49 virtual ParameterList getSupportedParameters() const;
Chris@498 50 virtual void setParameters(map<string, string> &params);
Chris@498 51
Chris@504 52 virtual void setTrackMetadata(QString trackid, TrackMetadata metadata);
Chris@504 53
Chris@498 54 virtual void write(QString trackid,
Chris@498 55 const Transform &transform,
Chris@498 56 const Vamp::Plugin::OutputDescriptor &output,
Chris@498 57 const Vamp::Plugin::FeatureList &features,
Chris@498 58 std::string summaryType = "");
Chris@498 59
Chris@510 60 virtual void setFixedEventTypeURI(QString uri); // something of a hack
Chris@510 61
Chris@498 62 virtual void finish();
Chris@498 63
Chris@605 64 virtual QString getWriterTag() const { return "rdf"; }
Chris@605 65
Chris@498 66 private:
Chris@498 67 typedef map<QString, PluginRDFDescription> RDFDescriptionMap; // by plugin id
Chris@498 68 RDFDescriptionMap m_rdfDescriptions;
Chris@498 69
Chris@504 70 typedef map<QString, TrackMetadata> TrackMetadataMap;
Chris@504 71 TrackMetadataMap m_metadata;
Chris@504 72
Chris@510 73 QString m_fixedEventTypeURI;
Chris@510 74
Chris@590 75 virtual void reviewFileForAppending(QString filename);
Chris@590 76
Chris@498 77 void writePrefixes(QTextStream *);
Chris@498 78 void writeSignalDescription(QTextStream *, QString);
Chris@498 79 void writeLocalFeatureTypes(QTextStream *,
Chris@498 80 const Transform &,
Chris@498 81 const Vamp::Plugin::OutputDescriptor &,
Chris@730 82 PluginRDFDescription &,
Chris@730 83 std::string summaryType);
Chris@498 84
Chris@498 85 void writeSparseRDF(QTextStream *stream,
Chris@498 86 const Transform &transform,
Chris@498 87 const Vamp::Plugin::OutputDescriptor &output,
Chris@498 88 const Vamp::Plugin::FeatureList &features,
Chris@498 89 PluginRDFDescription &desc,
Chris@498 90 QString timelineURI);
Chris@498 91
Chris@507 92 void writeTrackLevelRDF(QTextStream *stream,
Chris@507 93 const Transform &transform,
Chris@507 94 const Vamp::Plugin::OutputDescriptor &output,
Chris@507 95 const Vamp::Plugin::FeatureList &features,
Chris@507 96 PluginRDFDescription &desc,
Chris@507 97 QString signalURI);
Chris@507 98
Chris@498 99 void writeDenseRDF(QTextStream *stream,
Chris@498 100 const Transform &transform,
Chris@498 101 const Vamp::Plugin::OutputDescriptor &output,
Chris@498 102 const Vamp::Plugin::FeatureList &features,
Chris@498 103 PluginRDFDescription &desc,
Chris@498 104 QString signalURI,
Chris@498 105 QString timelineURI);
Chris@498 106
Chris@498 107 set<QString> m_startedTrackIds;
Chris@498 108
Chris@498 109 map<QTextStream *, set<Transform> > m_startedStreamTransforms;
Chris@498 110
Chris@585 111 map<QString, QString> m_trackTrackURIs;
Chris@498 112 map<QString, QString> m_trackTimelineURIs;
Chris@498 113 map<QString, QString> m_trackSignalURIs;
Chris@498 114
Chris@498 115 map<Transform, QString> m_transformURIs;
Chris@498 116 map<Transform, QString> m_syntheticEventTypeURIs;
Chris@498 117 map<Transform, QString> m_syntheticSignalTypeURIs;
Chris@498 118
Chris@498 119 typedef pair<QString, Transform> StringTransformPair;
Chris@498 120 typedef pair<QTextStream *, QString> StreamBuffer;
Chris@498 121 map<StringTransformPair, StreamBuffer> m_openDenseFeatures; // signal URI + transform -> stream + text
Chris@594 122 QString m_userAudioFileUri;
Chris@594 123 QString m_userTrackUri;
Chris@594 124 QString m_userMakerUri;
Chris@498 125
Chris@498 126 bool m_plain;
Chris@498 127
Chris@597 128 bool m_network;
Chris@597 129 bool m_networkRetrieved;
Chris@597 130
Chris@930 131 long m_count;
Chris@498 132 };
Chris@498 133
Chris@498 134 #endif