bf8c3e13cb52fb117b7b6b6f2feedb7cd993e2ba
[terminatorX.git] / src / tX_engine.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_engine.h
20  
21     Description: Header to tX_engine.cc
22 */    
23
24 #ifndef _TX_ENGINE_H_
25 #define _TX_ENGINE_H_
26
27 #include "tX_tape.h"
28 #include "tX_mouse.h"
29 #include "tX_audiodevice.h"
30 #include "tX_midiin.h"
31
32 #define ENG_ERR 4
33
34 #define ENG_RUNNING 0
35 #define ENG_INIT 1
36 #define ENG_STOPPED 2
37 #define ENG_FINISHED 3
38 #define ENG_ERR_XOPEN 4
39 #define ENG_ERR_XINPUT 5
40 #define ENG_ERR_DGA 6
41 #define ENG_ERR_SOUND 7
42 #define ENG_ERR_THREAD 8
43 #define ENG_ERR_GRABMOUSE 9
44 #define ENG_ERR_GRABKEY 10
45 #define ENG_ERR_BUSY 11
46
47 #include <pthread.h>
48 enum tX_engine_error {
49         NO_ERROR,
50         ERROR_TAPE,
51         ERROR_AUDIO,
52         ERROR_BUSY      
53 };
54
55 enum tX_engine_status {
56         RUNNING,
57         STOPPED
58 };
59
60 class tX_engine {
61         private:
62         static tX_engine *engine;
63         
64         pthread_t thread;
65         pthread_mutex_t start;
66         bool thread_terminate;
67         tx_mouse *mouse;
68         tX_audiodevice *device;
69         tx_tapedeck *tape;
70         bool recording;
71         bool recording_request;
72         bool stop_flag;
73         bool loop_is_active;
74         bool grab_request;
75         bool grab_active;
76         
77         public:
78
79 #ifdef USE_ALSA_MIDI_IN
80         tX_midiin *midi;
81         tX_midiin *get_midi() { return midi; }
82 #endif  
83
84         static tX_engine *get_instance();
85         tX_engine();
86         ~tX_engine();
87         
88         tX_engine_error run();
89         void stop();
90         void loop();
91         
92         void set_recording_request(bool recording);
93         bool get_recording_request() { return recording_request; }
94         bool is_recording() { return recording; }
95         int16_t* render_cycle();
96         
97         void set_grab_request();
98         bool is_stopped() { return stop_flag; }
99 };
100 #endif