// ---------------------------------------------------------------------------- // // Copyright (C) 2012-2018 Fons Adriaensen // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // ---------------------------------------------------------------------------- #ifndef __JACKCLIENT_H #define __JACKCLIENT_H #include #include "jack/jack.h" #include "lfqueue.h" class Jackclient { public: Jackclient (jack_client_t*, const char *jserv, int mode, int nchan, bool sync, void *arg); virtual ~Jackclient (void); enum { PLAY, CAPT, MAXCHAN = 64 }; enum { INIT, TERM, WAIT, SYNC0, SYNC1, SYNC2, PROC1, PROC2 }; void start (Lfq_audio *audioq, Lfq_int32 *commq, Lfq_adata *alsaq, Lfq_jdata *infoq, double ratio, int delay, int ltcor, int rqual); const char *jname (void) const { return _jname; } int fsamp (void) const { return _fsamp; } int bsize (void) const { return _bsize; } int rprio (void) const { return _rprio; } void *getarg(void) const { return _arg; } private: bool init (const char *jserv); void fini (void); void initwait (int nwait); void initsync (void); void setloop (double bw); void silence (int nframes); void playback (int nframes); void capture (int nframes); void sendinfo (int state, double error, double ratio); virtual void thr_main (void) {} void jack_freewheel (int state); void jack_latency (jack_latency_callback_mode_t jlcm); int jack_process (int nframes); jack_client_t *_client; jack_port_t *_ports [MAXCHAN]; void *_arg; const char *_jname; int _mode; int _nchan; int _state; int _count; int _fsamp; int _bsize; int _rprio; bool _freew; float *_buff; Lfq_audio *_audioq; Lfq_int32 *_commq; Lfq_adata *_alsaq; Lfq_jdata *_infoq; double _ratio; int _ppsec; int _bstat; jack_nframes_t _ft; double _t_a0; double _t_a1; int _k_a0; int _k_a1; double _delay; int _ltcor; double _w0; double _w1; double _w2; double _z1; double _z2; double _z3; double _rcorr; VResampler *_resamp; static void jack_static_shutdown (void *arg); static int jack_static_buffsize (jack_nframes_t nframes, void *arg); static void jack_static_freewheel (int state, void *arg); static void jack_static_latency (jack_latency_callback_mode_t jlcm, void *arg); static int jack_static_process (jack_nframes_t nframes, void *arg); }; #endif