I found a bug in the decoding of the ADPCM data - the nybbles in the samples were being processed backwards - MSN then LSN (bits 4-7, then 0-3), rather than LSN then MSN. Since ADPCM re-syncs every 8 samples, the audio was distorted but intelligable. With this fix, the audio is correct. I've tested this patch with Delorme's AAA MapNGo 4.0, which uses ADPCM for its audio files. NOTE: I didn't check the encoding routines, nor did I check the MSADPCM files to see if they were correct. Changelog: ADPCM nybble processing order was incorrect.
? console/Makefile ? controls/Makefile ? files/Makefile ? graphics/Makefile ? graphics/enhmetafiledrv/Makefile ? graphics/metafiledrv/Makefile ? graphics/win16drv/Makefile ? graphics/win16drv/prtdrv.glue.c ? graphics/x11drv/Makefile ? if1632/Makefile ? if1632/relay16.s ? libtest/Makefile ? loader/Makefile ? loader/ne/Makefile ? memory/Makefile ? misc/Makefile ? msdos/Makefile ? relay32/Makefile ? scheduler/Makefile ? win32/Makefile ? windows/Makefile ? windows/x11drv/Makefile ? windows/x11drv/wineclipsrv Index: dlls/msacm/imaadp32/imaadp32.c =================================================================== RCS file: /home/wine/wine/dlls/msacm/imaadp32/imaadp32.c,v retrieving revision 1.5 diff -r1.5 imaadp32.c 287c287 < process_nibble(*src >> 4, &stepIndexL, &sampleL); --- > process_nibble(*src, &stepIndexL, &sampleL); 289c289 < process_nibble(*src++, &stepIndexL, &sampleL); --- > process_nibble(*src++ >> 4, &stepIndexL, &sampleL); 294c294 < process_nibble(*src >> 4, &stepIndexR, &sampleR); --- > process_nibble(*src , &stepIndexR, &sampleR); 296c296 < process_nibble(*src++, &stepIndexR, &sampleR); --- > process_nibble(*src++ >>4, &stepIndexR, &sampleR); 338c338 < process_nibble(*src >> 4, &stepIndex, &sample); --- > process_nibble(*src, &stepIndex, &sample); 340c340 < process_nibble(*src++, &stepIndex, &sample); --- > process_nibble(*src++ >> 4, &stepIndex, &sample);