summaryrefslogtreecommitdiff
path: root/muse2/muse/mplugins/rhythm.h
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/muse/mplugins/rhythm.h')
-rw-r--r--muse2/muse/mplugins/rhythm.h196
1 files changed, 196 insertions, 0 deletions
diff --git a/muse2/muse/mplugins/rhythm.h b/muse2/muse/mplugins/rhythm.h
new file mode 100644
index 00000000..013fba08
--- /dev/null
+++ b/muse2/muse/mplugins/rhythm.h
@@ -0,0 +1,196 @@
+//=========================================================
+// MusE
+// Linux Music Editor
+// $Id: rhythm.h,v 1.1.1.1 2003/10/27 18:52:44 wschweer Exp $
+//
+// (C) Copyright 2001 Werner Schweer (ws@seh.de)
+//
+// This code is an adaption of the random rhythm generator taken
+// from "The JAZZ++ Midi Sequencer"
+// Copyright (C) 1994-2000 Andreas Voss and Per Sigmond, all
+// rights reserved.
+// Distributed under the GNU General Public License
+//=========================================================
+
+#ifndef __RHYTHM_H__
+#define __RHYTHM_H__
+
+#include "rhythmbase.h"
+//Added by qt3to4:
+#include <QCloseEvent>
+
+class tTrack;
+class tEventWin;
+class tSong;
+class tBarInfo;
+
+#define MAX_GROUPS 5
+#define MAX_KEYS 20
+
+class Xml;
+
+#if 0
+//---------------------------------------------------------
+// tRhyGroup
+//---------------------------------------------------------
+
+struct tRhyGroup {
+ int contrib;
+ int listen;
+
+ tRhyGroup() {
+ listen = 0;
+ contrib = 0;
+ }
+// void write(int, Xml&);
+// void read(Xml&);
+ };
+
+//---------------------------------------------------------
+// tRhyGroups
+//---------------------------------------------------------
+
+struct tRhyGroups {
+ tRhyGroup g[MAX_GROUPS];
+ tRhyGroup& operator [] (int i) { return g[i]; }
+
+// void write(int, Xml&);
+// void read(Xml&);
+ };
+
+//---------------------------------------------------------
+// tRhythm
+//---------------------------------------------------------
+
+class tRhythm
+ {
+ friend class tRhythmWin;
+
+ char* label;
+
+// tRndArray rhythm;
+// tRndArray length;
+// tRndArray veloc;
+
+ int steps_per_count;
+ int count_per_bar;
+ int n_bars;
+ int keys[MAX_KEYS];
+ int n_keys;
+ int mode;
+ int parm;
+
+ int randomize;
+ tRhyGroups groups;
+// tRndArray history;
+
+ // set by GenInit()
+ long start_clock;
+ long next_clock;
+
+// void GenGroup(tRndArray& out, int grp, tBarInfo &bi, tRhythm *rhy[], int n_rhy);
+ int Clock2i(long clock, tBarInfo &bi) const;
+ int ClocksPerStep(tBarInfo &bi) const;
+
+ public:
+ tRhythm(int key);
+ tRhythm(const tRhythm &o);
+ tRhythm & operator= (const tRhythm &o);
+ virtual ~tRhythm();
+
+ char const * GetLabel() { return label; }
+ void SetLabel(char const *);
+
+ void Generate(tTrack *track, long fr_clock, long to_clock, long ticks_per_bar);
+ void Generate(tTrack *track, tBarInfo &bi, tRhythm *rhy[], int n_rhy);
+ void GenInit(long start_clock);
+ void GenerateEvent(tTrack *track, long clock, short vel, short len);
+
+ void write(int, Xml&);
+ void read(Xml&);
+ };
+#endif
+
+//---------------------------------------------------------
+// RhythmGen
+//---------------------------------------------------------
+
+class RhythmGen : public RhythmBase
+ {
+ Q_OBJECT
+#if 0
+ wxPanel *inst_panel;
+ wxText *label;
+ wxSlider *steps_per_count;
+ wxSlider *count_per_bar;
+ wxSlider *n_bars;
+ wxListBox *instrument_list;
+ wxCheckBox *rand_checkbox;
+
+ wxPanel *group_panel;
+ wxListBox *group_list;
+ wxSlider *group_contrib;
+ wxSlider *group_listen;
+ int act_group;
+
+ tArrayEdit *length_edit;
+ tArrayEdit *veloc_edit;
+ tRhyArrayEdit *rhythm_edit;
+
+ enum { MAX_INSTRUMENTS = 20 };
+ tRhythm *instruments[MAX_INSTRUMENTS];
+ int n_instruments;
+ int act_instrument; // -1 if none
+
+ // this one is edited and copied from/to instruments[i]
+ tRhythm edit;
+
+ // ignore Updates while creating the window (motif)
+ Bool in_create;
+
+ // callbacks
+ static void ItemCallback(wxItem& item, wxCommandEvent& event);
+ static void SelectInstr(wxListBox& list, wxCommandEvent& event);
+ static void SelectGroup(wxListBox& list, wxCommandEvent& event);
+ static void Add(wxButton &but, wxCommandEvent& event);
+ static void Del(wxButton &but, wxCommandEvent& event);
+ static void Generate(wxButton &but, wxCommandEvent& event);
+ static void Help();
+
+ void Instrument2Win(int i = -1); // instrument[act_instrument] -> win
+ void Win2Instrument(int i = -1); // win -> instrument[act_instrument]
+ void AddInstrumentDlg();
+ void AddInstrument(tRhythm *r);
+ void DelInstrument();
+
+ tEventWin *event_win;
+ tSong *song;
+
+ void RndEnable();
+
+ char *default_filename;
+ int has_changed;
+ wxToolBar *tool_bar;
+ float tb_width, tb_height;
+
+ void UpInstrument();
+ void DownInstrument();
+ void InitInstrumentList();
+#endif
+ virtual void closeEvent(QCloseEvent*);
+
+ signals:
+ void hideWindow();
+
+ public:
+// virtual void OnMenuCommand(int id);
+// virtual void OnSize(int w, int h);
+ RhythmGen(QWidget* parent = 0, const char* name = 0, Qt::WFlags fo = Qt::WType_TopLevel);
+ virtual ~RhythmGen();
+// void OnPaint();
+// void GenRhythm();
+// bool OnClose();
+ };
+
+#endif
+