From f89d2871ce6a95ad19fba5dfec9a1eaf37d9a315 Mon Sep 17 00:00:00 2001 From: Bradley Bell Date: Sun, 28 Nov 2004 05:16:38 +0000 Subject: [PATCH] enabled midi on win32 --- ChangeLog | 4 +++ Makefile.am | 4 +-- arch/sdl/digi.c | 6 ++-- arch/win32/Makefile.am | 4 +-- arch/win32/hmpfile.c | 4 +-- arch/win32/midi.c | 64 ++++++++++++++++++++++++++++++++++++++++++ main/kludge.c | 18 +----------- 7 files changed, 78 insertions(+), 26 deletions(-) create mode 100644 arch/win32/midi.c diff --git a/ChangeLog b/ChangeLog index 351c6b5d0..472a00338 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2004-11-27 Bradley Bell + * Makefile.am, arch/sdl/digi.c, arch/win32/Makefile.am, + arch/win32/hmpfile.c, arch/win32/midi.c, main/kludge.c: enabled + midi on win32 + * main/bm.c, main/polyobj.c: better fix for model data freeing bug * main/inferno.c: enable logo screens for shareware/oem diff --git a/Makefile.am b/Makefile.am index 08ac9efa4..f97b0ec3d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -36,9 +36,9 @@ d2x_LDADD = ${LD_KLUDGE} main/libmain.a ${EDITOR_LIBS} 3d/lib3d.a 2d/lib2d.a ${A if MINGW32 if USE_NETWORK -d2x_sdl_LDADD = ${d2x_LDADD} -lwsock32 +d2x_sdl_LDADD = ${d2x_LDADD} -lwinmm -lwsock32 else -d2x_sdl_LDADD = ${d2x_LDADD} +d2x_sdl_LDADD = ${d2x_LDADD} -lwinmm endif else d2x_sdl_LDADD = ${d2x_LDADD} -lm diff --git a/arch/sdl/digi.c b/arch/sdl/digi.c index ce736fabb..5a2a20869 100644 --- a/arch/sdl/digi.c +++ b/arch/sdl/digi.c @@ -1,4 +1,4 @@ -/* $Id: digi.c,v 1.16 2004-05-19 03:13:44 btb Exp $ */ +/* $Id: digi.c,v 1.17 2004-11-28 05:16:38 btb Exp $ */ /* * * SDL digital audio support @@ -915,7 +915,7 @@ void digi_reset_digi_sounds() { } -#if 0 //added/killed on 11/25/98 by Matthew Mueller +#ifndef _WIN32 // MIDI stuff follows. void digi_set_midi_volume( int mvolume ) { } void digi_play_midi_song( char * filename, char * melodic_bank, char * drum_bank, int loop ) {} @@ -928,4 +928,4 @@ void digi_stop_current_song() send_ipc(buf); #endif } -#endif // end this section kill - MM +#endif diff --git a/arch/win32/Makefile.am b/arch/win32/Makefile.am index bafcdc4ea..48cfe189c 100644 --- a/arch/win32/Makefile.am +++ b/arch/win32/Makefile.am @@ -8,12 +8,12 @@ if USE_NETWORK NETWORK_SRCS = ipx_mcast4.c ipx_win.c ipx_udp.c winnet.c endif -libarch_win32_a_SOURCES = ${NETWORK_SRCS} findfile.c mingw_init.c +libarch_win32_a_SOURCES = ${NETWORK_SRCS} findfile.c hmpfile.c midi.c mingw_init.c EXTRA_libarch_win32_a_SOURCES = ipx_mcast4.c ipx_win.c ipx_udp.c winnet.c EXTRA_DIST = ${EXTRA_SUBDIRS} \ d1x.ico d1x.rc d3d.ico debug.cpp descent.ico digi.c findfile.c glinit.c gr.c \ -hmpfile.c init.c joydefs.c joyhh.c key.c mono.c mouse.c palw32.c \ +init.c joydefs.c joyhh.c key.c mono.c mouse.c palw32.c \ pch.cpp scene.cpp serial.c texture.cpp timer.c win32.c winmain.cpp \ ipx_drv.h diff --git a/arch/win32/hmpfile.c b/arch/win32/hmpfile.c index 4ac701c38..2c61fef51 100644 --- a/arch/win32/hmpfile.c +++ b/arch/win32/hmpfile.c @@ -94,11 +94,11 @@ void hmp_stop(hmp_file *hmp) { MIDIHDR *mhdr; if (!hmp->stop) { hmp->stop = 1; - PumpMessages(); + //PumpMessages(); midiStreamStop(hmp->hmidi); while (hmp->bufs_in_mm) { - PumpMessages(); + //PumpMessages(); Sleep(0); } } diff --git a/arch/win32/midi.c b/arch/win32/midi.c new file mode 100644 index 000000000..b9b4d7c2f --- /dev/null +++ b/arch/win32/midi.c @@ -0,0 +1,64 @@ +// MIDI stuff follows. + +#include + +#include "hmpfile.h" + +hmp_file *hmp = NULL; + +int midi_volume = 255; +int digi_midi_song_playing = 0; + + +void digi_stop_current_song() +{ + if (digi_midi_song_playing) + { + hmp_close(hmp); + hmp = NULL; + digi_midi_song_playing = 0; + } +} + +void digi_set_midi_volume(int n) +{ + int mm_volume; + + if (n < 0) + midi_volume = 0; + else if (n > 127) + midi_volume = 127; + else + midi_volume = n; + + // scale up from 0-127 to 0-0xffff + mm_volume = (midi_volume << 1) | (midi_volume & 1); + mm_volume |= (mm_volume << 8); + + if (hmp) + midiOutSetVolume((HMIDIOUT)hmp->hmidi, mm_volume | mm_volume << 16); +} + +void digi_play_midi_song(char *filename, char *melodic_bank, char *drum_bank, int loop) +{ +#if 0 + if (!digi_initialised) + return; +#endif + + digi_stop_current_song(); + + if (filename == NULL) + return; + if (midi_volume < 1) + return; + + if ((hmp = hmp_open(filename))) + { + hmp_play(hmp); + digi_midi_song_playing = 1; + digi_set_midi_volume(midi_volume); + } + else + printf("hmp_open failed\n"); +} diff --git a/main/kludge.c b/main/kludge.c index 223dc6c32..02c7855ed 100644 --- a/main/kludge.c +++ b/main/kludge.c @@ -1,4 +1,4 @@ -/* $Id: kludge.c,v 1.15 2004-05-20 07:42:41 btb Exp $ */ +/* $Id: kludge.c,v 1.16 2004-11-28 05:16:38 btb Exp $ */ /* * @@ -102,22 +102,6 @@ void digi_stop_digi_sounds(void) } -void digi_stop_current_song(void) -{ - - -} - -void digi_set_midi_volume(int a) -{ - -} - -void digi_play_midi_song(void) -{ - -} - void digi_pause_digi_sounds() {