Akihiro Sagawa : midimap: Open lower devices when opening MIDI Mapper.
Alexandre Julliard
julliard at winehq.org
Mon Apr 9 15:41:09 CDT 2018
Module: wine
Branch: master
Commit: ec6bd187fe80a8e3109110398211658d6fb1030d
URL: https://source.winehq.org/git/wine.git/?a=commit;h=ec6bd187fe80a8e3109110398211658d6fb1030d
Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date: Thu Apr 5 00:40:44 2018 +0900
midimap: Open lower devices when opening MIDI Mapper.
Without this change, the lower device can't get a long message at the
beginning. The mapper didn't open it before receiving a short message
in modData function.
Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/midimap/midimap.c | 27 ++++++++++++++-------------
dlls/winmm/tests/midi.c | 2 +-
2 files changed, 15 insertions(+), 14 deletions(-)
diff --git a/dlls/midimap/midimap.c b/dlls/midimap/midimap.c
index 16707bb..1b35da7 100644
--- a/dlls/midimap/midimap.c
+++ b/dlls/midimap/midimap.c
@@ -283,13 +283,25 @@ static DWORD modOpen(DWORD_PTR *lpdwUser, LPMIDIOPENDESC lpDesc, DWORD dwFlags)
if (MIDIMAP_LoadSettings(mom))
{
+ UINT chn;
*lpdwUser = (DWORD_PTR)mom;
mom->self = mom;
-
mom->wCbFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK);
mom->midiDesc = *lpDesc;
- MIDIMAP_NotifyClient(mom, MOM_OPEN, 0L, 0L);
+ for (chn = 0; chn < 16; chn++)
+ {
+ if (mom->ChannelMap[chn]->loaded) continue;
+ if (midiOutOpen(&mom->ChannelMap[chn]->hMidi, mom->ChannelMap[chn]->uDevID,
+ 0L, 0L, CALLBACK_NULL) == MMSYSERR_NOERROR)
+ mom->ChannelMap[chn]->loaded = 1;
+ else
+ mom->ChannelMap[chn]->loaded = -1;
+ /* FIXME: should load here the IDF midi data... and allow channel and
+ * patch mappings
+ */
+ }
+ MIDIMAP_NotifyClient(mom, MOM_OPEN, 0L, 0L);
return MMSYSERR_NOERROR;
}
HeapFree(GetProcessHeap(), 0, mom);
@@ -381,17 +393,6 @@ static DWORD modData(MIDIMAPDATA* mom, DWORD_PTR dwParam)
case 0xC0:
case 0xD0:
case 0xE0:
- if (mom->ChannelMap[chn]->loaded == 0)
- {
- if (midiOutOpen(&mom->ChannelMap[chn]->hMidi, mom->ChannelMap[chn]->uDevID,
- 0L, 0L, CALLBACK_NULL) == MMSYSERR_NOERROR)
- mom->ChannelMap[chn]->loaded = 1;
- else
- mom->ChannelMap[chn]->loaded = -1;
- /* FIXME: should load here the IDF midi data... and allow channel and
- * patch mappings
- */
- }
if (mom->ChannelMap[chn]->loaded > 0)
{
/* change channel */
diff --git a/dlls/winmm/tests/midi.c b/dlls/winmm/tests/midi.c
index 763ed2f..4805123 100644
--- a/dlls/winmm/tests/midi.c
+++ b/dlls/winmm/tests/midi.c
@@ -461,7 +461,7 @@ static void test_midiOut_device(UINT udev, HWND hwnd)
trace("ShortMsg type %x (muted)\n", LOBYTE(LOWORD(e)));
rc = midiOutShortMsg(hm, e);
ok(!rc, "midiOutShortMsg rc=%s\n", mmsys_error(rc));
- /* FIXME (for MIDI Mapper): we shouldn't hear this voice due to volume settings */
+ /* We can't hear this voice due to volume settings */
if (!rc) Sleep(200);
rc = midiOutShortMsg(hm, 0x00004593); /* velocity 0 */
More information about the wine-cvs
mailing list