34be046c34a4d2c41767739efc24dd56c8dd711c
[terminatorX.git] / src / tX_sequencer.h
1 /*
2     terminatorX - realtime audio scratching software
3     Copyright (C) 1999-2002  Alexander K├Ânig
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_sequencer.h
20  
21     Description: Header to tX_sequencer.cc
22 */ 
23
24 #ifndef _h_tx_sequencer_ 
25 #define _h_tx_sequencer_  1
26
27 #include <list>
28 #include <pthread.h>
29 #include <glib.h>
30
31 #include "tX_event.h"
32 #include "tX_seqpar.h"
33
34 #define TX_SEQMODE_PLAYONLY 1
35 #define TX_SEQMODE_PLAYREC  0
36
37 class tX_sequencer
38 {
39         private:
40         list <tX_event *> song_list;
41         list <tX_event *> record_list;
42         pthread_mutex_t record_lock;
43         
44         guint32 current_timestamp;
45         guint32 start_timestamp;
46         guint32 max_timestamp;
47         guint32 record_start_timestamp;         
48         guint32 record_stop_timestamp;          
49
50         list <tX_event *> :: iterator next_event;
51         
52         int mode;
53         int run;
54
55         public:
56         tX_sequencer();
57         ~tX_sequencer();
58         
59         void set_timestamp(guint32 timestamp);
60         int is_recording() { return (mode == TX_SEQMODE_PLAYREC); }
61         
62         guint32 get_timestamp() { return current_timestamp; }
63         float get_timestamp_as_float(){ return ((float) (((float) current_timestamp)/((float) max_timestamp))*100.0); }
64
65         void step();
66         
67         int trig_rec();
68         int trig_play();
69         void trig_stop();
70         
71         tX_event *record_event(tX_seqpar *sp, float value);
72
73         tX_event *record(tX_seqpar *sp, float value)
74         {
75                 if (mode == TX_SEQMODE_PLAYREC) return record_event(sp, value);
76                 else return NULL;
77         }
78         
79         void delete_all_events_for_sp(tX_seqpar *sp);
80         
81         void save(FILE *);
82         void load(FILE *);
83         void clear();
84         
85         guint32 set_start_timestamp(float pos);
86         void forward_to_start_timestamp(int dont_fake);
87         bool is_empty() { return song_list.empty(); }
88 };
89
90 extern tX_sequencer sequencer;
91
92 #endif