annotate transform/CSVFeatureWriter.cpp @ 498:fdf5930b7ccc

* Bring FeatureWriter and RDFFeatureWriter into the fold (from Runner) so that we can use them to export features from SV as well
author Chris Cannam
date Fri, 28 Nov 2008 13:47:11 +0000
parents
children 6acdddf6f99e
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 #include "CSVFeatureWriter.h"
Chris@498 21
Chris@498 22 #include <iostream>
Chris@498 23
Chris@498 24 #include <QRegExp>
Chris@498 25 #include <QTextStream>
Chris@498 26
Chris@498 27 using namespace std;
Chris@498 28 using namespace Vamp;
Chris@498 29
Chris@498 30 CSVFeatureWriter::CSVFeatureWriter() :
Chris@498 31 FileFeatureWriter(SupportOneFilePerTrackTransform |
Chris@498 32 SupportOneFileTotal,
Chris@498 33 "csv"),
Chris@498 34 m_separator(",")
Chris@498 35 {
Chris@498 36 }
Chris@498 37
Chris@498 38 CSVFeatureWriter::~CSVFeatureWriter()
Chris@498 39 {
Chris@498 40 }
Chris@498 41
Chris@498 42 CSVFeatureWriter::ParameterList
Chris@498 43 CSVFeatureWriter::getSupportedParameters() const
Chris@498 44 {
Chris@498 45 ParameterList pl = FileFeatureWriter::getSupportedParameters();
Chris@498 46 Parameter p;
Chris@498 47
Chris@498 48 p.name = "separator";
Chris@498 49 p.description = "Column separator for output. Default is \",\" (comma).";
Chris@498 50 p.hasArg = true;
Chris@498 51 pl.push_back(p);
Chris@498 52
Chris@498 53 return pl;
Chris@498 54 }
Chris@498 55
Chris@498 56 void
Chris@498 57 CSVFeatureWriter::setParameters(map<string, string> &params)
Chris@498 58 {
Chris@498 59 FileFeatureWriter::setParameters(params);
Chris@498 60
Chris@498 61 cerr << "CSVFeatureWriter::setParameters" << endl;
Chris@498 62 for (map<string, string>::iterator i = params.begin();
Chris@498 63 i != params.end(); ++i) {
Chris@498 64 cerr << i->first << " -> " << i->second << endl;
Chris@498 65 if (i->first == "separator") {
Chris@498 66 m_separator = i->second.c_str();
Chris@498 67 }
Chris@498 68 }
Chris@498 69 }
Chris@498 70
Chris@498 71 void
Chris@498 72 CSVFeatureWriter::write(QString trackId,
Chris@498 73 const Transform &transform,
Chris@498 74 const Plugin::OutputDescriptor& output,
Chris@498 75 const Plugin::FeatureList& features,
Chris@498 76 std::string summaryType)
Chris@498 77 {
Chris@498 78 // Select appropriate output file for our track/transform
Chris@498 79 // combination
Chris@498 80
Chris@498 81 QTextStream *sptr = getOutputStream(trackId, transform.getIdentifier());
Chris@498 82 if (!sptr) return; //!!! this is probably better handled with an exception
Chris@498 83
Chris@498 84 QTextStream &stream = *sptr;
Chris@498 85
Chris@498 86 for (unsigned int i = 0; i < features.size(); ++i) {
Chris@498 87
Chris@498 88 QString timestamp = features[i].timestamp.toString().c_str();
Chris@498 89 timestamp.replace(QRegExp("^ +"), "");
Chris@498 90
Chris@498 91 stream << timestamp;
Chris@498 92
Chris@498 93 if (summaryType != "") {
Chris@498 94 stream << m_separator << summaryType.c_str();
Chris@498 95 }
Chris@498 96
Chris@498 97 for (unsigned int j = 0; j < features[i].values.size(); ++j) {
Chris@498 98 stream << m_separator << features[i].values[j];
Chris@498 99 }
Chris@498 100
Chris@498 101 stream << "\n";
Chris@498 102 }
Chris@498 103 }
Chris@498 104
Chris@498 105