// ---------------------------------------------------------------------------- // // Copyright (C) 2012 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 #include "lfqueue.h" class Jackclient { public: Jackclient (jack_client_t*, const char *jserv, int mode, int nchan); virtual ~Jackclient (void); enum { PLAY, CAPT }; 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; } private: void init (const char *jserv); void fini (void); double modtime (double d) { if (d < -200) d += _quant; if (d > 200) d -= _quant; return d; } 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 [64]; 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; double _quant; int _ppsec; jack_nframes_t _ft; double _t_a0; double _t_a1; int _k_a0; int _k_a1; int _k_j0; 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