summaryrefslogtreecommitdiffstats
path: root/src/base/NotationQuantizer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/NotationQuantizer.h')
-rw-r--r--src/base/NotationQuantizer.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/base/NotationQuantizer.h b/src/base/NotationQuantizer.h
new file mode 100644
index 0000000..87b0d72
--- /dev/null
+++ b/src/base/NotationQuantizer.h
@@ -0,0 +1,93 @@
+// -*- c-basic-offset: 4 -*-
+
+/*
+ Rosegarden
+ A sequencer and musical notation editor.
+
+ This program is Copyright 2000-2008
+ Guillaume Laurent <[email protected]>,
+ Chris Cannam <[email protected]>,
+ Richard Bown <[email protected]>
+
+ The moral right of the authors to claim authorship of this work
+ has been asserted.
+
+ 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.
+*/
+
+#ifndef NOTATION_QUANTIZER_H_
+#define NOTATION_QUANTIZER_H_
+
+#include "Quantizer.h"
+
+namespace Rosegarden {
+
+class NotationQuantizer : public Quantizer
+{
+public:
+ NotationQuantizer();
+ NotationQuantizer(std::string source, std::string target);
+ NotationQuantizer(const NotationQuantizer &);
+ ~NotationQuantizer();
+
+ /**
+ * Set the absolute time minimum unit. Default is demisemiquaver.
+ */
+ void setUnit(timeT);
+ timeT getUnit() const;
+
+ /**
+ * Set the simplicity factor. This controls the relative "pull"
+ * towards larger units and more obvious beats in placing notes.
+ * The value 10 means no pull to larger units, lower values mean
+ * an active pull away from them. Default is 13.
+ */
+ void setSimplicityFactor(int);
+ int getSimplicityFactor() const;
+
+ /**
+ * Set the maximum size of tuplet group. 2 = two-in-the-time-of-three
+ * groupings, 3 = triplets, etc. Default is 3. Set <2 to switch off
+ * tuplets altogether.
+ */
+ void setMaxTuplet(int);
+ int getMaxTuplet() const;
+
+ /**
+ * Set whether we assume the music may be contrapuntal -- that is,
+ * may have notes that overlap rather than simply a sequence of
+ * individual notes and chords.
+ */
+ void setContrapuntal(bool);
+ bool getContrapuntal() const;
+
+ /**
+ * Set whether to add articulations (staccato, tenuto, slurs).
+ * Default is true. Doesn't affect quantization, only the marks
+ * that are added to quantized notes.
+ */
+ void setArticulate(bool);
+ bool getArticulate() const;
+
+protected:
+ virtual void quantizeRange(Segment *,
+ Segment::iterator,
+ Segment::iterator) const;
+
+protected:
+ // avoid having to rebuild absolutely everything each time we
+ // tweak the implementation
+ class Impl;
+ Impl *m_impl;
+
+private:
+ NotationQuantizer &operator=(const NotationQuantizer &); // not provided
+};
+
+}
+
+#endif