54febe3fd3382e004e4b6443761bcd7da27f0c22
[terminatorX.git] / terminatorX / src / tX_midiin.h
1 /*
2     terminatorX - realtime audio scratching software
3     Copyright (C) 2002 Arthur Peters
4         
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9  
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14  
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, write to the Free Software
17     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  
19     File: tX_midiin.h
20  
21     Description: Header to tX_midiin.cc
22 */    
23
24 #ifndef _tx_midiin_h
25 #define _tx_midiin_h 1
26
27 #include <config.h>
28 #ifdef USE_ALSA_MIDI_IN
29
30 #include <alsa/asoundlib.h>
31 #include <gtk/gtk.h>
32
33 class vtt_class;
34
35 class tX_midievent
36 {
37   public:
38         int channel;
39         enum
40         {
41                 NONE=0,
42                 CC=1,
43                 NOTE,
44                 PITCHBEND,
45         } type;
46         int number; // note # or controller #
47         
48         float value; // controller value or note velocity
49         bool is_noteon; // note on or off?
50
51         bool type_matches( const tX_midievent& other ) const
52         {
53                 return channel == other.channel && type == other.type && number == other.number;
54         }
55
56         void clear_non_type()
57         {
58                 value = 0;
59                 is_noteon = false;
60         }
61
62         void print( const char* prefix ) const;
63 };
64
65 class tX_midiin
66 {
67         snd_seq_t *ALSASeqHandle;
68         tX_midievent last_event;
69                 
70   public:
71         tX_midiin();
72         ~tX_midiin();
73
74         int check_event();
75
76         void configure_bindings( vtt_class* );
77
78         const tX_midievent& get_last_event()
79         {
80                 return last_event;
81         }
82
83   private:
84
85         class midi_binding_gui
86         {
87           public:
88                 midi_binding_gui( GtkTreeModel* _model, tX_midiin* _midi );
89                 ~midi_binding_gui();
90
91                 GtkWidget *window;
92                 
93                 GtkWidget *parameter_treeview;
94                 GtkWidget *midi_event_info;
95                 GtkWidget *bind_button;
96
97                 GtkTreeModel* model;
98
99                 tX_midiin* midi;
100
101                 tX_midievent last_event;
102
103                 static void bind_clicked( GtkButton *button, gpointer _this );
104                 static void close_clicked( GtkButton *button, gpointer _this );
105                 static gint timer( gpointer _this );
106
107           private:
108                 char tempstr[128];
109
110                 gint timer_tag;
111         };
112 };
113
114 #endif // USE_ALSA_MIDI_IN
115
116 #endif // ndef _tx_midiin_h