108 lines
1.8 KiB
C++
108 lines
1.8 KiB
C++
/* $Id$ */
|
|
|
|
#ifndef JACK_H
|
|
#define JACK_H
|
|
|
|
#include <jack/jack.h>
|
|
#include "loop.h"
|
|
#include "ringbuffer.h"
|
|
#include "notecache.h"
|
|
|
|
#define NUM_LOOPS 10
|
|
|
|
class Jack {
|
|
private:
|
|
bool m_connected;
|
|
jack_client_t *m_client;
|
|
jack_port_t *m_input;
|
|
jack_port_t *m_output;
|
|
jack_port_t *m_control;
|
|
|
|
jack_nframes_t m_sample_rate;
|
|
|
|
Loop m_loops[NUM_LOOPS];
|
|
RingBuffer *m_loop_buffer;
|
|
|
|
bool m_recording;
|
|
bool m_delay_record;
|
|
int m_recording_loop;
|
|
jack_nframes_t m_recording_time;
|
|
|
|
NoteCache m_notecache;
|
|
|
|
static void ShutdownCallbackHandler(void *arg)
|
|
{
|
|
((Jack *)arg)->ShutdownCallback();
|
|
}
|
|
static int ProcessCallbackHandler(jack_nframes_t nframes, void *arg)
|
|
{
|
|
return ((Jack *)arg)->ProcessCallback(nframes);
|
|
}
|
|
|
|
void ShutdownCallback();
|
|
int ProcessCallback(jack_nframes_t nframes);
|
|
|
|
public:
|
|
Jack();
|
|
~Jack();
|
|
|
|
const char *m_client_name;
|
|
|
|
bool Connect();
|
|
void Disconnect();
|
|
bool Run();
|
|
|
|
void ToggleRecording(int loop, int bpm, bool delay);
|
|
void StartLoop(int loop, bool repeat, bool sync);
|
|
void StopLoop(int loop);
|
|
void EraseLoop(int loop);
|
|
|
|
bool Connected() const
|
|
{
|
|
return m_connected;
|
|
}
|
|
|
|
bool Recording() const
|
|
{
|
|
return m_recording;
|
|
}
|
|
|
|
float LoopLength(int loop) const
|
|
{
|
|
return (float)m_loops[loop].Length() / m_sample_rate;
|
|
}
|
|
|
|
float LoopPosition(int loop) const
|
|
{
|
|
return (float)m_loops[loop].Position() / m_sample_rate;
|
|
}
|
|
|
|
LoopState GetLoopState(int loop) const
|
|
{
|
|
return m_loops[loop].State();
|
|
}
|
|
|
|
bool LoopLooping(int loop) const
|
|
{
|
|
return m_loops[loop].Looping();
|
|
}
|
|
|
|
void SetTempo(int loop, float tempo)
|
|
{
|
|
m_loops[loop].SetTempo(tempo);
|
|
}
|
|
|
|
float GetTempo(int loop) const
|
|
{
|
|
return m_loops[loop].Tempo();
|
|
}
|
|
|
|
void StopAll();
|
|
void EraseAll();
|
|
|
|
void Save() const;
|
|
void Load();
|
|
};
|
|
|
|
#endif /* JACK_H */
|