diff src/Instruments.h @ 161:6003a9af43af

Introduce InstrumentPack class
author Chris Cannam
date Tue, 20 May 2014 15:31:05 +0100
parents
children 59e3cca75b8d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Instruments.h	Tue May 20 15:31:05 2014 +0100
@@ -0,0 +1,64 @@
+/* -*- 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:
+    static const int templateNoteCount;
+    static const int templateHeight;
+    static const int templateMaxShift;
+    static const int templateSize;
+
+    int lowestNote;
+    int highestNote;
+    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) :
+	lowestNote(lowest),
+	highestNote(highest),
+	name(n),
+	templates(tt) { }
+};
+
+#endif