From: Yuxuan Shui yshui@codeweavers.com
Besides a seq track and a tempo track, Windows also adds a "fake" band track to segments loaded from MIDI files, which handles soundfont loading etc. --- dlls/dmime/tests/bogus.mid | Bin 0 -> 163 bytes dlls/dmime/tests/dmime.c | 44 +++++++++++++++++++++++++++++++++++ dlls/dmime/tests/resource.rc | 4 ++++ dlls/dmime/tests/test.mid | Bin 0 -> 163 bytes 4 files changed, 48 insertions(+) create mode 100644 dlls/dmime/tests/bogus.mid create mode 100644 dlls/dmime/tests/test.mid
diff --git a/dlls/dmime/tests/bogus.mid b/dlls/dmime/tests/bogus.mid new file mode 100644 index 0000000000000000000000000000000000000000..5b88aab0f072af1de6a55edf835ee563b136c08c GIT binary patch literal 163 zcmeYb$w*;fU|?flWME=^;2Tnu4dmr8{AXqj$V|-3XZRn%!onoM!SFwl2`KSDkePj< z0>g$%1_q$6RG>Z{hLn1S)Ov;k3=A9CQy91$7@`>%Vu30Z85tNR*aS4n+b}SqQw+`l b?e;bd49*OU|MeN5mP#O53b71m1V|nLi8myh
literal 0 HcmV?d00001
diff --git a/dlls/dmime/tests/dmime.c b/dlls/dmime/tests/dmime.c index 218dc01045d..eaeff2e86bc 100644 --- a/dlls/dmime/tests/dmime.c +++ b/dlls/dmime/tests/dmime.c @@ -1554,6 +1554,49 @@ static void test_segment(void) while (IDirectMusicSegment_Release(dms)); }
+static void test_midi(void) +{ + IDirectMusicSegment8 *segment = NULL; + IDirectMusicTrack *track = NULL; + IDirectMusicLoader8 *loader; + WCHAR test_mid[MAX_PATH], bogus_mid[MAX_PATH]; + HRESULT hr; + + load_resource(L"test.mid", test_mid); + /* This is a MIDI file with wrong track length. */ + load_resource(L"bogus.mid", bogus_mid); + + hr = CoCreateInstance(&CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC_SERVER, + &IID_IDirectMusicLoader8, (void **)&loader); + ok(hr == S_OK, "got %#lx\n", hr); + hr = IDirectMusicLoader8_LoadObjectFromFile(loader, &CLSID_DirectMusicSegment, + &IID_IDirectMusicSegment, test_mid, (void **)&segment); + ok(hr == S_OK, "got %#lx\n", hr); + + /* test.mid has 1 seq track, 1 tempo track, and 1 band track */ + hr = IDirectMusicSegment8_GetTrack(segment, &CLSID_DirectMusicBandTrack, 0xffffffff, 0, &track); + todo_wine ok(hr == S_OK, "unable to get band track from midi file: %#lx\n", hr); + if (track)IDirectMusicTrack_Release(track); + track = NULL; + hr = IDirectMusicSegment8_GetTrack(segment, &CLSID_DirectMusicSeqTrack, 0xffffffff, 0, &track); + todo_wine ok(hr == S_OK, "got %#lx\n", hr); + if (track) IDirectMusicTrack_Release(track); + track = NULL; + hr = IDirectMusicSegment8_GetTrack(segment, &CLSID_DirectMusicTempoTrack, 0xffffffff, 0, &track); + todo_wine ok(hr == S_OK, "got %#lx\n", hr); + if (track) IDirectMusicTrack_Release(track); + track = NULL; + if (segment) IDirectMusicSegment8_Release(segment); + segment = NULL; + + hr = IDirectMusicLoader8_LoadObjectFromFile(loader, &CLSID_DirectMusicSegment, + &IID_IDirectMusicSegment, bogus_mid, (void **)&segment); + ok(hr == S_OK, "got %#lx\n", hr); + if (segment) IDirectMusicSegment8_Release(segment); + + IDirectMusicLoader8_Release(loader); +} + static void _add_track(IDirectMusicSegment8 *seg, REFCLSID class, const char *name, DWORD group) { IDirectMusicTrack *track; @@ -4724,6 +4767,7 @@ START_TEST(dmime) test_audiopathconfig(); test_graph(); test_segment(); + test_midi(); test_gettrack(); test_segment_param(); test_track(); diff --git a/dlls/dmime/tests/resource.rc b/dlls/dmime/tests/resource.rc index d49b647b934..4d8f512af84 100644 --- a/dlls/dmime/tests/resource.rc +++ b/dlls/dmime/tests/resource.rc @@ -21,3 +21,7 @@ /* ffmpeg -f lavfi -i "sine=frequency=600" -t 0.1 -ar 44100 -f wav -acodec pcm_u8 test.wav */ /* @makedep: test.wav */ test.wav RCDATA test.wav +/* @makedep: test.mid */ +test.mid RCDATA test.mid +/* @makedep: bogus.mid */ +bogus.mid RCDATA bogus.mid diff --git a/dlls/dmime/tests/test.mid b/dlls/dmime/tests/test.mid new file mode 100644 index 0000000000000000000000000000000000000000..7a46eb85d11d61ba23528912e5ce9c6fd1a0e533 GIT binary patch literal 163 zcmeYb$w*;fU|?flWME=^;2Tnu4dmrA{AXqj$V|-3XZRn%!onoM!SFwl2`KSDkePj< z0>g$%1_q$6RG>Z{hLn1S)Ov;k3=A9CQy91$7@`>%Vu30Z85tNR*aS4n+b}SqQw+`l b?e;bd49*OU|MeN5mP#O53b71m1V|nLiNz$G
literal 0 HcmV?d00001