diff --git a/Makefile b/Makefile index d829fa6..4ff1007 100644 --- a/Makefile +++ b/Makefile @@ -24,6 +24,7 @@ OBJS = src/fileio.o \ src/sys/nact_input.o \ src/sys/nact_sys3.o \ src/win/nact_win.o \ + src/win/mako_win.o \ src/win/unicode.o \ src/res3/Script1.o diff --git a/src/sys/mako.h b/src/sys/mako.h index b2c60e6..29633f0 100644 --- a/src/sys/mako.h +++ b/src/sys/mako.h @@ -25,6 +25,10 @@ protected: NACT* nact; private: + void reset_midi(); + void send_2bytes(uint8 d1, uint8 d2); + void send_3bytes(uint8 d1, uint8 d2, uint8 d3); + // FM, CD-DA bool cdda_play; int current_mark; // Y18 diff --git a/src/sys/mako_midi.cpp b/src/sys/mako_midi.cpp index ebfcf15..3add5da 100644 --- a/src/sys/mako_midi.cpp +++ b/src/sys/mako_midi.cpp @@ -4,36 +4,11 @@ [ MAKO - midi ] */ -#include -#include #include "mako.h" #include "dri.h" #define next_mml(p) mml[p].data[mml[p].addr++] -// MIDI音源 -union UNION_MIDI_DATA { - DWORD msg; - BYTE data[4]; -}; -static UNION_MIDI_DATA midi; -static HMIDIOUT hMidi; - -#define send_2bytes(d1, d2) { midi.data[0] = (BYTE)d1; midi.data[1] = (BYTE)d2; midiOutShortMsg(hMidi,midi.msg); } -#define send_3bytes(d1, d2, d3) { midi.data[0] = (BYTE)d1; midi.data[1] = (BYTE)d2; midi.data[2] = (BYTE)d3 ;midiOutShortMsg(hMidi, midi.msg); } - -void MAKO::initialize_midi() -{ - // MIDI音源の初期化 - midiOutOpen(&hMidi, MIDI_MAPPER, NULL, NULL, CALLBACK_NULL); -} - -void MAKO::release_midi() -{ - // MIDI音源の開放 - midiOutClose(hMidi); -} - void MAKO::stop_midi() { for(int i = 0; i < 10; i++) { @@ -87,20 +62,7 @@ void MAKO::start_midi() play[i + 3].pan = mda[i + 256].pan; } - // MIDI音源のGS-RESET - BYTE gs_reset[11] = {0xf0, 0x41, 0x20, 0x42, 0x12, 0x40, 0x00, 0x7f, 0x00, 0x41, 0xf7}; - MIDIHDR mhMidi; - ZeroMemory(&mhMidi, sizeof(mhMidi)); - mhMidi.lpData = (LPSTR)gs_reset; - mhMidi.dwBufferLength = 11; - mhMidi.dwBytesRecorded = 11; - - midiOutPrepareHeader(hMidi, &mhMidi, sizeof(mhMidi)); - midiOutLongMsg(hMidi, &mhMidi, sizeof(mhMidi)); - while(!(mhMidi.dwFlags & MHDR_DONE)) { - SDL_Delay(10); - } - midiOutUnprepareHeader(hMidi, &mhMidi, sizeof(mhMidi)); + reset_midi(); // システムリセット、ボリュームリセット for(int i = 0; i < 10; i++) { diff --git a/src/win/mako_win.cpp b/src/win/mako_win.cpp new file mode 100644 index 0000000..e95ae10 --- /dev/null +++ b/src/win/mako_win.cpp @@ -0,0 +1,57 @@ +#include +#include +#include "mako.h" + +// MIDI髻ウ貅� +union UNION_MIDI_DATA { + DWORD msg; + BYTE data[4]; +}; +static HMIDIOUT hMidi; + +void MAKO::initialize_midi() +{ + // MIDI髻ウ貅舌�ョ蛻晄悄蛹� + midiOutOpen(&hMidi, MIDI_MAPPER, NULL, NULL, CALLBACK_NULL); +} + +void MAKO::release_midi() +{ + // MIDI髻ウ貅舌�ョ髢区叛 + midiOutClose(hMidi); +} + +void MAKO::reset_midi() +{ + // MIDI髻ウ貅舌�ョGS-RESET + BYTE gs_reset[11] = {0xf0, 0x41, 0x20, 0x42, 0x12, 0x40, 0x00, 0x7f, 0x00, 0x41, 0xf7}; + MIDIHDR mhMidi; + ZeroMemory(&mhMidi, sizeof(mhMidi)); + mhMidi.lpData = (LPSTR)gs_reset; + mhMidi.dwBufferLength = 11; + mhMidi.dwBytesRecorded = 11; + + midiOutPrepareHeader(hMidi, &mhMidi, sizeof(mhMidi)); + midiOutLongMsg(hMidi, &mhMidi, sizeof(mhMidi)); + while(!(mhMidi.dwFlags & MHDR_DONE)) { + SDL_Delay(10); + } + midiOutUnprepareHeader(hMidi, &mhMidi, sizeof(mhMidi)); +} + +void MAKO::send_2bytes(uint8 d1, uint8 d2) +{ + UNION_MIDI_DATA midi; + midi.data[0] = (BYTE)d1; + midi.data[1] = (BYTE)d2; + midiOutShortMsg(hMidi, midi.msg); +} + +void MAKO::send_3bytes(uint8 d1, uint8 d2, uint8 d3) +{ + UNION_MIDI_DATA midi; + midi.data[0] = (BYTE)d1; + midi.data[1] = (BYTE)d2; + midi.data[2] = (BYTE)d3; + midiOutShortMsg(hMidi, midi.msg); +}