X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/1059e1cc0c2ecfa237406949aa26155b6a5b9154..66f23d4fabf89ad09adbd4dfc15ac6b5b2b7da83:/interpreter/preprocessor/faust-0.9.47mr3/architecture/audio/netjack-dsp.h diff --git a/interpreter/preprocessor/faust-0.9.47mr3/architecture/audio/netjack-dsp.h b/interpreter/preprocessor/faust-0.9.47mr3/architecture/audio/netjack-dsp.h new file mode 100644 index 0000000..83f5a81 --- /dev/null +++ b/interpreter/preprocessor/faust-0.9.47mr3/architecture/audio/netjack-dsp.h @@ -0,0 +1,130 @@ +/************************************************************************ + + IMPORTANT NOTE : this file contains two clearly delimited sections : + the ARCHITECTURE section (in two parts) and the USER section. Each section + is governed by its own copyright and license. Please check individually + each section for license and copyright information. +*************************************************************************/ + +/*******************BEGIN ARCHITECTURE SECTION (part 1/2)****************/ + +/************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This Architecture section 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 . + + EXCEPTION : As a special exception, you may create a larger work + that contains this FAUST architecture section and distribute + that work under terms of your choice, so long as this FAUST + architecture section is not modified. + + + ************************************************************************ + ************************************************************************/ + +#ifndef __netjack_dsp__ +#define __netjack_dsp__ + +#include "audio.h" +#include "dsp.h" +#include +#include + +class netjackaudio : public audio { + + dsp* fDsp; + jack_net_slave_t* fNet; + int fCelt; + std::string fMasterIP; + int fMasterPort; + + static void net_shutdown(void *) + { + printf("Network failure, restart...\n"); + } + + static int net_process(jack_nframes_t buffer_size, + int, + float** audio_input_buffer, + int, + void**, + int, + float** audio_output_buffer, + int, + void**, + void* arg) + { + AVOIDDENORMALS; + netjackaudio* obj = (netjackaudio*)arg; + obj->fDsp->compute(buffer_size, audio_input_buffer, audio_output_buffer); + return 0; + } + + public: + + netjackaudio(int celt, const std::string master_ip, int master_port) + :fCelt(celt), fMasterIP(master_ip), fMasterPort(master_port) + {} + + bool init(const char* name, dsp* DSP) + { + fDsp = DSP; + jack_slave_t request = { + DSP->getNumInputs(), + DSP->getNumOutputs(), + 0, 0, + DEFAULT_MTU, + -1, + (fCelt > 0) ? JackCeltEncoder: JackFloatEncoder, + (fCelt > 0) ? fCelt : 0, + 2 + }; + + jack_master_t result; + if ((fNet = jack_net_slave_open(fMasterIP.c_str(), fMasterPort, name, &request, &result)) == 0) { + printf("jack remote server not running ?\n"); + return false; + } + + jack_set_net_slave_process_callback(fNet, net_process, this); + jack_set_net_slave_shutdown_callback(fNet, net_shutdown, 0); + + fDsp->init(result.sample_rate); + return true; + } + + bool start() + { + if (jack_net_slave_activate(fNet)) { + printf("cannot activate net"); + return false; + } + return true; + } + + void stop() + { + jack_net_slave_deactivate(fNet); + jack_net_slave_close(fNet); + } + +}; + + +#endif + + +/********************END ARCHITECTURE SECTION (part 2/2)****************/ +