chiark / gitweb /
Merge branch 'master' of git.distorted.org.uk:~mdw/publish/public-git/disorder
[disorder] / lib / resample.h
1 /*
2  * This file is part of DisOrder.
3  * Copyright (C) 2009 Richard Kettlewell
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 3 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, see <http://www.gnu.org/licenses/>.
17  */
18
19 /** @file lib/resample.h
20  * @brief Audio resampling
21  */
22
23 #ifndef RESAMPLE_H
24 #define RESAMPLE_H
25
26 #if HAVE_SAMPLERATE_H
27 #include <samplerate.h>
28 #endif
29
30 #include "byte-order.h"
31
32 /** @brief An audio resampler */
33 struct resampler {
34   /** @brief Bits/sample in input */
35   int input_bits;
36
37   /** @brief Number of input channels */
38   int input_channels;
39
40   /** @brief Frames/second in input */
41   int input_rate;
42
43   /** @brief Whether input samples are signed or unsigned */
44   int input_signed;
45
46   /** @brief Input endianness (@c ENDIAN_BIG or @c ENDIAN_LITTLE) */
47   int input_endian;
48
49   /** @brief Bits/sample in output */
50   int output_bits;
51
52   /** @brief Number of output channels */
53   int output_channels;
54
55   /** @brief Frames/second in output */
56   int output_rate;
57
58   /** @brief Whether output samples are signed or unsigned */
59   int output_signed;
60
61   /** @brief Output endianness (@c ENDIAN_BIG or @c ENDIAN_LITTLE) */
62   int output_endian;
63
64   /** @brief  */
65   int input_bytes_per_sample;
66
67   /** @brief  */
68   int input_bytes_per_frame;
69 #if HAVE_SAMPLERATE_H
70   /** @brief Libsamplerate handle */
71   SRC_STATE *state;
72 #endif
73 };
74
75 void resample_init(struct resampler *rs, 
76                    int input_bits, int input_channels, 
77                    int input_rate, int input_signed,
78                    int input_endian,
79                    int output_bits, int output_channels, 
80                    int output_rate, int output_signed,
81                    int output_endian);
82 size_t resample_convert(const struct resampler *rs,
83                         const uint8_t *bytes,
84                         size_t nbytes,
85                         int eof,
86                         void (*converted)(uint8_t *bytes,
87                                           size_t nbytes,
88                                           void *cd),
89                         void *cd);
90 void resample_close(struct resampler *rs);
91
92 #endif /* RESAMPLE_H */
93
94 /*
95 Local Variables:
96 c-basic-offset:2
97 comment-column:40
98 fill-column:79
99 indent-tabs-mode:nil
100 End:
101 */