1 #ifndef __JPLAYER_H
2 #define __JPLAYER_H
3 
4 
5 #include <zita-jclient.h>
6 #include <zita-resampler/resampler.h>
7 #include "afreader.h"
8 
9 
10 class Jplayer : public Jclient
11 {
12 public:
13 
14     Jplayer (const char *client_name, const char *server_name, int nchan);
15     virtual ~Jplayer (void);
16 
17     enum { MAXCHAN = 100 };
18     enum { STOPPED = 10, STOPLOC, PLAYING, PLAYLOC, ENDFILE, LOCATE };
19 
jack_name(void)20     const char *jack_name (void) const { return _jack_name; }
jack_rate(void)21     int     jack_rate (void) const { return _jack_rate; }
jack_size(void)22     int     jack_size (void) const { return _jack_size; }
get_posit(void)23     int64_t get_posit (void) const { return _afreader.posit (); }
24     void    set_state (int state);
25     void    set_posit (int64_t posit);
26     void    set_gain (float g, float t);
27     int     open_file (const char *name);
28     int     close_file (void);
file_chan(void)29     int     file_chan (void) { return _afreader.file_chan (); }
file_rate(void)30     int     file_rate (void) { return _afreader.file_rate (); }
file_size(void)31     int64_t file_size (void) { return _afreader.file_size (); }
32 
33 protected:
34 
35     int  jack_process (int nframes);
36     void update_state (void);
37     void check_reader (void);
38     void get_frames (int k, int *n, float **p);
39     void output_frames (int n, float *p);
40     void output_silence (int n);
41 
42     volatile int     _new_state;
43     volatile int64_t _new_posit;
44     volatile int     _state_seq1;
45     volatile int     _state_seq2;
46     P_sema           _state_sync;
47     volatile int     _gain_seq1;
48     volatile int     _gain_seq2;
49     volatile float   _gain0;
50     volatile float   _gain1;
51     volatile float   _tgain;
52     float            _dgain;
53     int              _ngain;
54     float           *_port_buff [MAXCHAN];
55     AFreader         _afreader;
56     Resampler        _resampler;
57     float           *_resbuffer;
58     double           _resratio;
59     float            _g0;
60     float            _g1;
61     float            _dg;
62 
63     static void jack_static_shutdown (void *arg);
64     static int  jack_static_process (jack_nframes_t nframes, void *arg);
65 };
66 
67 
68 #endif
69