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