https://bugs.winehq.org/show_bug.cgi?id=50515
--- Comment #2 from Sagawa sagawa.aki+winebugs@gmail.com --- I can confirm SofTalk 1.56 ignores returned mmtime.wType value. It doesn't test mmtime.wType value after waveOutGetPosition call, and the duration referred from 0043078B is expressed in bytes.
Here is disassembly: 0043075A | mov ecx,6 | ZeroMemory(&mmtime, sizeof(MMTIME)) 0043075F | xor eax,eax | 00430761 | lea edi,dword ptr ss:[ebp-2C] | 00430764 | rep stosd | 00430766 | lea ecx,dword ptr ss:[ebp-2C] | set &mmtime to ECX 00430769 | push 18 | sizeof(MMTIME) 0043076B | push ecx | LPMMTIME &mmtime 0043076C | push edx | HWAVEOUT 0043076D | mov dword ptr ss:[ebp-30],ebx | 00430770 | mov dword ptr ss:[ebp-2C],1 | mmtime.wType = TIME_MS 00430777 | call softalk.40A8A0 | waveOutGetPosition 0043077C | mov edi,eax | 0043077E | call dword ptr ds:[<&__vbaSetSystemErro | 00430784 | cmp edi,ebx | 00430786 | jne softalk.43079A | 00430788 | mov ecx,dword ptr ss:[ebp-28] | mmtime.u.cb (or mmtime.u.ms) 0043078B | mov edx,dword ptr ds:[esi+74] | duration in bytes 0043078E | xor eax,eax | 00430790 | cmp ecx,edx | compare... 00430792 | setl al | 00430795 | neg eax | make Visual Basic Boolean 00430797 | mov dword ptr ss:[ebp-30],eax | store the result to local var. 0043079A | mov eax,dword ptr ss:[ebp+8] | 0043079D | push eax | 0043079E | mov edx,dword ptr ds:[eax] | 004307A0 | call dword ptr ds:[edx+8] | call BASIC_CLASS_Release 004307A3 | mov eax,dword ptr ss:[ebp+C] | 004307A6 | mov cx,word ptr ss:[ebp-30] | 004307AA | mov word ptr ds:[eax],cx | copy the result to the arg.