]> icculus.org git repositories - btb/d2x.git/blob - arch/win32/midi.c
remove rcs tags
[btb/d2x.git] / arch / win32 / midi.c
1 // MIDI stuff follows.\r
2 #include <stdio.h>\r
3 \r
4 #include "error.h"\r
5 #include "hmpfile.h"\r
6 #include "args.h"\r
7 \r
8 hmp_file *hmp = NULL;\r
9 \r
10 int midi_volume = 255;\r
11 int digi_midi_song_playing = 0;\r
12 \r
13 \r
14 void digi_stop_current_song()\r
15 {\r
16         if (digi_midi_song_playing)\r
17         {\r
18                 hmp_close(hmp);\r
19                 hmp = NULL;\r
20                 digi_midi_song_playing = 0;\r
21         }\r
22 }\r
23 \r
24 void digi_set_midi_volume(int n)\r
25 {\r
26         int mm_volume;\r
27 \r
28         if (n < 0)\r
29                 midi_volume = 0;\r
30         else if (n > 127)\r
31                 midi_volume = 127;\r
32         else\r
33                 midi_volume = n;\r
34 \r
35         // scale up from 0-127 to 0-0xffff\r
36         mm_volume = (midi_volume << 1) | (midi_volume & 1);\r
37         mm_volume |= (mm_volume << 8);\r
38 \r
39         if (hmp)\r
40                 midiOutSetVolume((HMIDIOUT)hmp->hmidi, mm_volume | mm_volume << 16);\r
41 }\r
42 \r
43 void digi_play_midi_song(char *filename, char *melodic_bank, char *drum_bank, int loop)\r
44 {\r
45 #if 0\r
46         if (!digi_initialised)\r
47                 return;\r
48 #endif\r
49 \r
50         if (FindArg("-nosound"))\r
51                 return;\r
52 \r
53         digi_stop_current_song();\r
54 \r
55         if (filename == NULL)\r
56                 return;\r
57         if (midi_volume < 1)\r
58                 return;\r
59 \r
60         if ((hmp = hmp_open(filename)))\r
61         {\r
62                 hmp_play(hmp);\r
63                 digi_midi_song_playing = 1;\r
64                 digi_set_midi_volume(midi_volume);\r
65         }\r
66         else\r
67                 printf("hmp_open failed\n");\r
68 }\r
69 \r
70 \r
71 int sound_paused = 0;\r
72 \r
73 void digi_pause_midi()\r
74 {\r
75 #if 0\r
76         if (!digi_initialised)\r
77                 return;\r
78 #endif\r
79 \r
80         if (sound_paused == 0)\r
81         {\r
82                 // pause here\r
83         }\r
84         sound_paused++;\r
85 }\r
86 \r
87 void digi_resume_midi()\r
88 {\r
89 #if 0\r
90         if (!digi_initialised)\r
91                 return;\r
92 #endif\r
93 \r
94         Assert(sound_paused > 0);\r
95 \r
96         if (sound_paused == 1)\r
97         {\r
98                 // resume sound here\r
99         }\r
100         sound_paused--;\r
101 }\r