# jack.h

Go to the documentation of this file.

    00001 /*
    00002     Copyright (C) 2001 Paul Davis
    00003     Copyright (C) 2004 Jack O'Quin
    00004
    00005     This program is free software; you can redistribute it and/or modify
    00006     it under the terms of the GNU Lesser General Public License as published by
    00007     the Free Software Foundation; either version 2.1 of the License, or
    00008     (at your option) any later version.
    00009
    00010     This program is distributed in the hope that it will be useful,
    00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
    00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    00013     GNU Lesser General Public License for more details.
    00014
    00015     You should have received a copy of the GNU Lesser General Public License
    00016     along with this program; if not, write to the Free Software
    00017     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
    00018
    00019 */
    00020
    00021 #ifndef __jack_h__
    00022 #define __jack_h__
    00023
    00024 #ifdef __cplusplus
    00025 extern "C" {
    00026 #endif
    00027
    00028 #include <pthread.h>
    00029
    00030 #include <jack/types.h>
    00031 #include <jack/transport.h>
    00032
    00038 /*************************************************************
    00039  * NOTE: JACK_WEAK_EXPORT ***MUST*** be used on every function
    00040  * added to the JACK API after the 0.116.2 release.
    00041  *************************************************************/
    00042
    00043 #ifndef JACK_WEAK_EXPORT
    00044 #ifdef __GNUC__
    00045 /* JACK_WEAK_EXPORT needs to be a macro which
    00046    expands into a compiler directive. If non-null, the directive
    00047    must tell the compiler to arrange for weak linkage of
    00048    the symbol it used with. For this to work full may
    00049    require linker arguments in the client as well.
    00050 */
    00051 #define JACK_WEAK_EXPORT __attribute__((weak))
    00052 #else
    00053 /* Add other things here for non-gcc platforms */
    00054 #endif
    00055 #endif
    00056
    00057
    00096 jack_client_t *jack_client_open (const char *client_name,
    00097                                  jack_options_t options,
    00098                                  jack_status_t *status, ...);
    00099
    00105 jack_client_t *jack_client_new (const char *client_name);
    00106
    00112 int jack_client_close (jack_client_t *client);
    00113
    00118 int jack_client_name_size (void);
    00119
    00126 char *jack_get_client_name (jack_client_t *client);
    00127
    00149 int jack_internal_client_new (const char *client_name,
    00150                               const char *load_name,
    00151                               const char *load_init);
    00152
    00158 void jack_internal_client_close (const char *client_name);
    00159
    00166 int jack_activate (jack_client_t *client);
    00167
    00175 int jack_deactivate (jack_client_t *client);
    00176
    00181 pthread_t jack_client_thread_id (jack_client_t *);
    00182
    00192 int jack_is_realtime (jack_client_t *client);
    00193
    00206 jack_nframes_t jack_thread_wait (jack_client_t*, int status);
    00207
    00215 jack_nframes_t jack_cycle_wait (jack_client_t* client);
    00216
    00223 void jack_cycle_signal (jack_client_t* client, int status);
    00224
    00236 int jack_set_process_thread(jack_client_t* client, JackThreadCallback fun, void *arg);
    00237
    00256 int jack_set_thread_init_callback (jack_client_t *client,
    00257                                    JackThreadInitCallback thread_init_callback,
    00258                                    void *arg);
    00259
    00283 void jack_on_shutdown (jack_client_t *client,
    00284                        JackShutdownCallback function, void *arg);
    00285
    00309 void jack_on_info_shutdown (jack_client_t *client,
    00310                             JackInfoShutdownCallback function, void *arg) JACK_WEAK_EXPORT;
    00311
    00325 int jack_set_process_callback (jack_client_t *client,
    00326                                JackProcessCallback process_callback,
    00327                                void *arg);
    00328
    00338 int jack_set_freewheel_callback (jack_client_t *client,
    00339                                  JackFreewheelCallback freewheel_callback,
    00340                                  void *arg);
    00341
    00354 int jack_set_buffer_size_callback (jack_client_t *client,
    00355                                    JackBufferSizeCallback bufsize_callback,
    00356                                    void *arg);
    00357
    00364 int jack_set_sample_rate_callback (jack_client_t *client,
    00365                                    JackSampleRateCallback srate_callback,
    00366                                    void *arg);
    00367
    00374 int jack_set_client_registration_callback (jack_client_t *,
    00375                                            JackClientRegistrationCallback
    00376                                            registration_callback, void *arg);
    00377
    00384 int jack_set_port_registration_callback (jack_client_t *,
    00385                                          JackPortRegistrationCallback
    00386                                          registration_callback, void *arg);
    00387
    00394 int jack_set_port_connect_callback (jack_client_t *,
    00395                                     JackPortConnectCallback
    00396                                     connect_callback, void *arg);
    00403 int jack_set_graph_order_callback (jack_client_t *,
    00404                                    JackGraphOrderCallback graph_callback,
    00405                                    void *);
    00406
    00413 int jack_set_xrun_callback (jack_client_t *,
    00414                             JackXRunCallback xrun_callback, void *arg);
    00415
    00447 int jack_set_freewheel(jack_client_t* client, int onoff);
    00448
    00464 int jack_set_buffer_size (jack_client_t *client, jack_nframes_t nframes);
    00465
    00470 jack_nframes_t jack_get_sample_rate (jack_client_t *);
    00471
    00481 jack_nframes_t jack_get_buffer_size (jack_client_t *);
    00482
    00493 int  jack_engine_takeover_timebase (jack_client_t *);
    00494
    00501 float jack_cpu_load (jack_client_t *client);
    00502
    00503
    00537 jack_port_t *jack_port_register (jack_client_t *client,
    00538                                  const char *port_name,
    00539                                  const char *port_type,
    00540                                  unsigned long flags,
    00541                                  unsigned long buffer_size);
    00542
    00549 int jack_port_unregister (jack_client_t *, jack_port_t *);
    00550
    00562 void *jack_port_get_buffer (jack_port_t *, jack_nframes_t);
    00563
    00570 const char *jack_port_name (const jack_port_t *port);
    00571
    00578 const char *jack_port_short_name (const jack_port_t *port);
    00579
    00583 int jack_port_flags (const jack_port_t *port);
    00584
    00589 const char *jack_port_type (const jack_port_t *port);
    00590
    00594 int jack_port_is_mine (const jack_client_t *, const jack_port_t *port);
    00595
    00601 int jack_port_connected (const jack_port_t *port);
    00602
    00609 int jack_port_connected_to (const jack_port_t *port,
    00610                             const char *port_name);
    00611
    00623 const char **jack_port_get_connections (const jack_port_t *port);
    00624
    00644 const char **jack_port_get_all_connections (const jack_client_t *client,
    00645                                             const jack_port_t *port);
    00646
    00654 int  jack_port_tie (jack_port_t *src, jack_port_t *dst);
    00655
    00663 int  jack_port_untie (jack_port_t *port);
    00664
    00675 jack_nframes_t jack_port_get_latency (jack_port_t *port);
    00676
    00682 jack_nframes_t jack_port_get_total_latency (jack_client_t *,
    00683                                             jack_port_t *port);
    00684
    00695 void jack_port_set_latency (jack_port_t *, jack_nframes_t);
    00696
    00708 int jack_recompute_total_latency (jack_client_t*, jack_port_t* port);
    00709
    00723 int jack_recompute_total_latencies (jack_client_t*);
    00724
    00732 int jack_port_set_name (jack_port_t *port, const char *port_name);
    00733
    00747 int jack_port_set_alias (jack_port_t *port, const char *alias);
    00748
    00757 int jack_port_unset_alias (jack_port_t *port, const char *alias);
    00758
    00759 /*
    00760  * Get any aliases known for @port.
    00761  *
    00762  * @return the number of aliases discovered for the port
    00763  */
    00764 int jack_port_get_aliases (const jack_port_t *port, char* const aliases[2]);
    00765
    00770 int jack_port_request_monitor (jack_port_t *port, int onoff);
    00771
    00780 int jack_port_request_monitor_by_name (jack_client_t *client,
    00781                                        const char *port_name, int onoff);
    00782
    00790 int jack_port_ensure_monitor (jack_port_t *port, int onoff);
    00791
    00795 int jack_port_monitoring_input (jack_port_t *port);
    00796
    00814 int jack_connect (jack_client_t *,
    00815                   const char *source_port,
    00816                   const char *destination_port);
    00817
    00831 int jack_disconnect (jack_client_t *,
    00832                      const char *source_port,
    00833                      const char *destination_port);
    00834
    00844 int jack_port_disconnect (jack_client_t *, jack_port_t *);
    00845
    00854 int jack_port_name_size(void);
    00855
    00860 int jack_port_type_size(void);
    00884 const char **jack_get_ports (jack_client_t *,
    00885                              const char *port_name_pattern,
    00886                              const char *type_name_pattern,
    00887                              unsigned long flags);
    00888
    00894 jack_port_t *jack_port_by_name (jack_client_t *, const char *port_name);
    00895
    00899 jack_port_t *jack_port_by_id (jack_client_t *client,
    00900                               jack_port_id_t port_id);
    00901
    00918 jack_nframes_t jack_frames_since_cycle_start (const jack_client_t *);
    00919
    00926 jack_nframes_t jack_frame_time (const jack_client_t *);
    00927
    00942 jack_nframes_t jack_last_frame_time (const jack_client_t *client);
    00943
    00947 jack_time_t jack_frames_to_time(const jack_client_t *client, jack_nframes_t);
    00948
    00952 jack_nframes_t jack_time_to_frames(const jack_client_t *client, jack_time_t);
    00953
    00960 jack_time_t jack_get_time();
    00961
    00968
    00977 extern void (*jack_error_callback)(const char *msg);
    00978
    00985 void jack_set_error_function (void (*func)(const char *));
    00986
    00995 extern void (*jack_info_callback)(const char *msg);
    00996
    01000 void jack_set_info_function (void (*func)(const char *));
    01010 void jack_free(void* ptr);
    01011
    01012 #ifdef __cplusplus
    01013 }
    01014 #endif
    01015
    01016 #endif /* __jack_h__ */
    01017