| 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 _FILE_FEATURE_WRITER_H_ | 
| Chris@498 | 21 #define _FILE_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 "FeatureWriter.h" | 
| Chris@498 | 28 | 
| Chris@498 | 29 using std::string; | 
| Chris@498 | 30 using std::map; | 
| Chris@498 | 31 using std::set; | 
| Chris@498 | 32 using std::pair; | 
| Chris@498 | 33 | 
| Chris@498 | 34 class QTextStream; | 
| Chris@498 | 35 class QFile; | 
| Chris@498 | 36 | 
| Chris@498 | 37 class FileFeatureWriter : public FeatureWriter | 
| Chris@498 | 38 { | 
| Chris@498 | 39 public: | 
| Chris@498 | 40     virtual ~FileFeatureWriter(); | 
| Chris@498 | 41 | 
| Chris@498 | 42     virtual ParameterList getSupportedParameters() const; | 
| Chris@498 | 43     virtual void setParameters(map<string, string> ¶ms); | 
| Chris@498 | 44 | 
| Chris@625 | 45     virtual void testOutputFile(QString trackId, TransformId transformId); | 
| Chris@515 | 46     virtual void flush(); | 
| Chris@531 | 47     virtual void finish(); | 
| Chris@515 | 48 | 
| Chris@498 | 49 protected: | 
| Chris@498 | 50     enum FileWriteSupport { | 
| Chris@498 | 51         SupportOneFilePerTrackTransform = 1, | 
| Chris@498 | 52         SupportOneFilePerTrack = 2, | 
| Chris@498 | 53         SupportOneFileTotal = 4 | 
| Chris@498 | 54     }; | 
| Chris@498 | 55 | 
| Chris@498 | 56     FileFeatureWriter(int support, QString extension); | 
| Chris@498 | 57     QTextStream *getOutputStream(QString, TransformId); | 
| Chris@498 | 58 | 
| Chris@498 | 59     typedef pair<QString, TransformId> TrackTransformPair; | 
| Chris@498 | 60     typedef map<TrackTransformPair, QFile *> FileMap; | 
| Chris@498 | 61     typedef map<QFile *, QTextStream *> FileStreamMap; | 
| Chris@498 | 62     FileMap m_files; | 
| Chris@498 | 63     FileStreamMap m_streams; | 
| Chris@512 | 64     QTextStream *m_prevstream; | 
| Chris@498 | 65 | 
| Chris@498 | 66     QString getOutputFilename(QString, TransformId); | 
| Chris@498 | 67     QFile *getOutputFile(QString, TransformId); | 
| Chris@591 | 68 | 
| Chris@591 | 69     // subclass can implement this to be called before file is opened for append | 
| Chris@591 | 70     virtual void reviewFileForAppending(QString filename) { } | 
| Chris@498 | 71 | 
| Chris@498 | 72     int m_support; | 
| Chris@498 | 73     QString m_extension; | 
| Chris@498 | 74     QString m_baseDir; | 
| Chris@498 | 75     bool m_manyFiles; | 
| Chris@498 | 76     QString m_singleFileName; | 
| Chris@498 | 77     bool m_stdout; | 
| Chris@498 | 78     bool m_append; | 
| Chris@498 | 79     bool m_force; | 
| Chris@498 | 80 }; | 
| Chris@498 | 81 | 
| Chris@498 | 82 #endif |