# HG changeset patch # User Chris Cannam # Date 1385996807 0 # Node ID 4db051a704b2835f5d873e8cda3caff92facf743 # Parent 92e8231466a832cc52a9a7565e5e93f19607b2fc Make use of multi-transform support diff -r 92e8231466a8 -r 4db051a704b2 .hgsubstate --- a/.hgsubstate Mon Dec 02 12:30:08 2013 +0000 +++ b/.hgsubstate Mon Dec 02 15:06:47 2013 +0000 @@ -1,4 +1,4 @@ 236814e07bd07473958c1ff89103124536a0c3c8 dataquay -19282182e60dab3e8fe3a666525579ddf80ea653 svapp +1e61f0c26593467bd21f4eda3dc168c048ce4897 svapp dba8a02b0413335ee34cf302aef7754daebd0b8d svcore 212644efa523f61316450bc6ee92f3f5158f68f3 svgui diff -r 92e8231466a8 -r 4db051a704b2 src/Analyser.cpp --- a/src/Analyser.cpp Mon Dec 02 12:30:08 2013 +0000 +++ b/src/Analyser.cpp Mon Dec 02 15:06:47 2013 +0000 @@ -29,12 +29,28 @@ #include "layer/ColourDatabase.h" #include "layer/LayerFactory.h" +#include + Analyser::Analyser() : m_document(0), m_fileModel(0), m_pane(0), m_flexiNoteLayer(0) { + QSettings settings; + settings.beginGroup("LayerDefaults"); + settings.setValue + ("timevalues", + QString("") + .arg(int(TimeValueLayer::LogScale)) + .arg(int(TimeValueLayer::PlotDiscreteCurves)) + .arg(27.5f).arg(880.f)); // temporary values: better get the real extents of the data from the model + settings.setValue + ("flexinotes", + QString("") + .arg(int(FlexiNoteLayer::AutoAlignScale))); + settings.endGroup(); } Analyser::~Analyser() @@ -49,14 +65,9 @@ m_fileModel = model; m_pane = pane; - TransformId f0 = "vamp:pyin:pyin:smoothedpitchtrack"; - TransformId notes = "vamp:pyin:pyin:notes"; - - // TransformId f0 = "vamp:yintony:yintony:notepitchtrack"; - // TransformId notes = "vamp:yintony:yintony:notes"; - - // TransformId f0 = "vamp:cepstral-pitchtracker:cepstral-pitchtracker:f0"; - // TransformId notes = "vamp:cepstral-pitchtracker:cepstral-pitchtracker:notes"; + QString base = "vamp:pyin:pyin:"; + QString f0out = "smoothedpitchtrack"; + QString noteout = "notes"; // We don't want a waveform in the main pane. We must have a // main-model layer of some sort, but the layers created by @@ -67,96 +78,52 @@ m_document->addLayerToView (m_pane, m_document->createMainModelLayer(LayerFactory::TimeRuler)); - Layer *layer = 0; - - layer = addLayerFor(f0); - - if (layer) { - TimeValueLayer *tvl = qobject_cast(layer); - if (tvl) { - tvl->setPlotStyle(TimeValueLayer::PlotDiscreteCurves); - // tvl->setPlotStyle(TimeValueLayer::PlotPoints); - tvl->setBaseColour(ColourDatabase::getInstance()-> - getColourIndex(QString("Black"))); - tvl->setVerticalScale(TimeValueLayer::LogScale); - tvl->setDisplayExtents(27.5f,880.f); // temporary values: better get the real extents of the data form the model - } + Transforms transforms; + + TransformFactory *tf = TransformFactory::getInstance(); + if (!tf->haveTransform(base + f0out) || !tf->haveTransform(base + noteout)) { + std::cerr << "ERROR: Analyser::newFileLoaded: Transform unknown" << std::endl; + return; } - layer = addLayerForNotes(notes); + Transform t = tf->getDefaultTransformFor + (base + f0out, m_fileModel->getSampleRate()); + t.setStepSize(256); + t.setBlockSize(2048); - if (layer) { - FlexiNoteLayer *nl = qobject_cast(layer); - if (nl) { - m_flexiNoteLayer = nl; - nl->setBaseColour(ColourDatabase::getInstance()-> - getColourIndex(QString("Bright Blue"))); - nl->setVerticalScale(FlexiNoteLayer::AutoAlignScale); - // nl->setDisplayExtents(80.f,600.f); // temporary values: better get the real extents of the data form the model - } + transforms.push_back(t); + + t.setOutput(noteout); + + transforms.push_back(t); + + std::vector layers = + m_document->createDerivedLayers(transforms, m_fileModel); + + if (!layers.empty()) { + + ColourDatabase *cdb = ColourDatabase::getInstance(); + + for (int i = 0; i < (int)layers.size(); ++i) { + + SingleColourLayer *scl = dynamic_cast + (layers[i]); + + if (scl) { + if (i == 0) { + scl->setBaseColour(cdb->getColourIndex(tr("Black"))); + } else { + scl->setBaseColour(cdb->getColourIndex(tr("Bright Blue"))); + } + } + + m_document->addLayerToView(m_pane, layers[i]); + } + + m_flexiNoteLayer = dynamic_cast + (layers[layers.size()-1]); + paneStack->setCurrentLayer(m_pane, m_flexiNoteLayer); } - - paneStack->setCurrentLayer(m_pane, layer); -} - -Layer * -Analyser::addLayerFor(TransformId id) -{ - TransformFactory *tf = TransformFactory::getInstance(); - - if (!tf->haveTransform(id)) { - std::cerr << "ERROR: Analyser::addLayerFor(" << id << "): Transform unknown" << std::endl; - return 0; - } - - Transform transform = tf->getDefaultTransformFor - (id, m_fileModel->getSampleRate()); - - transform.setStepSize(256); - transform.setBlockSize(2048); - - ModelTransformer::Input input(m_fileModel, -1); - - Layer *layer; - layer = m_document->createDerivedLayer(transform, m_fileModel); - - if (layer) { - m_document->addLayerToView(m_pane, layer); - } else { - std::cerr << "ERROR: Analyser::addLayerFor: Cound not create layer. " << std::endl; - } - - return layer; -} - -Layer * -Analyser::addLayerForNotes(TransformId id) -{ - TransformFactory *tf = TransformFactory::getInstance(); - - if (!tf->haveTransform(id)) { - std::cerr << "ERROR: Analyser::addLayerFor(" << id << "): Transform unknown" << std::endl; - return 0; - } - - Transform transform = tf->getDefaultTransformFor - (id, m_fileModel->getSampleRate()); - - transform.setStepSize(256); - transform.setBlockSize(2048); - - ModelTransformer::Input input(m_fileModel, -1); - - Layer *layer; - layer = m_document->createDerivedLayer(transform, m_fileModel); - - if (layer) { - m_document->addLayerToView(m_pane, layer); - } else { - std::cerr << "ERROR: Analyser::addLayerForNotes: Cound not create layer type(" << preferredLayer << ")" << std::endl; - } - - return layer; } void diff -r 92e8231466a8 -r 4db051a704b2 src/Analyser.h --- a/src/Analyser.h Mon Dec 02 12:30:08 2013 +0000 +++ b/src/Analyser.h Mon Dec 02 15:06:47 2013 +0000 @@ -47,11 +47,6 @@ WaveFileModel *m_fileModel; Pane *m_pane; FlexiNoteLayer *m_flexiNoteLayer; - - Layer *addLayerFor(TransformId); - Layer *addLayerForNotes(TransformId); - LayerFactory::LayerType preferredLayer; - }; #endif