Auto-monitor == Cue for MIDI tracks.
[ardour.git] / libs / zita-resampler / zita-resampler / vresampler.h
1 // ----------------------------------------------------------------------------
2 //
3 //  Copyright (C) 2006-2012 Fons Adriaensen <fons@linuxaudio.org>
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
20
21 #ifndef _ZITA_VRESAMPLER_H_
22 #define _ZITA_VRESAMPLER_H_
23
24 #include "zita-resampler/zresampler_visibility.h"
25 #include "zita-resampler/resampler-table.h"
26
27 namespace ArdourZita {
28
29 class LIBZRESAMPLER_API VResampler
30 {
31 public:
32         VResampler (void);
33         ~VResampler (void);
34
35         int  setup (double       ratio,
36                     unsigned int nchan,
37                     unsigned int hlen);
38
39         int  setup (double       ratio,
40                     unsigned int nchan,
41                     unsigned int hlen,
42                     double       frel);
43
44         void   clear (void);
45         int    reset (void);
46         int    nchan (void) const { return _nchan; }
47         int    inpsize (void) const;
48         double inpdist (void) const;
49         int    process (void);
50
51         void set_phase (double p);
52         void set_rrfilt (double t);
53         void set_rratio (double r);
54
55         unsigned int         inp_count;
56         unsigned int         out_count;
57         float               *inp_data;
58         float               *out_data;
59         void                *inp_list;
60         void                *out_list;
61
62 private:
63         enum { NPHASE = 256 };
64
65         Resampler_table     *_table;
66         unsigned int         _nchan;
67         unsigned int         _inmax;
68         unsigned int         _index;
69         unsigned int         _nread;
70         unsigned int         _nzero;
71         double               _ratio;
72         double               _phase;
73         double               _pstep;
74         double               _qstep;
75         double               _wstep;
76         float               *_buff;
77         float               *_c1;
78         float               *_c2;
79         void                *_dummy [8];
80 };
81
82 };
83
84 #endif