Commit graph

172 commits

Author SHA1 Message Date
Yuxuan Shui 28b94c4d42 dmime: Handle MIDI control events in MIDI files.
Adding them to the seqtrack, and also implementing playing them from the seqtrack.
2024-03-06 22:04:20 +01:00
Yuxuan Shui 5ff94358a0 dmime: Parse note on/off events and generate a seqtrack. 2024-03-06 22:04:20 +01:00
Yuxuan Shui 1df0e34293 dmime/tests: Call the correct QueryInterface function for DirectMusic track. 2024-03-06 22:04:20 +01:00
Yuxuan Shui f0fc4a0d89 dmime: Parse MIDI Set Tempo meta events and generate a tempotrack. 2024-03-01 23:14:22 +01:00
Yuxuan Shui 1b1f216278 dmime: Implement setting TempoParam for tempotracks.
And add some tests.
2024-03-01 23:14:22 +01:00
Yuxuan Shui 29f73d6669 dmime: Add a stub chordtrack for MIDI segments. 2024-02-28 21:56:24 +01:00
Yuxuan Shui 05347b9703 dmime: Parse MIDI program change events and generate a bandtrack. 2024-02-28 21:56:24 +01:00
Yuxuan Shui 5613917974 dmime/tests: Improve error reporting from expect_track.
Include a line number of the call site.
2024-02-22 12:45:55 +01:00
Yuxuan Shui 8710a1cb0a dmime: Read through a MIDI file.
Add a dummy track parser, that reads through MIDI tracks and events. To make sure we understand the
file structure correctly, no actual tracks or events are generated.

Also add test cases to make sure we read through a MIDI file correctly.
2024-02-22 12:45:52 +01:00
Yuxuan Shui 4434c17c94 dmime/tests: Add MIDI loading test.
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.
2024-02-14 20:54:18 +01:00
Eric Pouech 36d6fe591b dmime: Use sent duration in loop's playback.
When playing a loop, and if no end of loop point has been defined
(meaning = play whole segment), don't rely on segment's length for
wave tracks as their length is always 1.  Compute segment length in
this case by grabbing each track's playback length in segment state's
internal graph.  This feature is only activated for messages generated
by wave tracks, but could be extended if needed to other types of
messages.

Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-02-07 22:34:25 +01:00
Eric Pouech dfaa45069e dmime: Add IDirectMusicGraph interface to segment state.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-02-07 22:34:18 +01:00
Eric Pouech 425c270d27 dmime: Add tests about segment state's graph interface.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-02-07 22:34:17 +01:00
Eric Pouech ed92095f28 dmime: Fully implement IDirectMusicSegmentState::GetRepeats().
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-02-07 22:34:17 +01:00
Eric Pouech 8169c4d040 dmime/tests: Add some tests about end-points.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-01-29 10:42:48 +01:00
Eric Pouech b2441ad699 dmime/tests: Add some tests for loops on wave tracks.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-01-29 10:42:48 +01:00
Eric Pouech 7aef55a996 dmime/tests: Fix copy & paste errors.
Signed-off-by: Eric Pouech <epouech@codeweavers.com>
2024-01-29 10:42:48 +01:00
Yuxuan Shui e9a52308bb dmime: IDirectMusicPerformance::CreateAudioPath should fail when config is NULL. 2024-01-22 10:12:47 +01:00
Yuxuan Shui a300815c0f dmime: AudioPathConfig is not AudioPath.
AudioPaths are created from IDirectMusicPerformance::CreateAudioPath and CreateStandardAudioPath, and
don't have an IDirectMusicObject or an IPersistStream interface. On the other hand AudioPathConfigs
are loaded from files, and do have IDirectMusicObject and IPersistStream.

They were somehow confused with each other and implemented in the same struct, this commit fixes that.
2024-01-22 10:12:44 +01:00
Rémi Bernon 930776022d dmime/tests: Remove some unnecessary and spuriously failing waits.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55637
2023-12-22 18:14:53 +01:00
Rémi Bernon 3ad341b603 dmime/tests: Add optional notification sequence on segment stop.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55637
2023-12-22 18:14:53 +01:00
Rémi Bernon cbf48daecf dmime/tests: Allow small time variation in test_segment_state.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55637
2023-12-22 18:14:53 +01:00
Rémi Bernon 2f86a5d6cb dmime/tests: Allow small time variation in test_performance_time.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55637
2023-12-22 18:14:53 +01:00
Rémi Bernon 6447b11b17 dmime/tests: Check reference time and allow 0.5 tick difference.
Renaming check_music_time to check_reference_time, as it's truly
reference time values that are passed.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55637
2023-12-22 18:14:50 +01:00
Anton Baskanov bb7b49647b dmime: Requeue the note message instead of directly queueing MIDI note-off. 2023-11-23 22:51:07 +01:00
Anton Baskanov 433e0fc026 dmime/tests: Test output tool note requeueing. 2023-11-23 22:51:07 +01:00
Anton Baskanov fd3607ed57 dmime/tests: Move scale_music_time() and check_dmus_note_pmsg() up. 2023-11-23 22:51:07 +01:00
Michael Stefaniuc e283883057 dmime/tests: Remove superfluous casts to self. 2023-11-14 11:31:27 +01:00
Rémi Bernon 2414bb4004 dmime: Clear all pending messages in IDirectMusicPerformance_Stop. 2023-11-13 22:37:51 +01:00
Rémi Bernon fe171ec86b dmime/tests: Test that IDirectMusicPerformance_Stop clears messages. 2023-11-13 22:37:51 +01:00
Rémi Bernon ddd877d1c7 dmime/tests: Avoid discarding old notifications in test. 2023-11-13 22:37:51 +01:00
Rémi Bernon 18a81b3cb2 dmime: Better implement performance times with tempo track. 2023-11-09 23:00:40 +01:00
Rémi Bernon 8f9faf8868 dmime/tests: Test playing tempo track effect on performance times. 2023-11-09 23:00:40 +01:00
Rémi Bernon c6eca9276b dmime/tests: Add helpers to scale and check music time with tempo.
Be flexible on the comparison to ignore rounding errors.
2023-11-09 23:00:40 +01:00
Rémi Bernon 2d1f46c221 dmime: Fix tempo track GetParam with GUID_TempoParam implementation. 2023-11-09 23:00:40 +01:00
Rémi Bernon 92959b315b dmime/tests: Test tempo track GetParam with GUID_TempoParam. 2023-11-09 23:00:40 +01:00
Rémi Bernon 7a9e45ac13 dmime/tests: Test tempo track Play and DMUS_PMSGT_TEMPO messages. 2023-11-09 23:00:40 +01:00
Rémi Bernon f13fa16f01 dmime: Implement IDirectMusicPerformance_GetSegmentState semi-stub. 2023-11-09 23:00:40 +01:00
Rémi Bernon 617d7fc9b8 dmime/tests: Test IDirectMusicPerformance_GetSegmentState. 2023-11-09 23:00:40 +01:00
Rémi Bernon 442db8a131 dmime: Send notification messages from segment_play_chunk. 2023-11-07 23:00:10 +01:00
Rémi Bernon b1bd72343e dmime/tests: Check more notification / dirty messages fields. 2023-11-06 21:37:54 +01:00
Rémi Bernon a66b6f96b6 dmime: Send DMUS_NOTIFICATION_SEGALMOSTEND before DMUS_NOTIFICATION_SEGEND. 2023-11-06 21:37:54 +01:00
Rémi Bernon a429a3fb4b dmime/tests: Add a track and longer segment to notifications tests. 2023-11-06 21:37:54 +01:00
Alexandre Julliard 7ccb5df0fc makefiles: Always use the global SOURCES variable for .rc files. 2023-11-01 22:43:56 +01:00
Rémi Bernon bbdea3afc3 dmime/tests: Ignore failure on missing gm.dls in test_band_track_play.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55722
2023-10-25 14:27:15 -05:00
Rémi Bernon b971c55a3a dmime/tests: Avoid checking message segment state reference count. 2023-10-25 14:27:15 -05:00
Rémi Bernon 3e31e29d65 dmime/tests: Remove flaky track playing state test.
This fails regularly on Win7.
2023-10-25 14:27:13 -05:00
Rémi Bernon e3b23cb66e dmime: Implement band track IDirectMusicTrack_Play. 2023-10-13 09:59:24 +02:00
Rémi Bernon fd68076c36 dmime: Implement sequence track IDirectMusicTrack_Play. 2023-10-13 09:59:24 +02:00
Rémi Bernon edad780922 dmime: Implement IDirectMusicTrack_Play for the wave track.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=9027
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=34751
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45135
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48220
2023-10-11 22:17:26 +02:00