# HG changeset patch # User Chris Cannam # Date 1234452403 0 # Node ID 1d7ebc05157e44ce1922bd867a47bdd473147585 # Parent a40023bebd15d9e28290bd42695fdecac38088eb * Some fairly simplistic code to set up layer type properties based on RDF data about feature types (both when running transforms and when importing features from RDF files). diff -r a40023bebd15 -r 1d7ebc05157e data/model/Model.h --- a/data/model/Model.h Tue Feb 10 17:24:30 2009 +0000 +++ b/data/model/Model.h Thu Feb 12 15:26:43 2009 +0000 @@ -195,6 +195,20 @@ */ virtual int getAlignmentCompletion() const; + /** + * Set the event, feature, or signal type URI for the features + * contained in this model, according to the Audio Features RDF + * ontology. + */ + void setRDFTypeURI(QString uri) { m_typeUri = uri; } + + /** + * Retrieve the event, feature, or signal type URI for the + * features contained in this model, if previously set with + * setRDFTypeURI. + */ + QString getRDFTypeURI() const { return m_typeUri; } + virtual void toXml(QTextStream &stream, QString indent = "", QString extraAttributes = "") const; @@ -257,6 +271,7 @@ Model *m_sourceModel; AlignmentModel *m_alignment; + QString m_typeUri; bool m_aboutToDelete; }; diff -r a40023bebd15 -r 1d7ebc05157e rdf/RDFImporter.cpp --- a/rdf/RDFImporter.cpp Tue Feb 10 17:24:30 2009 +0000 +++ b/rdf/RDFImporter.cpp Thu Feb 12 15:26:43 2009 +0000 @@ -337,6 +337,8 @@ getDenseModelTitle(m, feature, type); + m->setRDFTypeURI(type); + models.push_back(m); } else { @@ -364,6 +366,8 @@ getDenseModelTitle(m, feature, type); + m->setRDFTypeURI(type); + models.push_back(m); } } @@ -796,6 +800,8 @@ } } + model->setRDFTypeURI(type); + if (m_audioModelMap.find(source) != m_audioModelMap.end()) { std::cerr << "source model for " << model << " is " << m_audioModelMap[source] << std::endl; model->setSourceModel(m_audioModelMap[source]); diff -r a40023bebd15 -r 1d7ebc05157e transform/FeatureExtractionModelTransformer.cpp --- a/transform/FeatureExtractionModelTransformer.cpp Tue Feb 10 17:24:30 2009 +0000 +++ b/transform/FeatureExtractionModelTransformer.cpp Thu Feb 12 15:26:43 2009 +0000 @@ -30,6 +30,7 @@ #include "data/model/RegionModel.h" #include "data/model/FFTModel.h" #include "data/model/WaveFileModel.h" +#include "rdf/PluginRDFDescription.h" #include "TransformFactory.h" @@ -167,9 +168,20 @@ return; } + createOutputModel(); +} + +void +FeatureExtractionModelTransformer::createOutputModel() +{ + DenseTimeValueModel *input = getConformingInput(); + // std::cerr << "FeatureExtractionModelTransformer: output sample type " // << m_descriptor->sampleType << std::endl; + PluginRDFDescription description(m_transform.getPluginIdentifier()); + QString outputId = m_transform.getOutput(); + int binCount = 1; float minValue = 0.0, maxValue = 0.0; bool haveExtents = false; @@ -228,6 +240,9 @@ m_output = new SparseOneDimensionalModel(modelRate, modelResolution, false); + QString outputEventTypeURI = description.getOutputEventTypeURI(outputId); + m_output->setRDFTypeURI(outputEventTypeURI); + } else if ((preDurationPlugin && binCount > 1 && (m_descriptor->sampleType == Vamp::Plugin::OutputDescriptor::VariableSampleRate)) || @@ -294,6 +309,9 @@ m_output = model; } + QString outputEventTypeURI = description.getOutputEventTypeURI(outputId); + m_output->setRDFTypeURI(outputEventTypeURI); + } else if (binCount == 1 || (m_descriptor->sampleType == Vamp::Plugin::OutputDescriptor::VariableSampleRate)) { @@ -315,10 +333,15 @@ model = new SparseTimeValueModel (modelRate, modelResolution, false); } + + Vamp::Plugin::OutputList outputs = m_plugin->getOutputDescriptors(); model->setScaleUnits(outputs[m_outputFeatureNo].unit.c_str()); m_output = model; + QString outputEventTypeURI = description.getOutputEventTypeURI(outputId); + m_output->setRDFTypeURI(outputEventTypeURI); + } else { // Anything that is not a 1D, note, or interval model and that @@ -340,6 +363,9 @@ } m_output = model; + + QString outputSignalTypeURI = description.getOutputSignalTypeURI(outputId); + m_output->setRDFTypeURI(outputSignalTypeURI); } if (m_output) m_output->setSourceModel(input); diff -r a40023bebd15 -r 1d7ebc05157e transform/FeatureExtractionModelTransformer.h --- a/transform/FeatureExtractionModelTransformer.h Tue Feb 10 17:24:30 2009 +0000 +++ b/transform/FeatureExtractionModelTransformer.h Thu Feb 12 15:26:43 2009 +0000 @@ -42,6 +42,8 @@ Vamp::Plugin::OutputDescriptor *m_descriptor; int m_outputFeatureNo; + void createOutputModel(); + void addFeature(size_t blockFrame, const Vamp::Plugin::Feature &feature);