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