view src/Instruments.h @ 325:4cf4313d7e30 livemode

Always use q=0.8 and accept the hit on speed -- the templates are made for that configuration and it does work better. Also some adjustments to thresholding and peak picking for live mode in particular.
author Chris Cannam
date Mon, 18 May 2015 13:58:27 +0100
parents ebe5e0942bb8
children df9a8e16bae6
line wrap: on
line source
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */

/*
  Silvet

  A Vamp plugin for note transcription.
  Centre for Digital Music, Queen Mary University of London.
    
  This program is free software; you can redistribute it and/or
  modify it under the terms of the GNU General Public License as
  published by the Free Software Foundation; either version 2 of the
  License, or (at your option) any later version.  See the file
  COPYING included with this distribution for more information.
*/

#include <vector>
#include <string>

#ifndef SILVET_INSTRUMENTS_H
#define SILVET_INSTRUMENTS_H

/**
 * Define an instrument pack, i.e. a group of templates that are made
 * available as a single preset at the user interface level. A pack
 * might contain only a single instrument template (e.g. bassoon), or
 * it may be a compound of several templates (e.g. different piano
 * recordings forming a single piano pack), or it may be a group of
 * distinct instrument templates (e.g. a pack containing all supported
 * instruments, or potentially groupings such as string quartet or
 * rock band).
 */
class InstrumentPack
{
public:
    int templateNoteCount;
    int templateHeight;
    int templateMaxShift;
    int templateSize;

    int lowestNote;
    int highestNote;

    int maxPolyphony; // realistic practical limit, not a theoretical one
    float pitchSparsity;
    float sourceSparsity;
    float levelThreshold;

    std::string name;

    struct Templates {
	int lowestNote;
	int highestNote;
	// templateNoteCount * templateSize
	std::vector<std::vector<float> > data;
    };
    
    std::vector<Templates> templates;

    static std::vector<InstrumentPack> listInstrumentPacks();

private:
    InstrumentPack(int lowest, int highest, std::string n,
		   std::vector<Templates> tt);
    
    friend class LiveAdapter;
};

#endif