annotate src/LiveInstruments.cpp @ 299:a4216826f01c livemode

Re-normalise
author Chris Cannam
date Fri, 28 Nov 2014 10:31:59 +0000
parents ebe5e0942bb8
children ba5f3b084466
rev   line source
Chris@298 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@298 2
Chris@298 3 /*
Chris@298 4 Silvet
Chris@298 5
Chris@298 6 A Vamp plugin for note transcription.
Chris@298 7 Centre for Digital Music, Queen Mary University of London.
Chris@298 8
Chris@298 9 This program is free software; you can redistribute it and/or
Chris@298 10 modify it under the terms of the GNU General Public License as
Chris@298 11 published by the Free Software Foundation; either version 2 of the
Chris@298 12 License, or (at your option) any later version. See the file
Chris@298 13 COPYING included with this distribution for more information.
Chris@298 14 */
Chris@298 15
Chris@298 16 #include "LiveInstruments.h"
Chris@298 17
Chris@298 18 #include "data/include/templates.h"
Chris@298 19
Chris@298 20 using namespace std;
Chris@298 21
Chris@298 22 InstrumentPack
Chris@298 23 LiveAdapter::adapt(const InstrumentPack &original)
Chris@298 24 {
Chris@298 25 vector<InstrumentPack::Templates> templates;
Chris@298 26
Chris@298 27 for (vector<InstrumentPack::Templates>::const_iterator i =
Chris@298 28 original.templates.begin();
Chris@298 29 i != original.templates.end(); ++i) {
Chris@298 30
Chris@298 31 InstrumentPack::Templates t;
Chris@298 32 t.lowestNote = i->lowestNote;
Chris@298 33 t.highestNote = i->highestNote;
Chris@298 34 t.data.resize(i->data.size());
Chris@298 35
Chris@298 36 for (int j = 0; j < int(i->data.size()); ++j) {
Chris@298 37 t.data[j].resize(SILVET_TEMPLATE_HEIGHT/5);
Chris@299 38 float sum = 0.f;
Chris@298 39 for (int k = 0; k < SILVET_TEMPLATE_HEIGHT/5; ++k) {
Chris@298 40 t.data[j][k] = i->data[j][k * 5 + 2 - SILVET_TEMPLATE_MAX_SHIFT];
Chris@299 41 sum += t.data[j][k];
Chris@298 42 }
Chris@299 43 // re-normalise
Chris@299 44 for (int k = 0; k < (int)t.data[j].size(); ++k) {
Chris@299 45 t.data[j][k] *= 1.f / sum;
Chris@299 46 }
Chris@298 47 }
Chris@299 48
Chris@298 49 templates.push_back(t);
Chris@298 50 }
Chris@298 51
Chris@298 52 InstrumentPack live(original.lowestNote,
Chris@298 53 original.highestNote,
Chris@298 54 original.name,
Chris@298 55 templates);
Chris@298 56
Chris@298 57 live.templateHeight = SILVET_TEMPLATE_HEIGHT/5;
Chris@298 58 live.templateMaxShift = 0;
Chris@298 59 live.templateSize = live.templateHeight;
Chris@298 60
Chris@298 61 live.maxPolyphony = original.maxPolyphony;
Chris@298 62 live.pitchSparsity = original.pitchSparsity;
Chris@298 63 live.sourceSparsity = original.sourceSparsity;
Chris@298 64 live.levelThreshold = original.levelThreshold;
Chris@298 65
Chris@298 66 return live;
Chris@298 67 }
Chris@298 68
Chris@298 69 vector<InstrumentPack>
Chris@298 70 LiveAdapter::adaptAll(const vector<InstrumentPack> &v)
Chris@298 71 {
Chris@298 72 vector<InstrumentPack> out;
Chris@298 73 for (int i = 0; i < (int)v.size(); ++i) {
Chris@298 74 InstrumentPack p(LiveAdapter::adapt(v[i]));
Chris@298 75 out.push_back(p);
Chris@298 76 }
Chris@298 77 return out;
Chris@298 78 }