Chris@500: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@500: Chris@500: /* Chris@500: Sonic Visualiser Chris@500: An audio file viewer and annotation editor. Chris@500: Centre for Digital Music, Queen Mary, University of London. Chris@500: This file copyright 2008 QMUL. Chris@500: Chris@500: This program is free software; you can redistribute it and/or Chris@500: modify it under the terms of the GNU General Public License as Chris@500: published by the Free Software Foundation; either version 2 of the Chris@500: License, or (at your option) any later version. See the file Chris@500: COPYING included with this distribution for more information. Chris@500: */ Chris@500: Chris@500: #include "RDFExporter.h" Chris@500: #include "RDFFeatureWriter.h" Chris@500: Chris@500: #include Chris@500: Chris@500: #include "data/model/Model.h" Chris@500: #include "data/model/RegionModel.h" Chris@500: #include "data/model/NoteModel.h" Chris@500: #include "data/model/SparseOneDimensionalModel.h" Chris@500: #include "data/model/SparseTimeValueModel.h" Chris@500: #include "data/model/TextModel.h" Chris@500: #include "data/model/EditableDenseThreeDimensionalModel.h" Chris@500: Chris@500: bool Chris@500: RDFExporter::canExportModel(Model *m) Chris@500: { Chris@500: if (dynamic_cast(m)) return true; Chris@500: if (dynamic_cast(m)) return true; Chris@500: if (dynamic_cast(m)) return true; Chris@500: if (dynamic_cast(m)) return true; Chris@500: if (dynamic_cast(m)) return true; Chris@753: // no, looks like we never implemented this one Chris@753: // if (dynamic_cast(m)) return true; Chris@500: return false; Chris@500: } Chris@500: Chris@500: RDFExporter::RDFExporter(QString path, Model *m) : Chris@500: m_path(path), Chris@500: m_model(m), Chris@500: m_fw(new RDFFeatureWriter()) Chris@500: { Chris@500: map params; Chris@500: params["one-file"] = path.toStdString(); Chris@500: params["force"] = "true"; Chris@500: m_fw->setParameters(params); Chris@500: } Chris@500: Chris@500: RDFExporter::~RDFExporter() Chris@500: { Chris@500: delete m_fw; Chris@500: } Chris@500: Chris@500: bool Chris@500: RDFExporter::isOK() const Chris@500: { Chris@500: return true; Chris@500: } Chris@500: Chris@500: QString Chris@500: RDFExporter::getError() const Chris@500: { Chris@500: return ""; Chris@500: } Chris@500: Chris@500: void Chris@500: RDFExporter::write() Chris@500: { Chris@500: QString trackId; // nil Chris@500: Transform transform; // nil Chris@500: Vamp::Plugin::OutputDescriptor output; // nil Chris@500: std::string summaryType; // nil Chris@500: Chris@500: Vamp::Plugin::FeatureList features; Chris@500: features.push_back(Vamp::Plugin::Feature()); Chris@500: Vamp::Plugin::Feature &f = features[0]; Chris@1040: sv_samplerate_t sr = m_model->getSampleRate(); Chris@500: Chris@500: { Chris@500: RegionModel *m = dynamic_cast(m_model); Chris@500: if (m) { Chris@500: f.hasTimestamp = true; Chris@500: f.hasDuration = true; Chris@1649: EventVector ee(m->getAllEvents()); Chris@1649: for (auto e: ee) { Chris@1649: f.timestamp = RealTime::frame2RealTime(e.getFrame(), sr).toVampRealTime(); Chris@1649: f.duration = RealTime::frame2RealTime(e.getDuration(), sr).toVampRealTime(); Chris@500: f.values.clear(); Chris@1649: f.values.push_back(e.getValue()); Chris@1649: f.label = e.getLabel().toStdString(); Chris@500: m_fw->write(trackId, transform, output, features, summaryType); Chris@500: } Chris@500: return; Chris@500: } Chris@500: } Chris@500: { Chris@500: NoteModel *m = dynamic_cast(m_model); Chris@500: if (m) { Chris@500: f.hasTimestamp = true; Chris@500: f.hasDuration = true; Chris@1644: EventVector ee(m->getAllEvents()); Chris@1643: for (auto e: ee) { Chris@1643: f.timestamp = RealTime::frame2RealTime(e.getFrame(), sr).toVampRealTime(); Chris@1643: f.duration = RealTime::frame2RealTime(e.getDuration(), sr).toVampRealTime(); Chris@500: f.values.clear(); Chris@1643: f.values.push_back(e.getValue()); Chris@1643: f.values.push_back(e.getLevel()); Chris@1643: f.label = e.getLabel().toStdString(); Chris@500: m_fw->write(trackId, transform, output, features, summaryType); Chris@500: } Chris@500: return; Chris@500: } Chris@500: } Chris@500: { Chris@500: SparseOneDimensionalModel *m = dynamic_cast(m_model); Chris@500: if (m) { Chris@500: f.hasTimestamp = true; Chris@500: f.hasDuration = false; Chris@1658: EventVector ee(m->getAllEvents()); Chris@1658: for (auto e: ee) { Chris@1658: f.timestamp = RealTime::frame2RealTime(e.getFrame(), sr).toVampRealTime(); Chris@500: f.values.clear(); Chris@1658: f.label = e.getLabel().toStdString(); Chris@500: m_fw->write(trackId, transform, output, features, summaryType); Chris@500: } Chris@500: return; Chris@500: } Chris@500: } Chris@500: { Chris@500: SparseTimeValueModel *m = dynamic_cast(m_model); Chris@500: if (m) { Chris@500: f.hasTimestamp = true; Chris@500: f.hasDuration = false; Chris@1651: EventVector ee(m->getAllEvents()); Chris@1651: for (auto e: ee) { Chris@1651: f.timestamp = RealTime::frame2RealTime(e.getFrame(), sr).toVampRealTime(); Chris@500: f.values.clear(); Chris@1651: f.values.push_back(e.getValue()); Chris@1651: f.label = e.getLabel().toStdString(); Chris@500: m_fw->write(trackId, transform, output, features, summaryType); Chris@500: } Chris@500: return; Chris@500: } Chris@500: } Chris@500: { Chris@500: TextModel *m = dynamic_cast(m_model); Chris@500: if (m) { Chris@500: f.hasTimestamp = true; Chris@500: f.hasDuration = false; Chris@510: m_fw->setFixedEventTypeURI("af:Text"); Chris@1661: EventVector ee(m->getAllEvents()); Chris@1661: for (auto e: ee) { Chris@1661: f.timestamp = RealTime::frame2RealTime(e.getFrame(), sr).toVampRealTime(); Chris@500: f.values.clear(); Chris@1661: f.values.push_back(e.getValue()); Chris@1661: f.label = e.getLabel().toStdString(); Chris@500: m_fw->write(trackId, transform, output, features, summaryType); Chris@500: } Chris@500: return; Chris@500: } Chris@500: } Chris@500: } Chris@500: Chris@500: QString Chris@500: RDFExporter::getSupportedExtensions() Chris@500: { Chris@736: return "*.ttl *.n3"; Chris@500: } Chris@500: