Jack2
1.9.10
|
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 #include <jack/weakmacros.h> 00031 00032 #define DEFAULT_MULTICAST_IP "225.3.19.154" 00033 #define DEFAULT_PORT 19000 00034 #define DEFAULT_MTU 1500 00035 #define MASTER_NAME_SIZE 256 00036 00037 // Possible error codes 00038 00039 #define NO_ERROR 0 00040 #define SOCKET_ERROR -1 00041 #define SYNC_PACKET_ERROR -2 00042 #define DATA_PACKET_ERROR -3 00043 00044 #define RESTART_CB_API 1 00045 00046 enum JackNetEncoder { 00047 00048 JackFloatEncoder = 0, // samples are transmitted as float 00049 JackIntEncoder = 1, // samples are transmitted as 16 bits integer 00050 JackCeltEncoder = 2, // samples are transmitted using CELT codec (http://www.celt-codec.org/) 00051 JackOpusEncoder = 3, // samples are transmitted using OPUS codec (http://www.opus-codec.org/) 00052 }; 00053 00054 typedef struct { 00055 00056 int audio_input; // from master or to slave (-1 to take master audio physical inputs) 00057 int audio_output; // to master or from slave (-1 to take master audio physical outputs) 00058 int midi_input; // from master or to slave (-1 to take master MIDI physical inputs) 00059 int midi_output; // to master or from slave (-1 to take master MIDI physical outputs) 00060 int mtu; // network Maximum Transmission Unit 00061 int time_out; // in second, -1 means infinite 00062 int encoder; // encoder type (one of JackNetEncoder) 00063 int kbps; // KB per second for CELT encoder 00064 int latency; // network latency 00065 00066 } jack_slave_t; 00067 00068 typedef struct { 00069 00070 int audio_input; // master audio physical outputs (-1 to take slave wanted audio inputs) 00071 int audio_output; // master audio physical inputs (-1 to take slave wanted audio outputs) 00072 int midi_input; // master MIDI physical outputs (-1 to take slave wanted MIDI inputs) 00073 int midi_output; // master MIDI physical inputs (-1 to take slave wanted MIDI outputs) 00074 jack_nframes_t buffer_size; // master buffer size 00075 jack_nframes_t sample_rate; // master sample rate 00076 char master_name[MASTER_NAME_SIZE]; // master machine name 00077 int time_out; // in second, -1 means infinite 00078 int partial_cycle; // if 'true', partial cycle will be used 00079 00080 } jack_master_t; 00081 00086 typedef struct _jack_net_slave jack_net_slave_t; 00087 00097 jack_net_slave_t* jack_net_slave_open(const char* ip, int port, const char* name, jack_slave_t* request, jack_master_t* result); 00098 00105 int jack_net_slave_close(jack_net_slave_t* net); 00106 00122 typedef int (* JackNetSlaveProcessCallback) (jack_nframes_t buffer_size, 00123 int audio_input, 00124 float** audio_input_buffer, 00125 int midi_input, 00126 void** midi_input_buffer, 00127 int audio_output, 00128 float** audio_output_buffer, 00129 int midi_output, 00130 void** midi_output_buffer, 00131 void* data); 00132 00141 int jack_set_net_slave_process_callback(jack_net_slave_t * net, JackNetSlaveProcessCallback net_callback, void *arg); 00142 00149 int jack_net_slave_activate(jack_net_slave_t* net); 00150 00157 int jack_net_slave_deactivate(jack_net_slave_t* net); 00158 00165 int jack_net_slave_is_active(jack_net_slave_t* net); 00166 00174 typedef int (*JackNetSlaveBufferSizeCallback)(jack_nframes_t nframes, void *arg); 00175 00184 int jack_set_net_slave_buffer_size_callback(jack_net_slave_t *net, JackNetSlaveBufferSizeCallback bufsize_callback, void *arg); 00185 00193 typedef int (*JackNetSlaveSampleRateCallback)(jack_nframes_t nframes, void *arg); 00194 00203 int jack_set_net_slave_sample_rate_callback(jack_net_slave_t *net, JackNetSlaveSampleRateCallback samplerate_callback, void *arg); 00204 00209 typedef void (*JackNetSlaveShutdownCallback)(void* arg); 00210 00219 int jack_set_net_slave_shutdown_callback(jack_net_slave_t *net, JackNetSlaveShutdownCallback shutdown_callback, void *arg) JACK_OPTIONAL_WEAK_DEPRECATED_EXPORT; 00220 00231 typedef int (*JackNetSlaveRestartCallback)(void* arg); 00232 00241 int jack_set_net_slave_restart_callback(jack_net_slave_t *net, JackNetSlaveRestartCallback restart_callback, void *arg) JACK_OPTIONAL_WEAK_EXPORT; 00242 00248 typedef void (*JackNetSlaveErrorCallback) (int error_code, void* arg); 00249 00258 int jack_set_net_slave_error_callback(jack_net_slave_t *net, JackNetSlaveErrorCallback error_callback, void *arg) JACK_OPTIONAL_WEAK_EXPORT; 00259 00263 typedef struct _jack_net_master jack_net_master_t; 00264 00274 jack_net_master_t* jack_net_master_open(const char* ip, int port, const char* name, jack_master_t* request, jack_slave_t* result); 00275 00282 int jack_net_master_close(jack_net_master_t* net); 00283 00294 int jack_net_master_recv(jack_net_master_t* net, int audio_input, float** audio_input_buffer, int midi_input, void** midi_input_buffer); 00295 00307 int jack_net_master_recv_slice(jack_net_master_t* net, int audio_input, float** audio_input_buffer, int midi_input, void** midi_input_buffer, int frames); 00308 00319 int jack_net_master_send(jack_net_master_t* net, int audio_output, float** audio_output_buffer, int midi_output, void** midi_output_buffer); 00320 00332 int jack_net_master_send_slice(jack_net_master_t* net, int audio_output, float** audio_output_buffer, int midi_output, void** midi_output_buffer, int frames); 00333 00334 // Experimental Adapter API 00335 00339 typedef struct _jack_adapter jack_adapter_t; 00340 00352 jack_adapter_t* jack_create_adapter(int input, int output, 00353 jack_nframes_t host_buffer_size, 00354 jack_nframes_t host_sample_rate, 00355 jack_nframes_t adapted_buffer_size, 00356 jack_nframes_t adapted_sample_rate); 00357 00364 int jack_destroy_adapter(jack_adapter_t* adapter); 00365 00372 void jack_flush_adapter(jack_adapter_t* adapter); 00373 00383 int jack_adapter_push_and_pull(jack_adapter_t* adapter, float** input, float** output, unsigned int frames); 00384 00394 int jack_adapter_pull_and_push(jack_adapter_t* adapter, float** input, float** output, unsigned int frames); 00395 00396 #ifdef __cplusplus 00397 } 00398 #endif 00399 00400 #endif /* __net_h__ */