Skip to content

Latest commit

 

History

History
107 lines (97 loc) · 3.33 KB

playmidi.h

File metadata and controls

107 lines (97 loc) · 3.33 KB
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#define RELEASE "Playmidi 2.4"
/************************************************************************
playmidi.h -- defines and structures for use by playmidi package
Copyright (C) 1994-1996 Nathan I. Laredo
This program is modifiable/redistributable under the terms
of the GNU General Public Licence.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Send your comments and all your spare pocket change to
laredo@gnu.ai.mit.edu (Nathan Laredo) or to PSC 1, BOX 709, 2401
Kelly Drive, Lackland AFB, TX 78236-5128, USA.
*************************************************************************
/* edited by Peter Kutak */
/* email : kutak@stonline.sk */
/* Default mask for percussion instruments. Channels 16 and 10 = 0x8200 */
#define PERCUSSION 0x0200
/* change the following if you have lots of synth devices */
#define MAX_CARDS 5
/* the following definition is set by Configure */
#define FM_DEFAULT_MODE 0
/* the following definition is set by Configure */
#define PATCH_PATH1 "/dos/ultrasnd/midi"
/* the following definition is set by Configure */
#define PATCH_PATH2 "/usr/local/lib/Plib"
/* change this if you notice performance problems, 128 bytes by default */
#define SEQUENCERBLOCKSIZE 128
/* change this if you have really outrageous midi files > 128 tracks */
/* 128 tracks is approximately a 4K structure */
#define MAXTRKS 128
/* where to find fm patch libraries */
#define SEQUENCER_DEV "/dev/sequencer"
#define O3MELODIC "/etc/std.o3"
#define O3DRUMS "/etc/drums.o3"
#define SBMELODIC "/etc/std.sb"
#define SBDRUMS "/etc/drums.sb"
#define ISPERC(x) (perc & (1 << x))
#define ISGUS(x) (play_gus & (1 << x))
#define ISFM(x) (play_fm & (1 << x))
#define ISMIDI(x) (play_ext & (1 << x))
#define ISAWE(x) (play_awe & (1 << x))
#define ISPLAYING(x) (chanmask & (1 << x))
#define NO_EXIT 100
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/soundcard.h>
#include <sys/ioctl.h>
#ifdef linux
#include <linux/awe_voice.h>
#else
#include <awe_voice.h>
#endif
struct chanstate {
int program;
int bender;
int oldbend; /* used for graphics */
int bender_range;
int oldrange; /* used for graphics */
int controller[255];
int pressure;
};
struct voicestate {
int note;
int channel;
int timestamp;
int dead;
};
/* Non-standard MIDI file formats */
#define RIFF 0x52494646
#define CTMF 0x43544d46
/* Standard MIDI file format definitions */
#define MThd 0x4d546864
#define MTrk 0x4d54726b
#define meta_event 0xff
#define sequence_number 0x00
#define text_event 0x01
#define copyright_notice 0x02
#define sequence_name 0x03
#define instrument_name 0x04
#define lyric 0x05
#define marker 0x06
#define cue_point 0x07
#define channel_prefix 0x20
#define end_of_track 0x2f
#define set_tempo 0x51
#define smpte_offset 0x54
#define time_signature 0x58
#define key_signature 0x59
#define sequencer_specific 0x74
struct miditrack {
unsigned char *data; /* data of midi track */
unsigned long int length; /* length of track data */
unsigned long int index; /* current byte in track */
unsigned long int ticks; /* current midi tick count */
unsigned char running_st; /* running status byte */
};