Jack2 1.9.8
net.h
00001 /*
00002   Copyright (C) 2009-2010 Grame
00003 
00004   This program is free software; you can redistribute it and/or modify
00005   it under the terms of the GNU Lesser General Public License as published by
00006   the Free Software Foundation; either version 2.1 of the License, or
00007   (at your option) any later version.
00008 
00009   This program is distributed in the hope that it will be useful,
00010   but WITHOUT ANY WARRANTY; without even the implied warranty of
00011   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012   GNU Lesser General Public License for more details.
00013 
00014   You should have received a copy of the GNU Lesser General Public License
00015   along with this program; if not, write to the Free Software
00016   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00017 
00018 */
00019 
00020 #ifndef __net_h__
00021 #define __net_h__
00022 
00023 #ifdef __cplusplus
00024 extern "C"
00025 {
00026 #endif
00027 
00028 #include <jack/systemdeps.h>
00029 #include <jack/types.h>
00030 
00031 #define DEFAULT_MULTICAST_IP    "225.3.19.154"
00032 #define DEFAULT_PORT            19000
00033 #define DEFAULT_MTU             1500
00034 #define MASTER_NAME_SIZE        256
00035 
00036 #define SOCKET_ERROR -1
00037 
00038 enum JackNetEncoder {
00039 
00040     JackFloatEncoder = 0,   // samples are transmitted as float
00041     JackIntEncoder = 1,     // samples are transmitted as 16 bits integer
00042     JackCeltEncoder = 2,    // samples are transmitted using CELT codec (http://www.celt-codec.org/)
00043 };
00044 
00045 typedef struct {
00046 
00047     int audio_input;    // from master or to slave (-1 for get master audio physical outputs)
00048     int audio_output;   // to master or from slave (-1 for get master audio physical inputs)
00049     int midi_input;     // from master or to slave (-1 for get master MIDI physical outputs)
00050     int midi_output;    // to master or from slave (-1 for get master MIDI physical inputs)
00051     int mtu;            // network Maximum Transmission Unit
00052     int time_out;       // in second, -1 means in infinite
00053     int encoder;        // encoder type (one of JackNetEncoder)
00054     int kbps;           // KB per second for CELT encoder
00055     int latency;        // network latency
00056 
00057 } jack_slave_t;
00058 
00059 typedef struct {
00060 
00061     int audio_input;                    // master audio physical outputs
00062     int audio_output;                   // master audio physical inputs
00063     int midi_input;                     // master MIDI physical outputs
00064     int midi_output;                    // master MIDI physical inputs
00065     jack_nframes_t buffer_size;         // mater buffer size
00066     jack_nframes_t sample_rate;         // mater sample rate
00067     char master_name[MASTER_NAME_SIZE]; // master machine name
00068 
00069 } jack_master_t;
00070 
00075 typedef struct _jack_net_slave jack_net_slave_t;
00076 
00086 jack_net_slave_t* jack_net_slave_open(const char* ip, int port, const char* name, jack_slave_t* request, jack_master_t* result);
00087 
00094 int jack_net_slave_close(jack_net_slave_t* net);
00095 
00111 typedef int (* JackNetSlaveProcessCallback) (jack_nframes_t buffer_size,
00112                                             int audio_input,
00113                                             float** audio_input_buffer,
00114                                             int midi_input,
00115                                             void** midi_input_buffer,
00116                                             int audio_output,
00117                                             float** audio_output_buffer,
00118                                             int midi_output,
00119                                             void** midi_output_buffer,
00120                                             void* data);
00121 
00130 int jack_set_net_slave_process_callback(jack_net_slave_t * net, JackNetSlaveProcessCallback net_callback, void *arg);
00131 
00138 int jack_net_slave_activate(jack_net_slave_t* net);
00139 
00146 int jack_net_slave_deactivate(jack_net_slave_t* net);
00147 
00155 typedef int (*JackNetSlaveBufferSizeCallback)(jack_nframes_t nframes, void *arg);
00156 
00164 typedef int (*JackNetSlaveSampleRateCallback)(jack_nframes_t nframes, void *arg);
00165 
00174 int jack_set_net_slave_buffer_size_callback(jack_net_slave_t *net, JackNetSlaveBufferSizeCallback bufsize_callback, void *arg);
00175 
00184 int jack_set_net_slave_sample_rate_callback(jack_net_slave_t *net, JackNetSlaveSampleRateCallback samplerate_callback, void *arg);
00185 
00190 typedef void (*JackNetSlaveShutdownCallback)(void* data);
00191 
00200 int jack_set_net_slave_shutdown_callback(jack_net_slave_t *net, JackNetSlaveShutdownCallback shutdown_callback, void *arg);
00201 
00205 typedef struct _jack_net_master jack_net_master_t;
00206 
00216 jack_net_master_t* jack_net_master_open(const char* ip, int port, const char* name, jack_master_t* request, jack_slave_t* result);
00217 
00224 int jack_net_master_close(jack_net_master_t* net);
00225 
00236 int jack_net_master_recv(jack_net_master_t* net, int audio_input, float** audio_input_buffer, int midi_input, void** midi_input_buffer);
00237 
00248 int jack_net_master_send(jack_net_master_t* net, int audio_output, float** audio_output_buffer, int midi_output, void** midi_output_buffer);
00249 
00250 // Experimental Adapter API
00251 
00255 typedef struct _jack_adapter jack_adapter_t;
00256 
00268 jack_adapter_t* jack_create_adapter(int input, int output,
00269                                     jack_nframes_t host_buffer_size,
00270                                     jack_nframes_t host_sample_rate,
00271                                     jack_nframes_t adapted_buffer_size,
00272                                     jack_nframes_t adapted_sample_rate);
00273 
00280 int jack_destroy_adapter(jack_adapter_t* adapter);
00281 
00288 void jack_flush_adapter(jack_adapter_t* adapter);
00289 
00299 int jack_adapter_push_and_pull(jack_adapter_t* adapter, float** input, float** output, unsigned int frames);
00300 
00310 int jack_adapter_pull_and_push(jack_adapter_t* adapter, float** input, float** output, unsigned int frames);
00311 
00312 #ifdef __cplusplus
00313 }
00314 #endif
00315 
00316 #endif /* __net_h__ */

Generated for Jack2 by doxygen 1.7.4