Loopp/src/jack.hxx

182 lines
4.5 KiB
C++
Raw Normal View History

2013-12-08 22:44:43 +01:00
/*
* Author: Harry van Haaren 2013
* harryhaaren@gmail.com
*
* 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 <http://www.gnu.org/licenses/>.
*/
2013-04-20 12:37:36 +02:00
#ifndef LUPPP_JACK_H
#define LUPPP_JACK_H
// Library
#include <vector>
2013-04-20 12:37:36 +02:00
#include <cstring>
#include <jack/jack.h>
#include <jack/midiport.h>
#include <jack/transport.h>
2013-04-20 12:37:36 +02:00
#include "event.hxx"
class MidiIO;
class Reverb;
class DBMeter;
class State;
class Logic;
class Looper;
class Metronome;
class GridLogic;
class TimeManager;
class ControllerUpdater;
class TrackOutput;
// INPUT_TO
//#include "gridlogic.hxx"
using namespace std;
2013-04-20 12:37:36 +02:00
2013-08-12 20:01:47 +02:00
/** Jack
This code contains the JACK client.
It allows reading / writing of audio / midi.
**/
2013-04-20 12:37:36 +02:00
class Jack
{
public:
Jack(std::string name);
~Jack();
2013-04-20 12:37:36 +02:00
static void setup(std::string name);
2013-04-20 12:37:36 +02:00
void activate();
/// quits the JACK client, destroying ports etc. Call only on exit of Luppp.
void quit();
2013-04-20 12:37:36 +02:00
int getBuffersize();
int getSamplerate();
2013-11-02 04:32:33 +01:00
// Luppp process callback: bar() events can occur between these
void processFrames(int nframes);
/// get functions for components owned by Jack
Looper* getLooper(int t);
TrackOutput* getTrackOutput(int t);
State* getState(){return state;}
Logic* getLogic(){return logic;}
Metronome* getMetronome(){return metronome;}
GridLogic* getGridLogic(){return gridLogic;}
2013-09-17 14:11:11 +02:00
TimeManager* getTimeManager(){return timeManager;}
ControllerUpdater* getControllerUpdater(){return controllerUpdater;}
/// register a MIDI observer
void registerMidiIO( MidiIO* mo );
void unregisterMidiIO( MidiIO* mo );
2013-09-20 14:11:47 +02:00
/// set the master i/o volume / sends
void inputVolume( float vol );
void masterVolume( float vol );
2013-10-07 16:21:24 +02:00
void returnVolume( float vol );
void inputTo(INPUT_TO to, float v);
void inputToActive(INPUT_TO to, bool a);
2013-07-31 12:34:28 +02:00
2013-10-01 18:42:16 +02:00
jack_client_t* getJackClientPointer()
{
return client;
};
void resetMidiBindingState();
// MIDI binding creation
bool bindingEventRecordEnable;
int bindingEventType;
int bindingTrack;
int bindingScene;
int bindingSend;
int bindingActive;
2013-04-20 12:37:36 +02:00
private:
2013-08-13 17:35:27 +02:00
jack_client_t* client;
Buffers buffers;
2013-09-17 14:11:11 +02:00
TimeManager* timeManager;
Metronome* metronome;
State* state;
Logic* logic;
GridLogic* gridLogic;
ControllerUpdater* controllerUpdater;
2013-04-20 12:37:36 +02:00
vector<Looper*> loopers;
vector<TrackOutput*> trackOutputs;
vector<MidiIO*> midiIO;
// FX
2013-09-10 22:44:47 +02:00
DBMeter* inputMeter;
DBMeter* masterMeter;
2013-09-20 14:11:47 +02:00
float inputVol;
2013-09-20 14:11:47 +02:00
float masterVol;
2013-10-07 16:21:24 +02:00
float returnVol;
float inputToMixVol;
float inputToSendVol;
float inputToXSideVol;
bool inputToKeyEnable;
bool inputToMixEnable;
bool inputToSendEnable;
2013-04-20 12:37:36 +02:00
// JACK member variables
2013-07-31 18:19:15 +02:00
bool clientActive;
2013-04-20 12:37:36 +02:00
jack_port_t* masterInput;
2013-07-31 12:34:28 +02:00
jack_port_t* masterOutputL;
jack_port_t* masterOutputR;
jack_port_t* masterReturnL;
jack_port_t* masterReturnR;
jack_port_t* sidechainKeyOutput;
jack_port_t* sidechainSignalOutput;
jack_port_t* sendOutput;
2013-04-20 12:37:36 +02:00
jack_port_t* masterMidiInput;
2013-11-02 04:32:33 +01:00
// JACK callback
int process (jack_nframes_t);
2013-04-20 12:37:36 +02:00
int timebase(jack_transport_state_t,
jack_nframes_t,
jack_position_t*,
int );
// static JACK callbacks
static int static_process (jack_nframes_t, void *);
static int static_timebase (jack_transport_state_t,
jack_nframes_t,
jack_position_t*,
int,
void* );
// UI update variables
int uiUpdateCounter;
int uiUpdateConstant;
2013-04-20 12:37:36 +02:00
};
#endif // LUPPP_JACK_H