Audio plugin host https://kx.studio/carla
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

236 lines
9.7KB

  1. /*
  2. * JackBridge
  3. * Copyright (C) 2013 Filipe Coelho <falktx@falktx.com>
  4. *
  5. * This program is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU Lesser General Public
  7. * License as published by the Free Software Foundation.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU Lesser General Public License for more details.
  13. *
  14. * For a full copy of the license see the LGPL.txt file
  15. */
  16. #ifndef __JACKBRIDGE_HPP__
  17. #define __JACKBRIDGE_HPP__
  18. #include "CarlaDefines.hpp"
  19. #ifndef JACKBRIDGE_EXPORT
  20. # undef CARLA_EXPORT
  21. # define CARLA_EXPORT
  22. #endif
  23. #ifdef JACKBRIDGE_DIRECT
  24. # include <jack/jack.h>
  25. # include <jack/midiport.h>
  26. # include <jack/transport.h>
  27. #else
  28. #define PRE_PACKED_STRUCTURE
  29. #define POST_PACKED_STRUCTURE __attribute__((__packed__))
  30. #define JACK_DEFAULT_AUDIO_TYPE "32 bit float mono audio"
  31. #define JACK_DEFAULT_MIDI_TYPE "8 bit raw midi"
  32. #include <cstddef>
  33. #include <cstdint>
  34. enum JackOptions {
  35. JackNullOption = 0x00,
  36. JackNoStartServer = 0x01,
  37. JackUseExactName = 0x02,
  38. JackServerName = 0x04,
  39. JackLoadName = 0x08,
  40. JackLoadInit = 0x10,
  41. JackSessionID = 0x20
  42. };
  43. enum JackStatus {
  44. JackFailure = 0x01,
  45. JackInvalidOption = 0x02,
  46. JackNameNotUnique = 0x04,
  47. JackServerStarted = 0x08,
  48. JackServerFailed = 0x10,
  49. JackServerError = 0x20,
  50. JackNoSuchClient = 0x40,
  51. JackLoadFailure = 0x80,
  52. JackInitFailure = 0x100,
  53. JackShmFailure = 0x200,
  54. JackVersionError = 0x400,
  55. JackBackendError = 0x800,
  56. JackClientZombie = 0x1000
  57. };
  58. enum JackLatencyCallbackMode {
  59. JackCaptureLatency,
  60. JackPlaybackLatency
  61. };
  62. enum JackPortFlags {
  63. JackPortIsInput = 0x1,
  64. JackPortIsOutput = 0x2,
  65. JackPortIsPhysical = 0x4,
  66. JackPortCanMonitor = 0x8,
  67. JackPortIsTerminal = 0x10,
  68. };
  69. enum JackTransportFlags {
  70. JackTransportStopped = 0,
  71. JackTransportRolling = 1,
  72. JackTransportLooping = 2,
  73. JackTransportStarting = 3,
  74. JackTransportNetStarting = 4
  75. };
  76. enum JackPositionBits {
  77. JackPositionBBT = 0x010,
  78. JackPositionTimecode = 0x020,
  79. JackBBTFrameOffset = 0x040,
  80. JackAudioVideoRatio = 0x080,
  81. JackVideoFrameOffset = 0x100
  82. };
  83. enum JackTransportBits {
  84. JackTransportState = 0x01,
  85. JackTransportPosition = 0x02,
  86. JackTransportLoop = 0x04,
  87. JackTransportSMPTE = 0x08,
  88. JackTransportBBT = 0x10
  89. };
  90. typedef uint32_t jack_nframes_t;
  91. typedef uint32_t jack_port_id_t;
  92. typedef uint64_t jack_time_t;
  93. typedef uint64_t jack_unique_t;
  94. typedef unsigned char jack_midi_data_t;
  95. typedef enum JackOptions jack_options_t;
  96. typedef enum JackStatus jack_status_t;
  97. typedef enum JackLatencyCallbackMode jack_latency_callback_mode_t;
  98. typedef enum JackTransportFlags jack_transport_state_t;
  99. typedef enum JackPositionBits jack_position_bits_t;
  100. typedef enum JackTransportBits jack_transport_bits_t;
  101. struct _jack_midi_event {
  102. jack_nframes_t time;
  103. size_t size;
  104. jack_midi_data_t* buffer;
  105. };
  106. PRE_PACKED_STRUCTURE
  107. struct _jack_latency_range {
  108. jack_nframes_t min;
  109. jack_nframes_t max;
  110. } POST_PACKED_STRUCTURE;
  111. PRE_PACKED_STRUCTURE
  112. struct _jack_position {
  113. jack_unique_t unique_1;
  114. jack_time_t usecs;
  115. jack_nframes_t frame_rate;
  116. jack_nframes_t frame;
  117. jack_position_bits_t valid;
  118. int32_t bar;
  119. int32_t beat;
  120. int32_t tick;
  121. double bar_start_tick;
  122. float beats_per_bar;
  123. float beat_type;
  124. double ticks_per_beat;
  125. double beats_per_minute;
  126. double frame_time;
  127. double next_time;
  128. jack_nframes_t bbt_offset;
  129. float audio_frames_per_video_frame;
  130. jack_nframes_t video_offset;
  131. int32_t padding[7];
  132. jack_unique_t unique_2;
  133. } POST_PACKED_STRUCTURE;
  134. typedef struct _jack_port jack_port_t;
  135. typedef struct _jack_client jack_client_t;
  136. typedef struct _jack_latency_range jack_latency_range_t;
  137. typedef struct _jack_position jack_position_t;
  138. typedef struct _jack_midi_event jack_midi_event_t;
  139. typedef void (*JackLatencyCallback)(jack_latency_callback_mode_t mode, void *arg);
  140. typedef int (*JackProcessCallback)(jack_nframes_t nframes, void *arg);
  141. typedef int (*JackBufferSizeCallback)(jack_nframes_t nframes, void *arg);
  142. typedef int (*JackSampleRateCallback)(jack_nframes_t nframes, void *arg);
  143. typedef void (*JackPortRegistrationCallback)(jack_port_id_t port, int register_, void *arg);
  144. typedef void (*JackClientRegistrationCallback)(const char* name, int register_, void *arg);
  145. typedef void (*JackPortConnectCallback)(jack_port_id_t a, jack_port_id_t b, int connect, void* arg);
  146. typedef int (*JackPortRenameCallback)(jack_port_id_t port, const char* old_name, const char* new_name, void *arg);
  147. typedef void (*JackFreewheelCallback)(int starting, void *arg);
  148. typedef void (*JackShutdownCallback)(void *arg);
  149. #endif // ! JACKBRIDGE_DIRECT
  150. CARLA_EXPORT const char* jackbridge_get_version_string();
  151. CARLA_EXPORT jack_client_t* jackbridge_client_open(const char* client_name, jack_options_t options, jack_status_t* status, ...);
  152. CARLA_EXPORT const char* jackbridge_client_rename(jack_client_t* client, const char* new_name);
  153. CARLA_EXPORT bool jackbridge_client_close(jack_client_t* client);
  154. CARLA_EXPORT int jackbridge_client_name_size();
  155. CARLA_EXPORT char* jackbridge_get_client_name(jack_client_t* client);
  156. CARLA_EXPORT bool jackbridge_activate(jack_client_t* client);
  157. CARLA_EXPORT bool jackbridge_deactivate(jack_client_t* client);
  158. CARLA_EXPORT void jackbridge_on_shutdown(jack_client_t* client, JackShutdownCallback shutdown_callback, void* arg);
  159. CARLA_EXPORT bool jackbridge_set_process_callback(jack_client_t* client, JackProcessCallback process_callback, void* arg);
  160. CARLA_EXPORT bool jackbridge_set_freewheel_callback(jack_client_t* client, JackFreewheelCallback freewheel_callback, void* arg);
  161. CARLA_EXPORT bool jackbridge_set_buffer_size_callback(jack_client_t* client, JackBufferSizeCallback bufsize_callback, void* arg);
  162. CARLA_EXPORT bool jackbridge_set_sample_rate_callback(jack_client_t* client, JackSampleRateCallback srate_callback, void* arg);
  163. CARLA_EXPORT bool jackbridge_set_client_registration_callback(jack_client_t* client, JackClientRegistrationCallback registration_callback, void* arg);
  164. CARLA_EXPORT bool jackbridge_set_port_registration_callback (jack_client_t* client, JackPortRegistrationCallback registration_callback, void *arg);
  165. CARLA_EXPORT bool jackbridge_set_port_connect_callback (jack_client_t* client, JackPortConnectCallback connect_callback, void* arg);
  166. CARLA_EXPORT bool jackbridge_set_port_rename_callback (jack_client_t* client, JackPortRenameCallback rename_callback, void* arg);
  167. CARLA_EXPORT bool jackbridge_set_latency_callback(jack_client_t* client, JackLatencyCallback latency_callback, void* arg);
  168. CARLA_EXPORT jack_nframes_t jackbridge_get_sample_rate(jack_client_t* client);
  169. CARLA_EXPORT jack_nframes_t jackbridge_get_buffer_size(jack_client_t* client);
  170. CARLA_EXPORT jack_port_t* jackbridge_port_register(jack_client_t* client, const char* port_name, const char* port_type, unsigned long flags, unsigned long buffer_size);
  171. CARLA_EXPORT bool jackbridge_port_unregister(jack_client_t* client, jack_port_t* port);
  172. CARLA_EXPORT void* jackbridge_port_get_buffer(jack_port_t* port, jack_nframes_t nframes);
  173. CARLA_EXPORT const char* jackbridge_port_name(const jack_port_t* port);
  174. CARLA_EXPORT const char* jackbridge_port_short_name(const jack_port_t* port);
  175. CARLA_EXPORT int jackbridge_port_flags(const jack_port_t* port);
  176. CARLA_EXPORT const char* jackbridge_port_type(const jack_port_t* port);
  177. CARLA_EXPORT const char** jackbridge_port_get_connections(const jack_port_t* port);
  178. CARLA_EXPORT bool jackbridge_port_set_name(jack_port_t* port, const char* port_name);
  179. CARLA_EXPORT bool jackbridge_connect(jack_client_t* client, const char* source_port, const char* destination_port);
  180. CARLA_EXPORT bool jackbridge_disconnect(jack_client_t* client, const char* source_port, const char* destination_port);
  181. CARLA_EXPORT int jackbridge_port_name_size();
  182. CARLA_EXPORT void jackbridge_port_get_latency_range(jack_port_t* port, jack_latency_callback_mode_t mode, jack_latency_range_t* range);
  183. CARLA_EXPORT void jackbridge_port_set_latency_range(jack_port_t* port, jack_latency_callback_mode_t mode, jack_latency_range_t* range);
  184. CARLA_EXPORT bool jackbridge_recompute_total_latencies(jack_client_t* client);
  185. CARLA_EXPORT const char** jackbridge_get_ports(jack_client_t* client, const char* port_name_pattern, const char* type_name_pattern, unsigned long flags);
  186. CARLA_EXPORT jack_port_t* jackbridge_port_by_name(jack_client_t* client, const char* port_name);
  187. CARLA_EXPORT jack_port_t* jackbridge_port_by_id(jack_client_t* client, jack_port_id_t port_id);
  188. CARLA_EXPORT void jackbridge_free(void* ptr);
  189. CARLA_EXPORT uint32_t jackbridge_midi_get_event_count(void* port_buffer);
  190. CARLA_EXPORT bool jackbridge_midi_event_get(jack_midi_event_t* event, void* port_buffer, uint32_t event_index);
  191. CARLA_EXPORT void jackbridge_midi_clear_buffer(void* port_buffer);
  192. CARLA_EXPORT bool jackbridge_midi_event_write(void* port_buffer, jack_nframes_t time, const jack_midi_data_t* data, size_t data_size);
  193. CARLA_EXPORT jack_midi_data_t* jackbridge_midi_event_reserve(void* port_buffer, jack_nframes_t time, size_t data_size);
  194. CARLA_EXPORT int jackbridge_transport_locate(jack_client_t* client, jack_nframes_t frame);
  195. CARLA_EXPORT void jackbridge_transport_start(jack_client_t* client);
  196. CARLA_EXPORT void jackbridge_transport_stop(jack_client_t* client);
  197. CARLA_EXPORT jack_transport_state_t jackbridge_transport_query(const jack_client_t* client, jack_position_t* pos);
  198. CARLA_EXPORT bool jackbridge_sem_post(void* sem);
  199. CARLA_EXPORT bool jackbridge_sem_timedwait(void* sem, int secs);
  200. #endif // __JACKBRIDGE_HPP__