00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __jack_transport_h__
00023 #define __jack_transport_h__
00024
00025 #ifdef __cplusplus
00026 extern "C" {
00027 #endif
00028
00029 #include <jack/types.h>
00030
00034 typedef enum {
00035
00036
00037 JackTransportStopped = 0,
00038 JackTransportRolling = 1,
00039 JackTransportLooping = 2,
00040 JackTransportStarting = 3
00042 } jack_transport_state_t;
00043
00044 typedef uint64_t jack_unique_t;
00049 typedef enum {
00050
00051 JackPositionBBT = 0x10,
00052 JackPositionTimecode = 0x20
00054 } jack_position_bits_t;
00055
00057 #define JACK_POSITION_MASK (JackPositionBBT|JackPositionTimecode)
00058 #define EXTENDED_TIME_INFO
00059
00063 typedef struct {
00064
00065
00066 jack_unique_t unique_1;
00067 jack_time_t usecs;
00068 jack_nframes_t frame_rate;
00069 jack_nframes_t frame;
00071 jack_position_bits_t valid;
00073
00074 int32_t bar;
00075 int32_t beat;
00076 int32_t tick;
00077 double bar_start_tick;
00078
00079 float beats_per_bar;
00080 float beat_type;
00081 double ticks_per_beat;
00082 double beats_per_minute;
00083
00084
00085 double frame_time;
00086 double next_time;
00089
00090
00091
00092 int32_t padding[10];
00093
00094
00095 jack_unique_t unique_2;
00097 } jack_position_t;
00098
00115 int jack_release_timebase (jack_client_t *client);
00116
00138 typedef int (*JackSyncCallback)(jack_transport_state_t state,
00139 jack_position_t *pos,
00140 void *arg);
00141
00162 int jack_set_sync_callback (jack_client_t *client,
00163 JackSyncCallback sync_callback,
00164 void *arg);
00165
00183 int jack_set_sync_timeout (jack_client_t *client,
00184 jack_time_t timeout);
00185
00215 typedef void (*JackTimebaseCallback)(jack_transport_state_t state,
00216 jack_nframes_t nframes,
00217 jack_position_t *pos,
00218 int new_pos,
00219 void *arg);
00220
00246 int jack_set_timebase_callback (jack_client_t *client,
00247 int conditional,
00248 JackTimebaseCallback timebase_callback,
00249 void *arg);
00250
00267 int jack_transport_locate (jack_client_t *client,
00268 jack_nframes_t frame);
00269
00285 jack_transport_state_t jack_transport_query (const jack_client_t *client,
00286 jack_position_t *pos);
00287
00295 jack_nframes_t jack_get_current_transport_frame (const jack_client_t *client);
00296
00313 int jack_transport_reposition (jack_client_t *client,
00314 jack_position_t *pos);
00315
00327 void jack_transport_start (jack_client_t *client);
00328
00337 void jack_transport_stop (jack_client_t *client);
00338
00339
00340
00341
00342
00343
00344
00350 typedef enum {
00351
00352 JackTransportState = 0x1,
00353 JackTransportPosition = 0x2,
00354 JackTransportLoop = 0x4,
00355 JackTransportSMPTE = 0x8,
00356 JackTransportBBT = 0x10
00358 } jack_transport_bits_t;
00359
00366 typedef struct {
00367
00368
00369
00370 jack_nframes_t frame_rate;
00371 jack_time_t usecs;
00373 jack_transport_bits_t valid;
00374 jack_transport_state_t transport_state;
00375 jack_nframes_t frame;
00376 jack_nframes_t loop_start;
00377 jack_nframes_t loop_end;
00378
00379 long smpte_offset;
00380 float smpte_frame_rate;
00382 int bar;
00383 int beat;
00384 int tick;
00385 double bar_start_tick;
00386
00387 float beats_per_bar;
00388 float beat_type;
00389 double ticks_per_beat;
00390 double beats_per_minute;
00391
00392 } jack_transport_info_t;
00393
00406 void jack_get_transport_info (jack_client_t *client,
00407 jack_transport_info_t *tinfo);
00408
00416 void jack_set_transport_info (jack_client_t *client,
00417 jack_transport_info_t *tinfo);
00418
00419 #ifdef __cplusplus
00420 }
00421 #endif
00422
00423 #endif