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 (const jack_client_t *client,
00282 jack_position_t *pos);
00283
00291 jack_nframes_t jack_get_current_transport_frame (const jack_client_t *client);
00292
00309 int jack_transport_reposition (jack_client_t *client,
00310 jack_position_t *pos);
00311
00323 void jack_transport_start (jack_client_t *client);
00324
00333 void jack_transport_stop (jack_client_t *client);
00334
00335
00336
00337
00338
00339
00340
00346 typedef enum {
00347
00348 JackTransportState = 0x1,
00349 JackTransportPosition = 0x2,
00350 JackTransportLoop = 0x4,
00351 JackTransportSMPTE = 0x8,
00352 JackTransportBBT = 0x10
00354 } jack_transport_bits_t;
00355
00362 typedef struct {
00363
00364
00365
00366 jack_nframes_t frame_rate;
00367 jack_time_t usecs;
00369 jack_transport_bits_t valid;
00370 jack_transport_state_t transport_state;
00371 jack_nframes_t frame;
00372 jack_nframes_t loop_start;
00373 jack_nframes_t loop_end;
00374
00375 long smpte_offset;
00376 float smpte_frame_rate;
00378 int bar;
00379 int beat;
00380 int tick;
00381 double bar_start_tick;
00382
00383 float beats_per_bar;
00384 float beat_type;
00385 double ticks_per_beat;
00386 double beats_per_minute;
00387
00388 } jack_transport_info_t;
00389
00402 void jack_get_transport_info (jack_client_t *client,
00403 jack_transport_info_t *tinfo);
00404
00412 void jack_set_transport_info (jack_client_t *client,
00413 jack_transport_info_t *tinfo);
00414
00415 #ifdef __cplusplus
00416 }
00417 #endif
00418
00419 #endif