Jack2 1.9.8
|
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__ */