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
00137 typedef int (*JackSyncCallback)(jack_transport_state_t state,
00138 jack_position_t *pos,
00139 void *arg);
00140
00159 int jack_set_sync_callback (jack_client_t *client,
00160 JackSyncCallback sync_callback,
00161 void *arg);
00162
00180 int jack_set_sync_timeout (jack_client_t *client,
00181 jack_time_t timeout);
00182
00211 typedef void (*JackTimebaseCallback)(jack_transport_state_t state,
00212 jack_nframes_t nframes,
00213 jack_position_t *pos,
00214 int new_pos,
00215 void *arg);
00216
00242 int jack_set_timebase_callback (jack_client_t *client,
00243 int conditional,
00244 JackTimebaseCallback timebase_callback,
00245 void *arg);
00246
00263 int jack_transport_locate (jack_client_t *client,
00264 jack_nframes_t frame);
00265
00281 jack_transport_state_t jack_transport_query (jack_client_t *client,
00282 jack_position_t *pos);
00283
00300 int jack_transport_reposition (jack_client_t *client,
00301 jack_position_t *pos);
00302
00314 void jack_transport_start (jack_client_t *client);
00315
00324 void jack_transport_stop (jack_client_t *client);
00325
00326
00327
00328
00329
00330
00331
00337 typedef enum {
00338
00339 JackTransportState = 0x1,
00340 JackTransportPosition = 0x2,
00341 JackTransportLoop = 0x4,
00342 JackTransportSMPTE = 0x8,
00343 JackTransportBBT = 0x10,
00345 } jack_transport_bits_t;
00346
00353 typedef struct {
00354
00355
00356
00357 jack_nframes_t frame_rate;
00358 jack_time_t usecs;
00360 jack_transport_bits_t valid;
00361 jack_transport_state_t transport_state;
00362 jack_nframes_t frame;
00363 jack_nframes_t loop_start;
00364 jack_nframes_t loop_end;
00365
00366 long smpte_offset;
00367 float smpte_frame_rate;
00369 int bar;
00370 int beat;
00371 int tick;
00372 double bar_start_tick;
00373
00374 float beats_per_bar;
00375 float beat_type;
00376 double ticks_per_beat;
00377 double beats_per_minute;
00378
00379 } jack_transport_info_t;
00380
00393 void jack_get_transport_info (jack_client_t *client,
00394 jack_transport_info_t *tinfo);
00395
00403 void jack_set_transport_info (jack_client_t *client,
00404 jack_transport_info_t *tinfo);
00405
00406 #ifdef __cplusplus
00407 }
00408 #endif
00409
00410 #endif