zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

JackEngine.h (2269B)


      1 /*
      2   ZynAddSubFX - a software synthesizer
      3 
      4   JackEngine.h - Jack Driver
      5   Copyright (C) 2009 Alan Calvert
      6   Copyright (C) 2014 Mark McCurry
      7 
      8   This program is free software; you can redistribute it and/or
      9   modify it under the terms of the GNU General Public License
     10   as published by the Free Software Foundation; either version 2
     11   of the License, or (at your option) any later version.
     12 */
     13 
     14 #ifndef JACK_ENGINE_H
     15 #define JACK_ENGINE_H
     16 
     17 #include <string>
     18 #include <pthread.h>
     19 #include <semaphore.h>
     20 #include <jack/jack.h>
     21 #include <pthread.h>
     22 
     23 #include "MidiIn.h"
     24 #include "AudioOut.h"
     25 
     26 namespace zyn {
     27 
     28 typedef jack_default_audio_sample_t jsample_t;
     29 
     30 class JackEngine:public AudioOut, MidiIn
     31 {
     32     public:
     33         JackEngine(const SYNTH_T &synth);
     34         ~JackEngine() { }
     35 
     36         bool Start();
     37         void Stop();
     38 
     39         void setMidiEn(bool nval);
     40         bool getMidiEn() const;
     41 
     42         void setAudioEn(bool nval);
     43         bool getAudioEn() const;
     44 
     45         int getBuffersize() { return audio.jackNframes; }
     46 
     47         std::string clientName();
     48         int clientId();
     49 
     50     protected:
     51 
     52         int processCallback(jack_nframes_t nframes);
     53         static int _processCallback(jack_nframes_t nframes, void *arg);
     54         int bufferSizeCallback(jack_nframes_t nframes);
     55         static int _bufferSizeCallback(jack_nframes_t nframes, void *arg);
     56         static void _errorCallback(const char *msg);
     57         static void _infoCallback(const char *msg);
     58         static int _xrunCallback(void *arg);
     59 
     60     private:
     61         bool connectServer(std::string server);
     62         bool connectJack();
     63         void disconnectJack();
     64         bool openAudio();
     65         void stopAudio();
     66         bool processAudio(jack_nframes_t nframes);
     67         bool openMidi();
     68         void stopMidi();
     69 
     70         jack_client_t *jackClient;
     71         struct audio {
     72             unsigned int jackSamplerate;
     73             unsigned int jackNframes;
     74             jack_port_t *ports[2];
     75             jsample_t   *portBuffs[2];
     76             float peaks[1];
     77         } audio;
     78         struct osc {
     79             jack_port_t *oscport;
     80         } osc;
     81         struct midi {
     82             jack_port_t *inport;
     83             bool         jack_sync;
     84         } midi;
     85 
     86         void handleMidi(unsigned long frames);
     87 };
     88 
     89 }
     90 
     91 #endif