/* $Id$ */ #ifndef JACK_H #define JACK_H #include #define NUM_CHANNELS 16 class Jack { private: bool m_connected; jack_client_t *m_client; jack_port_t *m_input; jack_port_t *m_output[NUM_CHANNELS]; int m_output_map[NUM_CHANNELS]; int m_active[NUM_CHANNELS]; static void ShutdownCallbackHandler(void *arg) { ((Jack *)arg)->ShutdownCallback(); } static int ProcessCallbackHandler(jack_nframes_t nframes, void *arg) { return ((Jack *)arg)->ProcessCallback(nframes); } static char *SessionNotifyCallbackHandler(jack_session_event_t code, const char *path, const char *prefix, void *arg) { return ((Jack *)arg)->SessionNotifyCallback(code, path, prefix); } void ShutdownCallback(); int ProcessCallback(jack_nframes_t nframes); char *SessionNotifyCallback(jack_session_event_t code, const char *path, const char *prefix); public: Jack(); ~Jack(); const char *m_client_name; const char *m_args0; bool m_ui; bool Connect(); void Disconnect(); bool Run(); void IncChannel(int channel); void DecChannel(int channel); void Save(const char *filename) const; void Load(const char *filename); bool Connected() const { return m_connected; } int GetChannel(int channel) const { return m_output_map[channel]; } bool IsActive(int channel) { if (m_active[channel] == 0) return false; m_active[channel]--; return true; } }; #endif /* JACK_H */