svcore  1.9
RDFFeatureWriter.h
Go to the documentation of this file.
00001 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
00002 
00003 /*
00004     Sonic Visualiser
00005     An audio file viewer and annotation editor.
00006 
00007     Sonic Annotator
00008     A utility for batch feature extraction from audio files.
00009 
00010     Mark Levy, Chris Sutton and Chris Cannam, Queen Mary, University of London.
00011     Copyright 2007-2008 QMUL.
00012 
00013     This program is free software; you can redistribute it and/or
00014     modify it under the terms of the GNU General Public License as
00015     published by the Free Software Foundation; either version 2 of the
00016     License, or (at your option) any later version.  See the file
00017     COPYING included with this distribution for more information.
00018 */
00019 
00020 #ifndef _RDF_FEATURE_WRITER_H_
00021 #define _RDF_FEATURE_WRITER_H_
00022 
00023 #include <string>
00024 #include <map>
00025 #include <set>
00026 
00027 #include <QString>
00028 
00029 #include "transform/FileFeatureWriter.h"
00030 
00031 #include "PluginRDFDescription.h"
00032 
00033 using std::string;
00034 using std::map;
00035 using std::set;
00036 using std::pair;
00037 
00038 class QTextStream;
00039 class QFile;
00040 
00041 class RDFFeatureWriter : public FileFeatureWriter
00042 {
00043 public:
00044     RDFFeatureWriter();
00045     virtual ~RDFFeatureWriter();
00046 
00047     virtual ParameterList getSupportedParameters() const;
00048     virtual void setParameters(map<string, string> &params);
00049 
00050     virtual void setTrackMetadata(QString trackid, TrackMetadata metadata);
00051 
00052     virtual void write(QString trackid,
00053                        const Transform &transform,
00054                        const Vamp::Plugin::OutputDescriptor &output,
00055                        const Vamp::Plugin::FeatureList &features,
00056                        std::string summaryType = "");
00057 
00058     virtual void setFixedEventTypeURI(QString uri); // something of a hack
00059 
00060     virtual void finish();
00061 
00062     virtual QString getWriterTag() const { return "rdf"; }
00063 
00064 private:
00065     typedef map<QString, PluginRDFDescription> RDFDescriptionMap; // by plugin id
00066     RDFDescriptionMap m_rdfDescriptions;
00067 
00068     typedef map<QString, TrackMetadata> TrackMetadataMap;
00069     TrackMetadataMap m_metadata;
00070 
00071     QString m_fixedEventTypeURI;
00072 
00073     virtual void reviewFileForAppending(QString filename);
00074 
00075     void writePrefixes(QTextStream *);
00076     void writeSignalDescription(QTextStream *, QString);
00077     void writeLocalFeatureTypes(QTextStream *,
00078                                 const Transform &,
00079                                 const Vamp::Plugin::OutputDescriptor &,
00080                                 PluginRDFDescription &,
00081                                 std::string summaryType);
00082 
00083     void writeSparseRDF(QTextStream *stream,
00084                         const Transform &transform,
00085                         const Vamp::Plugin::OutputDescriptor &output,
00086                         const Vamp::Plugin::FeatureList &features,
00087                         PluginRDFDescription &desc,
00088                         QString timelineURI);
00089 
00090     void writeTrackLevelRDF(QTextStream *stream,
00091                             const Transform &transform,
00092                             const Vamp::Plugin::OutputDescriptor &output,
00093                             const Vamp::Plugin::FeatureList &features,
00094                             PluginRDFDescription &desc,
00095                             QString signalURI);
00096 
00097     void writeDenseRDF(QTextStream *stream,
00098                        const Transform &transform,
00099                        const Vamp::Plugin::OutputDescriptor &output,
00100                        const Vamp::Plugin::FeatureList &features,
00101                        PluginRDFDescription &desc,
00102                        QString signalURI,
00103                        QString timelineURI);
00104 
00105     set<QString> m_startedTrackIds;
00106 
00107     map<QTextStream *, set<Transform> > m_startedStreamTransforms;
00108 
00109     map<QString, QString> m_trackTrackURIs;
00110     map<QString, QString> m_trackTimelineURIs;
00111     map<QString, QString> m_trackSignalURIs;
00112 
00113     map<Transform, QString> m_transformURIs;
00114     map<Transform, QString> m_syntheticEventTypeURIs;
00115     map<Transform, QString> m_syntheticSignalTypeURIs;
00116 
00117     typedef pair<QString, Transform> StringTransformPair;
00118     typedef pair<QTextStream *, QString> StreamBuffer;
00119     map<StringTransformPair, StreamBuffer> m_openDenseFeatures; // signal URI + transform -> stream + text
00120     QString m_userAudioFileUri;
00121     QString m_userTrackUri;
00122     QString m_userMakerUri;
00123 
00124     bool m_plain;
00125 
00126     bool m_network;
00127     bool m_networkRetrieved;
00128 
00129     long m_count;
00130 };
00131 
00132 #endif