Mercurial > hg > svcore
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/transform/CSVFeatureWriter.cpp Fri Nov 28 13:47:11 2008 +0000 @@ -0,0 +1,105 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + Sonic Visualiser + An audio file viewer and annotation editor. + + Sonic Annotator + A utility for batch feature extraction from audio files. + + Mark Levy, Chris Sutton and Chris Cannam, Queen Mary, University of London. + Copyright 2007-2008 QMUL. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#include "CSVFeatureWriter.h" + +#include <iostream> + +#include <QRegExp> +#include <QTextStream> + +using namespace std; +using namespace Vamp; + +CSVFeatureWriter::CSVFeatureWriter() : + FileFeatureWriter(SupportOneFilePerTrackTransform | + SupportOneFileTotal, + "csv"), + m_separator(",") +{ +} + +CSVFeatureWriter::~CSVFeatureWriter() +{ +} + +CSVFeatureWriter::ParameterList +CSVFeatureWriter::getSupportedParameters() const +{ + ParameterList pl = FileFeatureWriter::getSupportedParameters(); + Parameter p; + + p.name = "separator"; + p.description = "Column separator for output. Default is \",\" (comma)."; + p.hasArg = true; + pl.push_back(p); + + return pl; +} + +void +CSVFeatureWriter::setParameters(map<string, string> ¶ms) +{ + FileFeatureWriter::setParameters(params); + + cerr << "CSVFeatureWriter::setParameters" << endl; + for (map<string, string>::iterator i = params.begin(); + i != params.end(); ++i) { + cerr << i->first << " -> " << i->second << endl; + if (i->first == "separator") { + m_separator = i->second.c_str(); + } + } +} + +void +CSVFeatureWriter::write(QString trackId, + const Transform &transform, + const Plugin::OutputDescriptor& output, + const Plugin::FeatureList& features, + std::string summaryType) +{ + // Select appropriate output file for our track/transform + // combination + + QTextStream *sptr = getOutputStream(trackId, transform.getIdentifier()); + if (!sptr) return; //!!! this is probably better handled with an exception + + QTextStream &stream = *sptr; + + for (unsigned int i = 0; i < features.size(); ++i) { + + QString timestamp = features[i].timestamp.toString().c_str(); + timestamp.replace(QRegExp("^ +"), ""); + + stream << timestamp; + + if (summaryType != "") { + stream << m_separator << summaryType.c_str(); + } + + for (unsigned int j = 0; j < features[i].values.size(); ++j) { + stream << m_separator << features[i].values[j]; + } + + stream << "\n"; + } +} + +