This pull request fixes Wine's MIDI synthesizer reset process to be the same as Windows'.
When playing Touhou Project games in MIDI BGM mode, the music playback becomes buggy when the BGM changes.
The video below is an example of an anomaly that occurs when playing The Fantastic Tales from Tono after playing Crystallized Silver in Touhou 7.
https://youtu.be/O69sndJ45Ag
Here's a correct example of The Fantastic Tales from Tono playback:
https://youtu.be/XlFAQEbbNDg
Piano sound is clearly missing on Wine.
This issue occurs due to an Wine's incorrect reset process for MIDI synthesizer.
When I ran FluidSynth on Windows and checked the log, I found that CC123 and CC121 were executed for each MIDI channel when switching songs.
CC123 means All Notes Off, CC121 means Reset All Controllers.
--
v4: winecoreaudio: Send All Notes Off and Reset Controllers.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8808
This pull request fixes Wine's MIDI synthesizer reset process to be the same as Windows'.
When playing Touhou Project games in MIDI BGM mode, the music playback becomes buggy when the BGM changes.
The video below is an example of an anomaly that occurs when playing The Fantastic Tales from Tono after playing Crystallized Silver in Touhou 7.
https://youtu.be/O69sndJ45Ag
Here's a correct example of The Fantastic Tales from Tono playback:
https://youtu.be/XlFAQEbbNDg
Piano sound is clearly missing on Wine.
This issue occurs due to an Wine's incorrect reset process for MIDI synthesizer.
When I ran FluidSynth on Windows and checked the log, I found that CC123 and CC121 were executed for each MIDI channel when switching songs.
CC123 means All Notes Off, CC121 means Reset All Controllers.
--
v3: winealsa: Send All Notes Off and Reset Controllers.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8808
Generally looks good, thanks! However, could you reword the commit message to be something like:
`winealsa: Send All Notes Off and Reset Controllers.` ?
Also, could you update the similar code in `winecoreaudio.drv/coremidi.c`? There, we already send 0x7b first, so it's just a question of replacing the 0x40 with a 0x79 and updating the comment. This change can go as a second commit in this same MR. I appreciate that you probably can't compile on macOS, but the CI will catch any errors in this trivial change.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8808#note_113589
Supersedes https://gitlab.winehq.org/wine/wine/-/merge_requests/8338
The header cannot seem to be generated easily from an IDL, gameinput has some unfortunate versioning which reuses the same identifiers across versions, in an incompatible way and sometimes sharing only a subset of them (for instance enum values), and uses C++ namespaces to separate versions.
The implementation needs to support every interface version at the same time, which is implemented by wrapping identifiers and adding version suffixes whenever it is included by the implementing code. The tests are also using that so we can tests multiple versions in the same file.
--
v6: dinput/tests: Add some gameinput tests.
gameinput: Introduce new DLL.
include: Add gameinput.idl.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8733
--
v2: widl: Introduce a new append_declspec helper.
widl: Inline write_args into write_type_right.
widl: Cleanup indentation and variables in write_type_right.
widl: Remove now unnecessary write_callconv argument.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8814
Supersedes https://gitlab.winehq.org/wine/wine/-/merge_requests/8338
The header cannot seem to be generated easily from an IDL, gameinput has some unfortunate versioning which reuses the same identifiers across versions, in an incompatible way and sometimes sharing only a subset of them (for instance enum values), and uses C++ namespaces to separate versions.
The implementation needs to support every interface version at the same time, which is implemented by wrapping identifiers and adding version suffixes whenever it is included by the implementing code. The tests are also using that so we can tests multiple versions in the same file.
--
v4: dinput/tests: Add some gameinput tests.
gameinput: Introduce new DLL.
include: Add gameinput.idl.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8733
--
v2: win32u: Always pass class name atom strings to wineserver.
server: Support integral atom strings.
win32u: Introduce helpers to check desktop and message class.
user32: Use init_class_name(_ansi) in FindWindowEx(A|W).
win32u: Forbid setting GCW_ATOM class info.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8486