76f19294ac76f39442b0e077664d3341f75b0dd7
[terminatorX.git] / src / tX_audiodevice.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_audiodevice.h
20  
21     Description: Header to tX_mastergui.cc
22 */    
23
24 #ifndef _h_tx_audiodevice
25 #define _h_tx_audiodevice 1
26
27 #include "tX_types.h"
28 #include "tX_global.h"
29 #include "pthread.h"
30 #include <config.h>
31
32 #include <sys/time.h>
33
34 #define NON_RT_BUFF 12
35
36 #ifdef USE_ALSA
37 #include <alsa/asoundlib.h>
38 #endif
39
40 class tX_audiodevice
41 {
42         protected:
43         int samples_per_buffer;
44         void init();
45         
46         public:
47         virtual double get_latency()=0; /* call only valid *after* open() */
48         int get_buffersize() { return samples_per_buffer; } /* call only valid *after* open() */
49         
50         virtual int open()=0;
51         virtual int close()=0;
52                 
53         virtual void play(int16_t*)=0; /* play blocked */
54 };
55
56
57 #ifdef USE_OSS
58
59 class tX_audiodevice_oss : public tX_audiodevice
60 {
61         int fd;
62         int blocksize;  
63
64         public:
65         virtual int open();
66         virtual int close();
67         
68         virtual double get_latency(); /* call only valid *after* open() */
69         
70         virtual void play(int16_t*); /* play blocked */
71         
72         tX_audiodevice_oss();
73 };
74
75 #endif
76
77
78 #ifdef USE_ALSA
79
80 class tX_audiodevice_alsa : public tX_audiodevice
81 {
82         snd_pcm_t *pcm_handle;
83         
84         public:
85         virtual int open();
86         virtual int close();
87                 
88         virtual double get_latency(); /* call only valid *after* open() */
89
90         virtual void play(int16_t*); /* play blocked */
91         
92         tX_audiodevice_alsa();
93 };
94
95 #endif
96
97 #endif