]> 4ch.mooo.com Git - 16.git/blob - src/lib/opl2.h
c001e5c9edbe51de9a8b3d19135c1abacd8ebfb3
[16.git] / src / lib / opl2.h
1 #ifndef _DOSLIB_SND_H_\r
2 #define _DOSLIB_SND_H_\r
3 /* C Header File: ADLIB *****************************************************\r
4 \r
5 Author:   Kevin A. Lee\r
6 \r
7 Last Amended: 27th April, 1993\r
8 \r
9 Description:    Low-level interface to the Adlib (or compatible)\r
10     FM sound card. All information gleaned from\r
11     Jeffrey S. Lee's "Programming the Adlib/Sound\r
12     Blaster FM Music Chips". See Lee's document for\r
13     further information.\r
14 \r
15 Compiled succesfully under Turbo C, Borland C++,\r
16 and Microsoft Quick C (all latest versions).\r
17 \r
18 ****************************************************************************/\r
19 #include "src\lib\lib_com.h"\r
20 \r
21 #define NUMVOICE 11\r
22 #define FACTOR  1193180\r
23 #define OCTAVE  4
24 \r
25 #define MIN_REGISTER                    0x01\r
26 #define MAX_REGISTER                    0xF5\r
27 #define ADLIB_FM_ADDRESS        0x388   /* adlib address/status register */\r
28 #define ADLIB_FM_DATA           0x389   /* adlib data register           */\r
29 \r
30 /*\r
31 static int percussiveMode = 0,currentBDContents = 0;\r
32 //static int opTable[18] = {0,1,2,3,4,5,8,9,10,11,12,13,16,17,18,19,20,21};\r
33 static int voiceModulator[11] = {0,1,2,6,7,8,12,16,14,17,13};\r
34 static int voiceCarrier[9] = {3,4,5,9,10,11,15,16,17};\r
35 */\r
36 \r
37 /*\r
38 * FM Instrument definition for .SBI files - SoundBlaster instrument\r
39 * - these are the important parts - we will skip the header, but since\r
40 *   I am not sure where it starts and ends so I have had to guess.\r
41 *   However it SEEMS! to work. Each array has two values, one for\r
42 *   each operator.\r
43 */\r
44 typedef struct{\r
45         byte SoundCharacteristic[2];    /* modulator frequency multiple...  */\r
46         byte Level[2];                  /* modulator frequency level...     */\r
47         byte AttackDecay[2];            /* modulator attack/decay...        */\r
48         byte SustainRelease[2];         /* modulator sustain/release...     */\r
49         byte WaveSelect[2];             /* output waveform distortion       */\r
50         byte Feedback;                  /* feedback algorithm and strength  */\r
51 } FMInstrument;\r
52 \r
53 \r
54 /*\r
55 * Enumerated F-Numbers (in octave 4) for the chromatic scale.\r
56 */\r
57 /*enum oct{\r
58         B4 = 493.88,\r
59         B4b = 466.16,\r
60         A4 = 440,\r
61         A4b = 415.3,\r
62         G4 = 392,\r
63         G4b = 369.99,\r
64         F4 = 349.23,\r
65         E4 = 329.63,\r
66         E4b = 311.13,\r
67         D4 = 293.66,\r
68         D4b = 277.18,\r
69         C4 = 261.63,\r
70         A0 = 27.50\r
71 };*/\r
72 enum SCALE{\r
73         B4  = 0x1EE,\r
74         B4b = 0x1D2,\r
75         A4  = 440,\r
76         A4b = 0x19F,\r
77         G4 = 0x188,\r
78         G4b  = 0x172,\r
79         F4  = 0x15D,\r
80         E4  = 0x14A,\r
81         E4b  = 0x137,\r
82         D4  = 0x126,\r
83         D4b = 0x115,\r
84         C4  = 0x106,\r
85         A0 = 0x7F2\r
86 };
87 unsigned short Notes[] = {\r
88         19327 ,        /* C b            */\r
89         18242 ,        /* C              */\r
90         17218 ,        /* C #   ( D b )  */\r
91         16252 ,        /* D              */\r
92         15340 ,        /* D #   ( E b )  */\r
93         14479 ,        /* E     ( F b )  */\r
94         13666 ,        /* F     ( E # )  */\r
95         12899 ,        /* F #   ( G b )  */\r
96         12175 ,        /* G              */\r
97         11492 ,        /* G #   ( A b )  */\r
98         10847 ,        /* A              */\r
99         10238 ,        /* A #   ( B b )  */\r
100         9664 ,         /* B     ( C b )  */\r
101         9121 ,         /* B #            */\r
102         0\r
103 };\r
104 \r
105 /* function prototyping */\r
106 void WriteFM(int reg, int value);\r
107 int ReadFM(void);\r
108 int AdlibExists(void);\r
109 void FMReset(/*int percusiveMode*/);    /* Resets the card, quiets all voices, sets the percussive mode state */\r
110 void FMKeyOff(int voice);typedef unsigned char byte;\r
111 void FMKeyOn(int voice, int freq, int octave);\r
112 void FMVoiceVolume(int voice, int vol);\r
113 void FMSetVoice(int voiceNum, FMInstrument *ins);\r
114 /* Remember: percussion instruments must be assigned only to the correct voice number. */\r
115 //void FMSetPercusiveMode(int state);\r
116 //int  LoadSBI(char filename[], FMInstrument *ins);\r
117 void fmtest(void);
118 int soundtest();\r
119 #endif/*_DOSLIB_SND_H_*/