Adding support for writing zlib compressed set files and fixing audio
[terminatorX.git] / src / tX_sequencer.h
1 /*
2     terminatorX - realtime audio scratching software
3     Copyright (C) 1999-2003  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 #include <libxml/xmlmemory.h>
38 #include <libxml/parser.h>
39
40 class tX_sequencer
41 {
42         private:
43         list <tX_event *> song_list;
44         list <tX_event *> record_list;
45         pthread_mutex_t record_lock;
46         
47         guint32 current_timestamp;
48         guint32 start_timestamp;
49         guint32 max_timestamp;
50         guint32 record_start_timestamp;         
51         guint32 record_stop_timestamp;          
52
53         list <tX_event *> :: iterator next_event;
54         
55         int mode;
56         int run;
57
58         public:
59         tX_sequencer();
60         ~tX_sequencer();
61         
62         void set_timestamp(guint32 timestamp);
63         int is_recording() { return (mode == TX_SEQMODE_PLAYREC); }
64         
65         guint32 get_timestamp() { return current_timestamp; }
66         float get_timestamp_as_float(){ return ((float) (((float) current_timestamp)/((float) max_timestamp))*100.0); }
67
68         void step();
69         
70         int trig_rec();
71         int trig_play();
72         void trig_stop();
73         
74         tX_event *record_event(tX_seqpar *sp, float value);
75
76         tX_event *record(tX_seqpar *sp, float value)
77         {
78                 if (mode == TX_SEQMODE_PLAYREC) return record_event(sp, value);
79                 else return NULL;
80         }
81         
82         void delete_all_events_for_sp(tX_seqpar *sp);
83         void delete_all_events();
84         
85         void save(FILE *, gzFile, char *indent);
86 #ifdef ENABLE_TX_LEGACY 
87         void load(FILE *);
88 #endif  
89         void load(xmlDocPtr, xmlNodePtr);
90         void clear();
91         
92         guint32 set_start_timestamp(float pos);
93         void forward_to_start_timestamp(int dont_fake);
94         bool is_empty() { return song_list.empty(); }
95 };
96
97 extern tX_sequencer sequencer;
98
99 #endif