annotate src/Analyser.cpp @ 13:b7b5eddfd2c7

essentially only changed the colour of the overview
author matthiasm
date Tue, 26 Mar 2013 20:15:38 +0000
parents 47589fdb0b53
children 7ab5ed737788
rev   line source
Chris@6 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@6 2
Chris@6 3 /*
Chris@6 4 Tony
Chris@6 5 An intonation analysis and annotation tool
Chris@6 6 Centre for Digital Music, Queen Mary, University of London.
Chris@6 7 This file copyright 2006-2012 Chris Cannam and QMUL.
Chris@6 8
Chris@6 9 This program is free software; you can redistribute it and/or
Chris@6 10 modify it under the terms of the GNU General Public License as
Chris@6 11 published by the Free Software Foundation; either version 2 of the
Chris@6 12 License, or (at your option) any later version. See the file
Chris@6 13 COPYING included with this distribution for more information.
Chris@6 14 */
Chris@6 15
Chris@6 16 #include "Analyser.h"
Chris@6 17
Chris@6 18 #include "transform/TransformFactory.h"
Chris@6 19 #include "transform/ModelTransformer.h"
Chris@6 20 #include "framework/Document.h"
Chris@6 21 #include "data/model/WaveFileModel.h"
Chris@6 22 #include "view/Pane.h"
Chris@6 23 #include "view/PaneStack.h"
Chris@6 24 #include "layer/Layer.h"
Chris@6 25 #include "layer/TimeValueLayer.h"
matthiasm@13 26 #include "layer/NoteLayer.h"
matthiasm@11 27 #include "layer/FlexiNoteLayer.h"
Chris@6 28 #include "layer/ColourDatabase.h"
Chris@6 29
Chris@6 30 Analyser::Analyser() :
Chris@6 31 m_document(0),
Chris@6 32 m_fileModel(0),
Chris@6 33 m_pane(0)
Chris@6 34 {
Chris@6 35 }
Chris@6 36
Chris@6 37 Analyser::~Analyser()
Chris@6 38 {
Chris@6 39 }
Chris@6 40
Chris@6 41 void
Chris@6 42 Analyser::newFileLoaded(Document *doc, WaveFileModel *model,
Chris@6 43 PaneStack *paneStack, Pane *pane)
Chris@6 44 {
Chris@6 45 m_document = doc;
Chris@6 46 m_fileModel = model;
Chris@6 47 m_pane = pane;
Chris@6 48
matthiasm@12 49 TransformId f0 = "vamp:yintony:yintony:f0";
Chris@6 50 TransformId notes = "vamp:cepstral-pitchtracker:cepstral-pitchtracker:notes";
Chris@6 51
Chris@6 52 // We don't want a waveform in the main pane. We must have a
Chris@6 53 // main-model layer of some sort, but the layers created by
Chris@6 54 // transforms are derived layers, so we'll create a time ruler for
Chris@6 55 // the main-model layer. It could subsequently be hidden if we
Chris@6 56 // didn't want it
Chris@6 57
Chris@6 58 m_document->addLayerToView
Chris@6 59 (m_pane, m_document->createMainModelLayer(LayerFactory::TimeRuler));
Chris@6 60
Chris@6 61 Layer *layer = 0;
Chris@6 62
Chris@6 63 layer = addLayerFor(f0);
Chris@6 64
Chris@6 65 if (layer) {
Chris@6 66 TimeValueLayer *tvl = qobject_cast<TimeValueLayer *>(layer);
Chris@6 67 if (tvl) {
Chris@6 68 tvl->setPlotStyle(TimeValueLayer::PlotDiscreteCurves);
Chris@6 69 tvl->setBaseColour(ColourDatabase::getInstance()->
Chris@6 70 getColourIndex(QString("Black")));
Chris@6 71 }
Chris@6 72 }
Chris@6 73
Chris@6 74 layer = addLayerFor(notes);
Chris@6 75
Chris@6 76 if (layer) {
matthiasm@13 77 NoteLayer *nl = qobject_cast<NoteLayer *>(layer);
Chris@6 78 if (nl) {
Chris@6 79 nl->setBaseColour(ColourDatabase::getInstance()->
Chris@6 80 getColourIndex(QString("Bright Blue")));
Chris@6 81 }
Chris@6 82 }
Chris@6 83
Chris@6 84 paneStack->setCurrentLayer(m_pane, layer);
Chris@6 85 }
Chris@6 86
Chris@6 87 Layer *
Chris@6 88 Analyser::addLayerFor(TransformId id)
Chris@6 89 {
Chris@6 90 TransformFactory *tf = TransformFactory::getInstance();
Chris@6 91
Chris@6 92 if (!tf->haveTransform(id)) {
Chris@6 93 std::cerr << "ERROR: Analyser::addLayerFor(" << id << "): Transform unknown" << std::endl;
Chris@6 94 return 0;
Chris@6 95 }
Chris@6 96
Chris@6 97 Transform transform = tf->getDefaultTransformFor
Chris@6 98 (id, m_fileModel->getSampleRate());
Chris@6 99
matthiasm@11 100 transform.setStepSize(512);
Chris@6 101 transform.setBlockSize(2048);
Chris@6 102
Chris@6 103 ModelTransformer::Input input(m_fileModel, -1);
Chris@6 104
Chris@6 105 Layer *layer;
Chris@6 106 layer = m_document->createDerivedLayer(transform, m_fileModel);
Chris@6 107 if (layer) {
Chris@6 108 m_document->addLayerToView(m_pane, layer);
Chris@6 109 }
Chris@6 110
Chris@6 111 return layer;
Chris@6 112 }
Chris@6 113