Added time skew on queue.

The timer speed can be controlled via skew value, smaller = slower
centered on the skew-base value.
This commit is contained in:
Takashi Iwai 2001-12-10 16:45:05 +00:00
parent e457d1f0c0
commit bcf50519e4
4 changed files with 87 additions and 17 deletions

View file

@ -438,8 +438,12 @@ void snd_seq_queue_tempo_copy(snd_seq_queue_tempo_t *dst, const snd_seq_queue_te
int snd_seq_queue_tempo_get_queue(const snd_seq_queue_tempo_t *info);
unsigned int snd_seq_queue_tempo_get_tempo(const snd_seq_queue_tempo_t *info);
int snd_seq_queue_tempo_get_ppq(const snd_seq_queue_tempo_t *info);
unsigned int snd_seq_queue_tempo_get_skew(const snd_seq_queue_tempo_t *info);
unsigned int snd_seq_queue_tempo_get_skew_base(const snd_seq_queue_tempo_t *info);
void snd_seq_queue_tempo_set_tempo(snd_seq_queue_tempo_t *info, unsigned int tempo);
void snd_seq_queue_tempo_set_ppq(snd_seq_queue_tempo_t *info, int ppq);
void snd_seq_queue_tempo_set_skew(snd_seq_queue_tempo_t *info, unsigned int skew);
void snd_seq_queue_tempo_set_skew_base(snd_seq_queue_tempo_t *info, unsigned int base);
int snd_seq_get_queue_tempo(snd_seq_t *handle, int q, snd_seq_queue_tempo_t *tempo);
int snd_seq_set_queue_tempo(snd_seq_t *handle, int q, snd_seq_queue_tempo_t *tempo);

View file

@ -98,8 +98,8 @@ enum snd_seq_event_type {
SND_SEQ_EVENT_CLOCK,
/** MIDI Real Time Tick message; event data type = #snd_seq_ev_queue_control_t */
SND_SEQ_EVENT_TICK,
/** Sync signal; event data type = #snd_seq_ev_queue_control_t */
SND_SEQ_EVENT_SYNC,
/** Queue timer skew; event data type = #snd_seq_ev_queue_control_t */
SND_SEQ_EVENT_QUEUE_SKEW,
/** Sync position changed; event data type = #snd_seq_ev_queue_control_t */
SND_SEQ_EVENT_SYNC_POS,
@ -403,6 +403,11 @@ typedef struct snd_seq_result {
int result; /**< status */
} snd_seq_result_t;
/** Queue skew values */
typedef struct snd_seq_queue_skew {
unsigned int value;
unsigned int base;
} snd_seq_queue_skew_t;
/** queue timer control */
typedef struct snd_seq_ev_queue_control {
@ -412,6 +417,7 @@ typedef struct snd_seq_ev_queue_control {
signed int value; /**< affected value (e.g. tempo) */
snd_seq_timestamp_t time; /**< time */
unsigned int position; /**< sync position */
snd_seq_queue_skew_t skew; /**< queue skew */
unsigned int d32[2]; /**< any data */
unsigned char d8[8]; /**< any data */
} param; /**< data value union */