Hi, One thing to note is a slight change when Prepare is called twice in a row.
When the ACM is used, the former Wine code would prepare the ACM again, leaking the memory of the previous preparation. Now that code is by-passed as the header is prepared exactly once, the first time. What if the app changes dwBufferLength in between? We don't know what exactly native does. My tests only show that *some* code is by-passed, because when WHDR_PREPARE is found already set, the other flags are not repeatedly cleared. All calls return NOERROR. The 16 bit code has a comment http://source.winehq.org/source/dlls/mmsystem.dll16/message16.c#L430 > /* dwBufferLength can be reduced between prepare & write */ > if (... && wh32->dwBufferLength < wh16->dwBufferLength) { I've checked neither - what native does in that case when the ACM is involved, nor - how Wine drives the ACM in that case. It's reasonable to assume that only dwBufferLength at the time of waveOutWrite should be relevant. Let's hope that dwBufferLength from the time of Prepare doesn't matter in Wine's 32 bit ACM. Regards, Jörg Höhle