From 778bfd679b10fe9fda1845b547dddf0f5ccfd207 Mon Sep 17 00:00:00 2001 From: Randy Heit Date: Fri, 8 Feb 2013 00:38:07 +0000 Subject: [PATCH] Update DUMB to revision 71ecdc7274a7fa33af0a0dea915eb3a294b0b04a - Fixed IT stereo samples SVN r4089 (trunk) --- dumb/include/internal/it.h | 4 +++- dumb/src/it/itread.c | 37 +++++++++++++++++++++++++++++-------- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/dumb/include/internal/it.h b/dumb/include/internal/it.h index 0c8bf144c..74a08d567 100644 --- a/dumb/include/internal/it.h +++ b/dumb/include/internal/it.h @@ -54,7 +54,7 @@ sigdata->flags & IT_COMPATIBLE_GXX * handle ambiguities in the format specification. The correct code in each * case will be determined most likely by experimentation. */ -#define STEREO_SAMPLES_COUNT_AS_TWO +//#define STEREO_SAMPLES_COUNT_AS_TWO #define INVALID_ORDERS_END_SONG #define INVALID_NOTES_CAUSE_NOTE_CUT #define SUSTAIN_LOOP_OVERRIDES_NORMAL_LOOP @@ -899,4 +899,6 @@ void _dumb_it_ptm_convert_effect(int effect, int value, IT_ENTRY *entry); int32 _dumb_it_read_sample_data_adpcm4(IT_SAMPLE *sample, DUMBFILE *f); +void _dumb_it_interleave_stereo_sample(IT_SAMPLE *sample); + #endif /* INTERNAL_IT_H */ diff --git a/dumb/src/it/itread.c b/dumb/src/it/itread.c index 5b7432060..12cd6828b 100644 --- a/dumb/src/it/itread.c +++ b/dumb/src/it/itread.c @@ -684,15 +684,36 @@ static int32 it_read_sample_data(int cmwt, IT_SAMPLE *sample, unsigned char conv else decompress8(f, sample->data, datasize, ((cmwt >= 0x215) && (convert & 4))); } else if (sample->flags & IT_SAMPLE_16BIT) { - if (convert & 2) + if (sample->flags & IT_SAMPLE_STEREO) { + if (convert & 2) { + for (n = 0; n < datasize; n += 2) + ((short *)sample->data)[n] = dumbfile_mgetw(f); + for (n = 1; n < datasize; n += 2) + ((short *)sample->data)[n] = dumbfile_mgetw(f); + } else { + for (n = 0; n < datasize; n += 2) + ((short *)sample->data)[n] = dumbfile_igetw(f); + for (n = 1; n < datasize; n += 2) + ((short *)sample->data)[n] = dumbfile_igetw(f); + } + } else { + if (convert & 2) + for (n = 0; n < datasize; n++) + ((short *)sample->data)[n] = dumbfile_mgetw(f); + else + for (n = 0; n < datasize; n++) + ((short *)sample->data)[n] = dumbfile_igetw(f); + } + } else { + if (sample->flags & IT_SAMPLE_STEREO) { + for (n = 0; n < datasize; n += 2) + ((signed char *)sample->data)[n] = dumbfile_getc(f); + for (n = 1; n < datasize; n += 2) + ((signed char *)sample->data)[n] = dumbfile_getc(f); + } else for (n = 0; n < datasize; n++) - ((short *)sample->data)[n] = dumbfile_mgetw(f); - else - for (n = 0; n < datasize; n++) - ((short *)sample->data)[n] = dumbfile_igetw(f); - } else - for (n = 0; n < datasize; n++) - ((signed char *)sample->data)[n] = dumbfile_getc(f); + ((signed char *)sample->data)[n] = dumbfile_getc(f); + } if (dumbfile_error(f)) return -1;