aboutsummaryrefslogtreecommitdiff
path: root/shared/common/mifi.h
diff options
context:
space:
mode:
Diffstat (limited to 'shared/common/mifi.h')
-rw-r--r--shared/common/mifi.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/shared/common/mifi.h b/shared/common/mifi.h
new file mode 100644
index 0000000..3893616
--- /dev/null
+++ b/shared/common/mifi.h
@@ -0,0 +1,84 @@
+/* Copyright (c) 2001-2003 krzYszcz and others.
+ * For information on usage and redistribution, and for a DISCLAIMER OF ALL
+ * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
+
+/* reading/writing midifiles, a prototype version */
+
+#ifndef __MIFI_H__
+#define __MIFI_H__
+
+/* event types, as returned by mifi_read_event() */
+#define MIFI_READ_FATAL -3 /* unexpected eof, error in last track, or file error */
+#define MIFI_READ_EOF -2 /* regular eof */
+#define MIFI_READ_SKIP -1 /* error and successful skip to the next track */
+#define MIFI_META_SEQNUM 0
+#define MIFI_META_TEXT 1
+#define MIFI_META_COPYRIGHT 2
+#define MIFI_META_TRACKNAME 3
+#define MIFI_META_INSTRUMENT 4
+#define MIFI_META_LYRIC 5
+#define MIFI_META_MARKER 6
+#define MIFI_META_CUE 7
+#define MIFI_META_MAXPRINTABLE 15 /* 1..15 are various text meta-events */
+#define MIFI_META_CHANNEL 0x20 /* channel prefix */
+#define MIFI_META_EOT 0x2f /* end of track */
+#define MIFI_META_TEMPO 0x51
+#define MIFI_META_SMPTE 0x54 /* SMPTE offset */
+#define MIFI_META_TIMESIG 0x58 /* time signature */
+#define MIFI_META_KEYSIG 0x59 /* key signature */
+/* ...channel status codes go here, too obvious to #define... */
+#define MIFI_SYSEX_FIRST 0xf0
+#define MIFI_SYSEX_NEXT 0xf7
+/* this code is not returned as an event type, but in e_status of t_mifi_event */
+#define MIFI_EVENT_META 0xff
+
+/* true if one of channel messages */
+#define MIFI_IS_CHANNEL(status) (((status) & 0x80) && (status) < 0xf0)
+/* true if one of the two shorter channel messages */
+#define MIFI_ONE_DATABYTE(status) (((status) & 0xe0) == 0xc0)
+
+/* derived from t_squeve */
+typedef struct _mifi_event
+{
+ uint32 e_length;
+ uchar *e_data;
+ size_t e_bufsize;
+ uint32 e_delay;
+ uchar e_status;
+ uchar e_channel;
+ uchar e_meta; /* meta-event type */
+} t_mifi_event;
+
+/* This structure holds midi data stream properties, i.e. both the info stored
+ in midifile header, and the current state according to position in a stream. */
+/* LATER clean up t_sq and derive t_mifi_stream */
+typedef struct _sq t_mifi_stream;
+
+/* prototypes of public interface routines */
+
+t_mifi_event *mifi_event_new(void);
+void mifi_event_free(t_mifi_event *e);
+int mifi_event_settext(t_mifi_event *e, int type, char *text);
+void mifi_event_printmeta(t_mifi_event *e);
+
+t_mifi_stream *mifi_stream_new(void);
+void mifi_stream_reset(t_mifi_stream *x);
+void mifi_stream_free(t_mifi_stream *x);
+
+t_mifi_stream *mifi_read_start(t_mifi_stream *x,
+ const char *filename, const char *dirname,
+ int complain);
+int mifi_read_restart(t_mifi_stream *x);
+void mifi_read_end(t_mifi_stream *x);
+int mifi_read_event(t_mifi_stream *x, t_mifi_event *e);
+int mifi_read_analyse(t_mifi_stream *stp);
+int mifi_read_doit(t_mifi_stream *stp);
+
+t_mifi_stream *mifi_write_start(t_mifi_stream *x,
+ const char *filename, const char *dirname);
+void mifi_write_end(t_mifi_stream *x);
+int mifi_write_start_track(t_mifi_stream *x);
+int mifi_write_adjust_track(t_mifi_stream *x, uint32 eotdelay);
+int mifi_write_event(t_mifi_stream *x, t_mifi_event *e);
+
+#endif