Checked in terminatorX pre-3.65 - finally ;) - Alex
[terminatorX.git] / src / tX_audiofile.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_audiofile.h
20  
21     Description: Header to audiofile.cc
22 */   
23
24 #ifndef _h_tx_audiofile
25 #define _h_tx_audiofile 1
26
27 #define SOX_BLOCKSIZE 32000
28
29 #ifdef HAVE_CONFIG_H
30 #include <config.h>
31 #endif
32
33 #ifdef USE_SOX_INPUT
34 #define SOX_STR "sox \"%s\" -t raw -c 1 -r 44100 -s -w -"
35 #endif
36
37 #ifdef USE_MPG123_INPUT
38 /*#include "endian.h"   // I don't think this is required
39 #ifdef BIG_ENDIAN_MACHINE
40 #define MPG123_STR "mpg123 -s \"%s\" | sox -t raw -r 44100 -c 2 -s -w -x - -t wav -c 1 -r 44100 -s -w -"
41 #else*/
42 #define MPG123_STR "mpg123 -qms \"%s\""
43 /*#else
44 #define MPG123_STR "mpg123 -qs \"%s\" | sox -t raw -r 44100 -c 2 -s -w - -t raw -c 1 -r 44100 -s -w -"
45 #endif
46 /*#endif*/
47 #endif
48
49
50 #define TX_AUDIO_SUCCESS 0
51 #define TX_AUDIO_ERR_ALLOC 1
52 #define TX_AUDIO_ERR_PIPE_READ 2
53 #define TX_AUDIO_ERR_SOX 3
54 #define TX_AUDIO_ERR_MPG123 4
55 #define TX_AUDIO_ERR_WAV_NOTFOUND 5
56 #define TX_AUDIO_ERR_NOT_16BIT 6
57 #define TX_AUDIO_ERR_NOT_MONO 7
58 #define TX_AUDIO_ERR_WAV_READ 8
59 #define TX_AUDIO_ERR_NOT_SUPPORTED 9
60
61 #define TX_AUDIO_UNDEFINED 0
62 #define TX_AUDIO_MMAP 1
63 #define TX_AUDIO_LOAD 2
64
65 #define TX_FILE_UNDEFINED 0
66 #define TX_FILE_WAV 1
67 #define TX_FILE_MPG123 2
68
69 #include <linux/limits.h>
70 #include "tX_types.h"
71 #include <stdio.h>
72
73 class tx_audiofile
74 {
75         private:
76         int mem_type;
77         int file_type;
78         
79         FILE *file;
80         char filename[PATH_MAX];
81         int16_t *mem;
82         size_t memsize;
83         long no_samples;        
84
85 #ifdef USE_BUILTIN_WAV
86         int load_wav();
87 #endif
88 #ifdef USE_SOX_INPUT    
89         int load_sox();
90 #define NEED_PIPED 1    
91 #endif
92 #ifdef USE_MPG123_INPUT 
93         int load_mpg123();
94 #define NEED_PIPED 1    
95 #endif  
96
97 #ifdef NEED_PIPED
98         int load_piped();
99 #endif
100         void figure_file_type();
101         
102         public:
103         tx_audiofile();
104         
105         int load(char *p_file_name);
106         int16_t *get_buffer() { return mem; };
107         long get_no_samples() { return no_samples; };
108         
109         ~tx_audiofile();
110 };
111
112 #endif