24 #include <QTextStream> 37 m_extension(extension),
49 SVDEBUG <<
"FileFeatureWriter::FileFeatureWriter: ERROR: Invalid support specification " << support << endl;
63 SVDEBUG <<
"FileFeatureWriter::~FileFeatureWriter: NOTE: Closing feature file \"" 64 <<
m_files.begin()->second->fileName() <<
"\"" << endl;
78 p.
description =
"Base output directory path. (The default is the same directory as the input file.)";
84 p.
name =
"many-files";
85 p.
description =
"Create a separate output file for every combination of input file and transform. The output file names will be based on the input file names. (The default is to create one output file per input audio file, and write all transform results for that input into it.)";
94 p.
description =
"Write all transform results for all input files into the single named output file. (The default is to create one output file per input audio file, and write all transform results for that input into it.)";
96 p.
description =
"Write all transform results for all input files into the single named output file. (The default is to create a separate output file for each combination of input audio file and transform.)";
102 p.
description =
"Write all transform results directly to standard output.";
108 p.
description =
"If an output file already exists, overwrite it.";
113 p.
description =
"If an output file already exists, append data to it.";
123 for (map<string, string>::iterator i = params.begin();
124 i != params.end(); ++i) {
125 if (i->first ==
"basedir") {
127 }
else if (i->first ==
"many-files") {
131 SVDEBUG <<
"FileFeatureWriter::setParameters: WARNING: Both one-file and many-files parameters provided, ignoring many-files" << endl;
136 }
else if (i->first ==
"one-file") {
151 }
else if (i->first ==
"stdout") {
154 SVDEBUG <<
"FileFeatureWriter::setParameters: WARNING: Both stdout and one-file provided, ignoring stdout" << endl;
159 }
else if (i->first ==
"append") {
161 }
else if (i->first ==
"force") {
173 cerr << endl <<
"FileFeatureWriter: ERROR: Specified output file \"" <<
m_singleFileName <<
"\" exists and neither --" <<
getWriterTag() <<
"-force nor --" <<
getWriterTag() <<
"-append flag is specified -- not overwriting" << endl;
174 SVDEBUG <<
"NOTE: To find out how to fix this problem, read the help for the --" <<
getWriterTag() <<
"-force" << endl <<
"and --" <<
getWriterTag() <<
"-append options" << endl;
182 QUrl url(trackId, QUrl::StrictMode);
183 QString scheme = url.scheme().toLower();
184 bool local = (scheme ==
"" || scheme ==
"file" || scheme.length() == 1);
186 QString dirname, basename;
187 QString infilename = url.toLocalFile();
188 if (infilename ==
"") {
189 infilename = url.path();
191 basename = QFileInfo(infilename).completeBaseName();
192 if (scheme.length() == 1) {
193 infilename = scheme +
":" + infilename;
200 else if (local) dirname = QFileInfo(infilename).absolutePath();
201 else dirname = QDir::currentPath();
208 filename = QString(
"%1_%2.%3").arg(basename).arg(transformId).arg(
m_extension);
210 filename = QString(
"%1.%2").arg(basename).arg(
m_extension);
213 filename.replace(
':',
'_');
215 filename = QDir(dirname).filePath(filename);
218 cerr << endl <<
"FileFeatureWriter: ERROR: Output file \"" << filename <<
"\" exists (for input file or URL \"" << trackId <<
"\" and transform \"" << transformId <<
"\") and neither --" <<
getWriterTag() <<
"-force nor --" <<
getWriterTag() <<
"-append is specified -- not overwriting" << endl;
219 SVDEBUG <<
"NOTE: To find out how to fix this problem, read the help for the --" <<
getWriterTag() <<
"-force" << endl <<
"and --" <<
getWriterTag() <<
"-append options" << endl;
239 if (filename ==
"") {
248 pair<QString, TransformId> key;
251 key = pair<QString, TransformId>(
"",
"");
253 key = pair<QString, TransformId>(trackId, transformId);
255 key = pair<QString, TransformId>(trackId,
"");
262 if (filename ==
"") {
266 SVDEBUG <<
"FileFeatureWriter: NOTE: Using output filename \"" 267 << filename <<
"\"" << endl;
270 SVDEBUG <<
"FileFeatureWriter: NOTE: Calling reviewFileForAppending" << endl;
274 QFile *file =
new QFile(filename);
275 QIODevice::OpenMode mode = (QIODevice::WriteOnly);
276 if (
m_append) mode |= QIODevice::Append;
278 if (!file->open(mode)) {
279 cerr <<
"FileFeatureWriter: ERROR: Failed to open output file \"" << filename
280 <<
"\" for writing" << endl;
303 m_streams[file] =
new QTextStream(stdout);
343 SVDEBUG <<
"FileFeatureWriter::finish: NOTE: Closing feature file \"" 344 <<
m_files.begin()->second->fileName() <<
"\"" << endl;
345 delete m_files.begin()->second;
virtual ParameterList getSupportedParameters() const
QFile * getOutputFile(QString, TransformId)
QTextStream * m_prevstream
vector< Parameter > ParameterList
virtual void testOutputFile(QString trackId, TransformId transformId)
Throw FailedToOpenOutputStream if we can already tell that we will be unable to write to the output f...
virtual void setParameters(map< string, string > ¶ms)
virtual QString getWriterTag() const =0
virtual ~FileFeatureWriter()
QString getOutputFilename(QString, TransformId)
FileFeatureWriter(int support, QString extension)
QTextStream * getOutputStream(QString, TransformId)
virtual void reviewFileForAppending(QString)