📄 seqinterf.c
字号:
/* seqinterf.c -- interface to sequence data type for XLISP */#include "switches.h"#include "xlisp.h"#include "stdio.h"#include "cext.h"#include "userio.h"#include "midifns.h"#include "timebase.h"#include "moxc.h"#include "seq.h"#include "seqinterf.h"/* seq_next -- advance to the next event, return TRUE if found *//**/boolean seq_next(seq_type seq){ if (seq->current) { seq->current = seq->current->next; } return seq->current != NULL;}/* seq_get -- get event data for the current event *//**/void seq_get(seq_type seq, long *eventtype, long *ntime, long *line, long *chan, long *value1, long *value2, long *dur){ event_type ev = seq->current; if (!ev) *eventtype = SEQ_DONE; else if (is_note(ev)) { if (ev->value != NO_PITCH) { *eventtype = SEQ_NOTE; *ntime = ev->ntime; *line = ev->nline; *chan = vc_voice(ev->nvoice); *value1 = ev->value; *value2 = ev->u.note.ndur & 0xFF; *dur = ev->u.note.ndur >> 8; } else { *eventtype = SEQ_OTHER; } } else { *eventtype = SEQ_CTRL; *ntime = ev->ntime; *line = ev->nline; *chan = vc_voice(ev->nvoice); *value2 = ev->value; switch (vc_ctrl(ev->nvoice)) { case PSWITCH_CTRL: *value1 = PORTASWITCH; break; case MODWHEEL_CTRL: *value1 = MODWHEEL; break; case TOUCH_CTRL: *eventtype = SEQ_TOUCH; *value1 = ev->value; break; case VOLUME_CTRL: *value1 = VOLUME; break; case BEND_CTRL: *eventtype = SEQ_BEND; *value1 = ev->value << 6; break; case PROGRAM_CTRL: *eventtype = SEQ_PRGM; *value1 = ev->value + 1; break; case ESC_CTRL: switch (ev->value) { case CALL_VALUE: case CLOCK_VALUE: case MACRO_VALUE: case CTRLRAMP_VALUE: case DEFRAMP_VALUE: case SETI_VALUE: *eventtype = SEQ_OTHER; break; case MACCTRL_VALUE: *value1 = ev->u.macctrl.ctrl_number; *value2 = ev->u.macctrl.value; break; default: xlabort("unexpected ESC_CTRL value\n"); break; } break; default: xlabort("unexpected seq data\n"); break; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -