80afaef3966c4fd0f9a53c9f14520e7a73a1d4bc
[btb/d2x.git] / arch / win32 / midi.c
1 /* $Id: midi.c,v 1.3 2005-03-18 03:42:43 btb Exp $ */\r
2 // MIDI stuff follows.\r
3 #include <stdio.h>\r
4 \r
5 #include "error.h"\r
6 #include "hmpfile.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         digi_stop_current_song();\r
51 \r
52         if (filename == NULL)\r
53                 return;\r
54         if (midi_volume < 1)\r
55                 return;\r
56 \r
57         if ((hmp = hmp_open(filename)))\r
58         {\r
59                 hmp_play(hmp);\r
60                 digi_midi_song_playing = 1;\r
61                 digi_set_midi_volume(midi_volume);\r
62         }\r
63         else\r
64                 printf("hmp_open failed\n");\r
65 }\r
66 \r
67 \r
68 int sound_paused = 0;\r
69 \r
70 void digi_pause_midi()\r
71 {\r
72 #if 0\r
73         if (!digi_initialised)\r
74                 return;\r
75 #endif\r
76 \r
77         if (sound_paused == 0)\r
78         {\r
79                 // pause here\r
80         }\r
81         sound_paused++;\r
82 }\r
83 \r
84 void digi_resume_midi()\r
85 {\r
86 #if 0\r
87         if (!digi_initialised)\r
88                 return;\r
89 #endif\r
90 \r
91         Assert(sound_paused > 0);\r
92 \r
93         if (sound_paused == 1)\r
94         {\r
95                 // resume sound here\r
96         }\r
97         sound_paused--;\r
98 }\r