Lines Matching refs:event
45 * A MIDI event after being parsed/loaded from the file.
48 struct event {
49 struct event *next; /* linked list */
63 struct event *first_event; /* list of all events in this track */
66 struct event *current_event; /* used while loading and playing */
206 * event.
278 /* allocates a new event */
279 static struct event *new_event(struct track *track, int sysex_length)
281 struct event *event;
283 event = malloc(sizeof(struct event) + sysex_length);
284 check_mem(event);
286 event->next = NULL;
290 track->current_event->next = event;
292 track->first_event = event;
293 track->current_event = event;
295 return event;
314 struct event *event;
357 event = new_event(track, 0);
358 event->type = cmd_type[cmd >> 4];
359 event->port = port;
360 event->tick = tick;
361 event->data.d[0] = cmd & 0x0f;
362 event->data.d[1] = read_byte() & 0x7f;
363 event->data.d[2] = read_byte() & 0x7f;
368 event = new_event(track, 0);
369 event->type = cmd_type[cmd >> 4];
370 event->port = port;
371 event->tick = tick;
372 event->data.d[0] = cmd & 0x0f;
373 event->data.d[1] = read_byte() & 0x7f;
385 event = new_event(track, len);
386 event->type = SND_SEQ_EVENT_SYSEX;
387 event->port = port;
388 event->tick = tick;
389 event->data.length = len;
391 event->sysex[0] = 0xf0;
397 event->sysex[c] = read_byte();
400 case 0xff: /* meta event */
426 event = new_event(track, 0);
427 event->type = SND_SEQ_EVENT_TEMPO;
428 event->port = port;
429 event->tick = tick;
430 event->data.tempo = read_byte() << 16;
431 event->data.tempo |= read_byte() << 8;
432 event->data.tempo |= read_byte();
602 struct event *event;
605 event = tracks[i].first_event;
606 while (event) {
607 struct event *next = event->next;
608 free(event);
609 event = next;
635 check_snd("output event", err);
648 static int fill_legacy_event(struct event* event, snd_seq_event_t *ev)
650 ev->type = event->type;
656 ev->data.note.channel = event->data.d[0];
657 ev->data.note.note = event->data.d[1];
658 ev->data.note.velocity = event->data.d[2];
662 ev->data.control.channel = event->data.d[0];
663 ev->data.control.param = event->data.d[1];
664 ev->data.control.value = event->data.d[2];
669 ev->data.control.channel = event->data.d[0];
670 ev->data.control.value = event->data.d[1];
674 ev->data.control.channel = event->data.d[0];
675 ev->data.control.value = ((event->data.d[1]) |
676 ((event->data.d[2]) << 7)) - 0x2000;
679 snd_seq_ev_set_variable(ev, event->data.length, event->sysex);
683 fatal("Invalid event type %d!", ev->type);
711 static int fill_ump_event(struct event* event, snd_seq_ump_event_t *ump_ev,
715 unsigned char status = to_ump_status(event->type);
722 switch (event->type) {
733 ump.note_on.channel = event->data.d[0];
734 ump.note_on.note = event->data.d[1];
735 ump.note_on.velocity = event->data.d[2];
739 ump.control_change.channel = event->data.d[0];
740 ump.control_change.index = event->data.d[1];
741 ump.control_change.data = event->data.d[2];
745 ump.program_change.channel = event->data.d[0];
746 ump.program_change.program = event->data.d[1];
750 ump.channel_pressure.channel = event->data.d[0];
751 ump.channel_pressure.data = event->data.d[1];
755 ump.pitchbend.channel = event->data.d[0];
756 ump.pitchbend.data_msb = event->data.d[2];
757 ump.pitchbend.data_lsb = event->data.d[1];
794 /* The queue won't be started until the START_QUEUE event is
798 struct event* event = NULL;
802 /* search next event */
805 struct event *e2 = track->current_event;
808 event = e2;
812 if (!event)
815 /* advance pointer to next event */
816 event_track->current_event = event->next;
818 /* output the event */
819 ev.time.tick = event->tick;
820 ev.dest = ports[event->port];
821 if (event->type == SND_SEQ_EVENT_TEMPO) {
823 ev.type = event->type;
827 ev.data.queue.param.value = event->data.tempo;
829 err = fill_legacy_event(event, &ev);
835 err = fill_ump_event(event, &ump_ev, &ev);
839 check_snd("output event", err);
846 check_snd("output event", err);
857 check_snd("output event", err);
866 * 1) send an event back to us (like pmidi does), and wait for it;