playmidi.h
上传用户:nini_0081
上传日期:2022-07-21
资源大小:2628k
文件大小:3k
源码类别:

多媒体编程

开发平台:

DOS

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