gosu 1.4.4 → 1.4.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/dependencies/SDL/include/SDL.h +1 -0
- data/dependencies/SDL/include/SDL_assert.h +4 -2
- data/dependencies/SDL/include/SDL_atomic.h +20 -0
- data/dependencies/SDL/include/SDL_audio.h +40 -4
- data/dependencies/SDL/include/SDL_blendmode.h +4 -6
- data/dependencies/SDL/include/SDL_clipboard.h +47 -0
- data/dependencies/SDL/include/SDL_config.h +71 -45
- data/dependencies/SDL/include/SDL_cpuinfo.h +39 -4
- data/dependencies/SDL/include/SDL_egl.h +59 -9
- data/dependencies/SDL/include/SDL_endian.h +34 -3
- data/dependencies/SDL/include/SDL_events.h +32 -1
- data/dependencies/SDL/include/SDL_filesystem.h +5 -1
- data/dependencies/SDL/include/SDL_gamecontroller.h +78 -5
- data/dependencies/SDL/include/SDL_guid.h +100 -0
- data/dependencies/SDL/include/SDL_hints.h +645 -43
- data/dependencies/SDL/include/SDL_joystick.h +127 -7
- data/dependencies/SDL/include/SDL_keyboard.h +38 -1
- data/dependencies/SDL/include/SDL_keycode.h +6 -1
- data/dependencies/SDL/include/SDL_log.h +2 -2
- data/dependencies/SDL/include/SDL_main.h +42 -2
- data/dependencies/SDL/include/SDL_metal.h +2 -1
- data/dependencies/SDL/include/SDL_mouse.h +12 -1
- data/dependencies/SDL/include/SDL_opengl.h +0 -51
- data/dependencies/SDL/include/SDL_opengl_glext.h +2260 -231
- data/dependencies/SDL/include/SDL_opengles2_gl2.h +374 -339
- data/dependencies/SDL/include/SDL_opengles2_gl2ext.h +3479 -1496
- data/dependencies/SDL/include/SDL_opengles2_gl2platform.h +6 -9
- data/dependencies/SDL/include/SDL_opengles2_khrplatform.h +43 -14
- data/dependencies/SDL/include/SDL_platform.h +32 -6
- data/dependencies/SDL/include/SDL_rect.h +154 -2
- data/dependencies/SDL/include/SDL_render.h +46 -17
- data/dependencies/SDL/include/SDL_revision.h +6 -1
- data/dependencies/SDL/include/SDL_rwops.h +1 -15
- data/dependencies/SDL/include/SDL_scancode.h +46 -21
- data/dependencies/SDL/include/SDL_sensor.h +24 -3
- data/dependencies/SDL/include/SDL_stdinc.h +119 -8
- data/dependencies/SDL/include/SDL_surface.h +3 -1
- data/dependencies/SDL/include/SDL_system.h +66 -6
- data/dependencies/SDL/include/SDL_syswm.h +2 -0
- data/dependencies/SDL/include/SDL_test_common.h +1 -0
- data/dependencies/SDL/include/SDL_test_font.h +90 -3
- data/dependencies/SDL/include/SDL_thread.h +3 -3
- data/dependencies/SDL/include/SDL_touch.h +8 -0
- data/dependencies/SDL/include/SDL_version.h +19 -3
- data/dependencies/SDL/include/SDL_video.h +71 -9
- data/dependencies/SDL/include/begin_code.h +4 -4
- data/dependencies/SDL/lib/x64/libSDL2.dll.a +0 -0
- data/dependencies/SDL/lib/x86/libSDL2.dll.a +0 -0
- data/dependencies/SDL_sound/SDL_sound.c +210 -71
- data/dependencies/SDL_sound/SDL_sound.h +1 -1
- data/dependencies/SDL_sound/SDL_sound_coreaudio.c +111 -168
- data/dependencies/SDL_sound/SDL_sound_flac.c +0 -6
- data/dependencies/SDL_sound/SDL_sound_internal.h +27 -5
- data/dependencies/SDL_sound/SDL_sound_modplug.c +20 -8
- data/dependencies/SDL_sound/SDL_sound_mp3.c +11 -7
- data/dependencies/SDL_sound/SDL_sound_raw.c +1 -1
- data/dependencies/SDL_sound/SDL_sound_shn.c +1 -5
- data/dependencies/SDL_sound/SDL_sound_voc.c +1 -1
- data/dependencies/SDL_sound/SDL_sound_vorbis.c +2 -4
- data/dependencies/SDL_sound/SDL_sound_wav.c +44 -20
- data/dependencies/SDL_sound/dr_flac.h +237 -95
- data/dependencies/SDL_sound/dr_mp3.h +46 -33
- data/dependencies/SDL_sound/libmodplug/fastmix.c +53 -39
- data/dependencies/SDL_sound/libmodplug/libmodplug.h +0 -12
- data/dependencies/SDL_sound/libmodplug/load_669.c +37 -32
- data/dependencies/SDL_sound/libmodplug/load_amf.c +57 -44
- data/dependencies/SDL_sound/libmodplug/load_ams.c +127 -100
- data/dependencies/SDL_sound/libmodplug/load_dbm.c +40 -37
- data/dependencies/SDL_sound/libmodplug/load_dmf.c +61 -49
- data/dependencies/SDL_sound/libmodplug/load_dsm.c +18 -13
- data/dependencies/SDL_sound/libmodplug/load_far.c +31 -24
- data/dependencies/SDL_sound/libmodplug/load_gdm.c +27 -21
- data/dependencies/SDL_sound/libmodplug/load_it.c +106 -91
- data/dependencies/SDL_sound/libmodplug/load_mdl.c +43 -35
- data/dependencies/SDL_sound/libmodplug/load_med.c +66 -52
- data/dependencies/SDL_sound/libmodplug/load_mod.c +30 -26
- data/dependencies/SDL_sound/libmodplug/load_mt2.c +61 -50
- data/dependencies/SDL_sound/libmodplug/load_mtm.c +23 -17
- data/dependencies/SDL_sound/libmodplug/load_okt.c +18 -16
- data/dependencies/SDL_sound/libmodplug/load_psm.c +44 -32
- data/dependencies/SDL_sound/libmodplug/load_ptm.c +18 -14
- data/dependencies/SDL_sound/libmodplug/load_s3m.c +59 -53
- data/dependencies/SDL_sound/libmodplug/load_stm.c +23 -18
- data/dependencies/SDL_sound/libmodplug/load_ult.c +33 -29
- data/dependencies/SDL_sound/libmodplug/load_xm.c +64 -57
- data/dependencies/SDL_sound/libmodplug/mmcmp.c +2 -1
- data/dependencies/SDL_sound/libmodplug/snd_dsp.c +30 -20
- data/dependencies/SDL_sound/libmodplug/snd_flt.c +6 -4
- data/dependencies/SDL_sound/libmodplug/snd_fx.c +91 -65
- data/dependencies/SDL_sound/libmodplug/sndfile.c +91 -66
- data/dependencies/SDL_sound/libmodplug/sndmix.c +58 -35
- data/dependencies/SDL_sound/stb_vorbis.h +14 -9
- data/dependencies/mojoAL/mojoal.c +41 -24
- data/dependencies/utf8proc/utf8proc.c +1 -1
- data/dependencies/utf8proc/utf8proc.h +1 -1
- data/dependencies/utf8proc/utf8proc_data.h +3366 -3184
- data/include/Gosu/Version.hpp +1 -1
- data/lib/SDL2.dll +0 -0
- data/lib64/SDL2.dll +0 -0
- data/src/RubyGosu.cxx +1 -1
- data/src/Window.cpp +6 -4
- metadata +3 -2
@@ -49,8 +49,10 @@ CSoundFile *new_CSoundFile(LPCBYTE lpStream, DWORD dwMemLength, const ModPlug_Se
|
|
49
49
|
//----------------------------------------------------------
|
50
50
|
{
|
51
51
|
int i;
|
52
|
+
CSoundFile *_this;
|
53
|
+
MODINSTRUMENT *pins;
|
52
54
|
|
53
|
-
|
55
|
+
_this = (CSoundFile *) SDL_calloc(1, sizeof (CSoundFile));
|
54
56
|
if (!_this) return NULL;
|
55
57
|
|
56
58
|
_this->m_nXBassDepth = 6;
|
@@ -78,11 +80,11 @@ CSoundFile *new_CSoundFile(LPCBYTE lpStream, DWORD dwMemLength, const ModPlug_Se
|
|
78
80
|
_this->m_nSongPreAmp = 0x30;
|
79
81
|
SDL_memset(_this->Order, 0xFF, sizeof(_this->Order));
|
80
82
|
CSoundFile_ResetMidiCfg(_this);
|
81
|
-
for (
|
82
|
-
for (
|
83
|
+
for (i=0; i<MAX_PATTERNS; i++) _this->PatternSize[i] = 64;
|
84
|
+
for (i=0; i<MAX_BASECHANNELS; i++)
|
83
85
|
{
|
84
|
-
_this->ChnSettings[
|
85
|
-
_this->ChnSettings[
|
86
|
+
_this->ChnSettings[i].nPan = 128;
|
87
|
+
_this->ChnSettings[i].nVolume = 64;
|
86
88
|
}
|
87
89
|
if (lpStream)
|
88
90
|
{
|
@@ -129,7 +131,7 @@ CSoundFile *new_CSoundFile(LPCBYTE lpStream, DWORD dwMemLength, const ModPlug_Se
|
|
129
131
|
_this->Chn[i].nCutOff = 0x7F;
|
130
132
|
}
|
131
133
|
// Checking instruments
|
132
|
-
|
134
|
+
pins = _this->Ins;
|
133
135
|
|
134
136
|
for (i=0; i<MAX_INSTRUMENTS; i++, pins++)
|
135
137
|
{
|
@@ -269,6 +271,7 @@ void CSoundFile_FreeSample(LPVOID p)
|
|
269
271
|
void CSoundFile_ResetMidiCfg(CSoundFile *_this)
|
270
272
|
//-----------------------------
|
271
273
|
{
|
274
|
+
int iz;
|
272
275
|
SDL_memset(&_this->m_MidiCfg, 0, sizeof(_this->m_MidiCfg));
|
273
276
|
SDL_strlcpy(&_this->m_MidiCfg.szMidiGlb[MIDIOUT_START*32], "FF", 32);
|
274
277
|
SDL_strlcpy(&_this->m_MidiCfg.szMidiGlb[MIDIOUT_STOP*32], "FC", 32);
|
@@ -276,7 +279,7 @@ void CSoundFile_ResetMidiCfg(CSoundFile *_this)
|
|
276
279
|
SDL_strlcpy(&_this->m_MidiCfg.szMidiGlb[MIDIOUT_NOTEOFF*32], "9c n 0", 32);
|
277
280
|
SDL_strlcpy(&_this->m_MidiCfg.szMidiGlb[MIDIOUT_PROGRAM*32], "Cc p", 32);
|
278
281
|
SDL_strlcpy(&_this->m_MidiCfg.szMidiSFXExt[0], "F0F000z", 32);
|
279
|
-
for (
|
282
|
+
for (iz=0; iz<16; iz++) SDL_snprintf(&_this->m_MidiCfg.szMidiZXXExt[iz*32], 32, "F0F001%02X", iz*8);
|
280
283
|
}
|
281
284
|
|
282
285
|
|
@@ -339,7 +342,7 @@ UINT CSoundFile_GetMaxPosition(CSoundFile *_this)
|
|
339
342
|
void CSoundFile_SetCurrentPos(CSoundFile *_this, UINT nPos)
|
340
343
|
//---------------------------------------
|
341
344
|
{
|
342
|
-
UINT i, nPattern;
|
345
|
+
UINT i, nPattern, nRow;
|
343
346
|
|
344
347
|
for (i=0; i<MAX_CHANNELS; i++)
|
345
348
|
{
|
@@ -408,7 +411,7 @@ void CSoundFile_SetCurrentPos(CSoundFile *_this, UINT nPos)
|
|
408
411
|
nPos = 0;
|
409
412
|
nPattern = 0;
|
410
413
|
}
|
411
|
-
|
414
|
+
nRow = nPos;
|
412
415
|
if ((nRow) && (_this->Order[nPattern] < MAX_PATTERNS))
|
413
416
|
{
|
414
417
|
MODCOMMAND *p = _this->Patterns[_this->Order[nPattern]];
|
@@ -418,7 +421,8 @@ void CSoundFile_SetCurrentPos(CSoundFile *_this, UINT nPos)
|
|
418
421
|
while ((!bOk) && (nRow > 0))
|
419
422
|
{
|
420
423
|
UINT n = nRow * _this->m_nChannels;
|
421
|
-
|
424
|
+
UINT k=0;
|
425
|
+
for (; k<_this->m_nChannels; k++, n++)
|
422
426
|
{
|
423
427
|
if (p[n].note)
|
424
428
|
{
|
@@ -453,7 +457,7 @@ void CSoundFile_SetCurrentPos(CSoundFile *_this, UINT nPos)
|
|
453
457
|
UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags, LPCSTR lpMemFile, DWORD dwMemLength)
|
454
458
|
//------------------------------------------------------------------------------
|
455
459
|
{
|
456
|
-
UINT len = 0, mem;
|
460
|
+
UINT len = 0, j, mem;
|
457
461
|
|
458
462
|
// Disable >2Gb samples,(preventing buffer overflow in AllocateSample)
|
459
463
|
if ((!pIns) || ((int)pIns->nLength < 4) || (!lpMemFile)) return 0;
|
@@ -480,23 +484,26 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
480
484
|
// 1: 8-bit unsigned PCM data
|
481
485
|
case RS_PCM8U:
|
482
486
|
{
|
487
|
+
signed char *pSample;
|
483
488
|
len = pIns->nLength;
|
484
489
|
if (len > dwMemLength) len = pIns->nLength = dwMemLength;
|
485
|
-
|
486
|
-
for (
|
490
|
+
pSample = pIns->pSample;
|
491
|
+
for (j=0; j<len; j++) pSample[j] = (signed char)(lpMemFile[j] - 0x80);
|
487
492
|
}
|
488
493
|
break;
|
489
494
|
|
490
495
|
// 2: 8-bit ADPCM data with linear table
|
491
496
|
case RS_PCM8D:
|
492
497
|
{
|
498
|
+
signed char *pSample;
|
499
|
+
const signed char *p;
|
500
|
+
int delta = 0;
|
493
501
|
len = pIns->nLength;
|
494
502
|
if (len > dwMemLength) break;
|
495
|
-
|
496
|
-
|
497
|
-
int delta = 0;
|
503
|
+
pSample = pIns->pSample;
|
504
|
+
p = (const signed char *)lpMemFile;
|
498
505
|
|
499
|
-
for (
|
506
|
+
for (j=0; j<len; j++)
|
500
507
|
{
|
501
508
|
delta += p[j];
|
502
509
|
*pSample++ = (signed char)delta;
|
@@ -507,13 +514,15 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
507
514
|
// 3: 4-bit ADPCM data
|
508
515
|
case RS_ADPCM4:
|
509
516
|
{
|
517
|
+
signed char *pSample;
|
518
|
+
signed char delta;
|
510
519
|
len = (pIns->nLength + 1) / 2;
|
511
520
|
if (len > dwMemLength - 16 || dwMemLength < 16) break;
|
512
521
|
SDL_memcpy(_this->CompressionTable, lpMemFile, 16);
|
513
522
|
lpMemFile += 16;
|
514
|
-
|
515
|
-
|
516
|
-
for (
|
523
|
+
pSample = pIns->pSample;
|
524
|
+
delta = 0;
|
525
|
+
for (j=0; j<len; j++)
|
517
526
|
{
|
518
527
|
const BYTE b0 = (BYTE)lpMemFile[j];
|
519
528
|
const BYTE b1 = (BYTE)(lpMemFile[j] >> 4);
|
@@ -530,12 +539,13 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
530
539
|
// 4: 16-bit ADPCM data with linear table
|
531
540
|
case RS_PCM16D:
|
532
541
|
{
|
542
|
+
int16_t *pSample, *p;
|
543
|
+
int delta16 = 0;
|
533
544
|
len = pIns->nLength * 2;
|
534
545
|
if (len > dwMemLength) break;
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
for (UINT j=0; j<len; j+=2)
|
546
|
+
pSample = (int16_t *)pIns->pSample;
|
547
|
+
p = (int16_t *)lpMemFile;
|
548
|
+
for (j=0; j<len; j+=2)
|
539
549
|
{
|
540
550
|
delta16 += bswapLE16(*p++);
|
541
551
|
*pSample++ = (int16_t )delta16;
|
@@ -546,10 +556,11 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
546
556
|
// 5: 16-bit signed PCM data
|
547
557
|
case RS_PCM16S:
|
548
558
|
{
|
559
|
+
int16_t *pSample;
|
549
560
|
len = pIns->nLength * 2;
|
550
561
|
if (len <= dwMemLength) SDL_memcpy(pIns->pSample, lpMemFile, len);
|
551
|
-
|
552
|
-
for (
|
562
|
+
pSample = (int16_t *)pIns->pSample;
|
563
|
+
for (j=0; j<len; j+=2)
|
553
564
|
{
|
554
565
|
int16_t rawSample = *pSample;
|
555
566
|
*pSample++ = bswapLE16(rawSample);
|
@@ -565,7 +576,7 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
565
576
|
{
|
566
577
|
signed char *pSample = (signed char *)pIns->pSample;
|
567
578
|
signed char *pSrc = (signed char *)lpMemFile;
|
568
|
-
for (
|
579
|
+
for (j=0; j<len; j+=2)
|
569
580
|
{
|
570
581
|
// pSample[j] = pSrc[j+1];
|
571
582
|
// pSample[j+1] = pSrc[j];
|
@@ -577,11 +588,12 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
577
588
|
// 6: 16-bit unsigned PCM data
|
578
589
|
case RS_PCM16U:
|
579
590
|
{
|
591
|
+
int16_t *pSample, *pSrc;
|
580
592
|
len = pIns->nLength * 2;
|
581
593
|
if (len > dwMemLength) break;
|
582
|
-
|
583
|
-
|
584
|
-
for (
|
594
|
+
pSample = (int16_t *)pIns->pSample;
|
595
|
+
pSrc = (int16_t *)lpMemFile;
|
596
|
+
for (j=0; j<len; j+=2) *pSample++ = bswapLE16(*(pSrc++)) - 0x8000;
|
585
597
|
}
|
586
598
|
break;
|
587
599
|
|
@@ -592,7 +604,7 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
592
604
|
{
|
593
605
|
signed char *pSample = (signed char *)pIns->pSample;
|
594
606
|
signed char *pSrc = (signed char *)lpMemFile;
|
595
|
-
for (
|
607
|
+
for (j=0; j<len; j+=2)
|
596
608
|
{
|
597
609
|
// pSample[j*2] = pSrc[j+1];
|
598
610
|
// pSample[j*2+1] = pSrc[j];
|
@@ -611,12 +623,13 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
611
623
|
case RS_STPCM8D:
|
612
624
|
{
|
613
625
|
int iadd_l = 0, iadd_r = 0;
|
626
|
+
signed char *psrc,*pSample;
|
614
627
|
if (nFlags == RS_STPCM8U) { iadd_l = iadd_r = -128; }
|
615
628
|
len = pIns->nLength;
|
616
|
-
|
617
|
-
|
629
|
+
psrc = (signed char *)lpMemFile;
|
630
|
+
pSample = (signed char *)pIns->pSample;
|
618
631
|
if (len*2 > dwMemLength) break;
|
619
|
-
for (
|
632
|
+
for (j=0; j<len; j++)
|
620
633
|
{
|
621
634
|
pSample[j*2] = (signed char)(psrc[0] + iadd_l);
|
622
635
|
pSample[j*2+1] = (signed char)(psrc[len] + iadd_r);
|
@@ -637,12 +650,13 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
637
650
|
case RS_STPCM16D:
|
638
651
|
{
|
639
652
|
int iadd_l = 0, iadd_r = 0;
|
653
|
+
int16_t *psrc, *pSample;
|
640
654
|
if (nFlags == RS_STPCM16U) { iadd_l = iadd_r = -0x8000; }
|
641
655
|
len = pIns->nLength;
|
642
|
-
|
643
|
-
|
656
|
+
psrc = (int16_t *)lpMemFile;
|
657
|
+
pSample = (int16_t *)pIns->pSample;
|
644
658
|
if (len*4 > dwMemLength) break;
|
645
|
-
for (
|
659
|
+
for (j=0; j<len; j++)
|
646
660
|
{
|
647
661
|
pSample[j*2] = (int16_t) (bswapLE16(psrc[0]) + iadd_l);
|
648
662
|
pSample[j*2+1] = (int16_t) (bswapLE16(psrc[len]) + iadd_r);
|
@@ -693,12 +707,13 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
693
707
|
case RS_STIPCM8U:
|
694
708
|
{
|
695
709
|
int iadd = 0;
|
710
|
+
LPBYTE psrc, pSample;
|
696
711
|
if (nFlags == RS_STIPCM8U) { iadd = -0x80; }
|
697
712
|
len = pIns->nLength;
|
698
713
|
if (len*2 > dwMemLength) len = dwMemLength >> 1;
|
699
|
-
|
700
|
-
|
701
|
-
for (
|
714
|
+
psrc = (LPBYTE)lpMemFile;
|
715
|
+
pSample = (LPBYTE)pIns->pSample;
|
716
|
+
for (j=0; j<len; j++)
|
702
717
|
{
|
703
718
|
pSample[j*2] = (signed char)(psrc[0] + iadd);
|
704
719
|
pSample[j*2+1] = (signed char)(psrc[1] + iadd);
|
@@ -713,12 +728,13 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
713
728
|
case RS_STIPCM16U:
|
714
729
|
{
|
715
730
|
int iadd = 0;
|
731
|
+
int16_t *psrc, *pSample;
|
716
732
|
if (nFlags == RS_STIPCM16U) iadd = -32768;
|
717
733
|
len = pIns->nLength;
|
718
734
|
if (len*4 > dwMemLength) len = dwMemLength >> 2;
|
719
|
-
|
720
|
-
|
721
|
-
for (
|
735
|
+
psrc = (int16_t *)lpMemFile;
|
736
|
+
pSample = (int16_t *)pIns->pSample;
|
737
|
+
for (j=0; j<len; j++)
|
722
738
|
{
|
723
739
|
pSample[j*2] = (int16_t)(bswapLE16(psrc[0]) + iadd);
|
724
740
|
pSample[j*2+1] = (int16_t)(bswapLE16(psrc[1]) + iadd);
|
@@ -737,9 +753,10 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
737
753
|
const char *psrc = lpMemFile;
|
738
754
|
char packcharacter = lpMemFile[8], *pdest = (char *)pIns->pSample;
|
739
755
|
UINT smplen = bswapLE32(*((LPDWORD)(lpMemFile+4)));
|
756
|
+
UINT dmax;
|
740
757
|
if (smplen > dwMemLength - 9) smplen = dwMemLength - 9;
|
741
758
|
len += smplen;
|
742
|
-
|
759
|
+
dmax = pIns->nLength;
|
743
760
|
if (pIns->uFlags & CHN_16BIT) dmax <<= 1;
|
744
761
|
AMSUnpack(psrc+9, smplen, pdest, dmax, packcharacter);
|
745
762
|
}
|
@@ -748,17 +765,18 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
748
765
|
// PTM 8bit delta to 16-bit sample
|
749
766
|
case RS_PTM8DTO16:
|
750
767
|
{
|
751
|
-
|
768
|
+
int8_t *pSample;
|
769
|
+
int8_t delta8 = 0;
|
770
|
+
uint16_t *pSampleW;
|
752
771
|
len = pIns->nLength * 2;
|
753
772
|
if (len > dwMemLength) break;
|
754
|
-
|
755
|
-
int8_t delta8 = 0;
|
773
|
+
pSample = (int8_t *)pIns->pSample;
|
756
774
|
for (j=0; j<len; j++)
|
757
775
|
{
|
758
776
|
delta8 += lpMemFile[j];
|
759
777
|
*pSample++ = delta8;
|
760
778
|
}
|
761
|
-
|
779
|
+
pSampleW = (uint16_t *)pIns->pSample;
|
762
780
|
for (j=0; j<len; j+=2) // swaparoni!
|
763
781
|
{
|
764
782
|
uint16_t rawSample = *pSampleW;
|
@@ -780,7 +798,7 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
780
798
|
BYTE dlt = 0, lowbyte = 0;
|
781
799
|
LPBYTE ibufend = (LPBYTE)lpMemFile + dwMemLength - 1;
|
782
800
|
ibuf += 4;
|
783
|
-
for (
|
801
|
+
for (j=0; j<pIns->nLength && ibuf < ibufend; j++)
|
784
802
|
{
|
785
803
|
BYTE hibyte;
|
786
804
|
BYTE sign;
|
@@ -816,8 +834,9 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
816
834
|
if (len >= 4)
|
817
835
|
{
|
818
836
|
UINT maxlen = pIns->nLength;
|
837
|
+
LPBYTE ibuf, ibufmax;
|
819
838
|
if (pIns->uFlags & CHN_16BIT) maxlen <<= 1;
|
820
|
-
|
839
|
+
ibuf = (LPBYTE)lpMemFile, ibufmax = (LPBYTE)(lpMemFile+dwMemLength);
|
821
840
|
len = DMFUnpack((LPBYTE)pIns->pSample, ibuf, ibufmax, maxlen);
|
822
841
|
}
|
823
842
|
break;
|
@@ -847,6 +866,7 @@ UINT CSoundFile_ReadSample(CSoundFile *_this, MODINSTRUMENT *pIns, UINT nFlags,
|
|
847
866
|
void CSoundFile_AdjustSampleLoop(CSoundFile *_this, MODINSTRUMENT *pIns)
|
848
867
|
//----------------------------------------------------
|
849
868
|
{
|
869
|
+
UINT len;
|
850
870
|
if (!pIns->pSample) return;
|
851
871
|
if (pIns->nLength > MAX_SAMPLE_LENGTH) pIns->nLength = MAX_SAMPLE_LENGTH;
|
852
872
|
if (pIns->nLoopEnd > pIns->nLength) pIns->nLoopEnd = pIns->nLength;
|
@@ -856,7 +876,7 @@ void CSoundFile_AdjustSampleLoop(CSoundFile *_this, MODINSTRUMENT *pIns)
|
|
856
876
|
pIns->nLoopStart = pIns->nLoopEnd = 0;
|
857
877
|
pIns->uFlags &= ~CHN_LOOP;
|
858
878
|
}
|
859
|
-
|
879
|
+
len = pIns->nLength;
|
860
880
|
if (pIns->uFlags & CHN_16BIT)
|
861
881
|
{
|
862
882
|
int16_t *pSample = (int16_t *)pIns->pSample;
|
@@ -888,13 +908,13 @@ void CSoundFile_AdjustSampleLoop(CSoundFile *_this, MODINSTRUMENT *pIns)
|
|
888
908
|
if ((pIns->nLength > 0x100) && (_this->m_nType & (MOD_TYPE_MOD|MOD_TYPE_S3M))
|
889
909
|
&& (!(pIns->uFlags & CHN_STEREO)))
|
890
910
|
{
|
891
|
-
int smpend = pSample[pIns->nLength-1], smpfix = 0, kscan;
|
911
|
+
int smpend = pSample[pIns->nLength-1], smpfix = 0, kscan, delta;
|
892
912
|
for (kscan=pIns->nLength-1; kscan>0; kscan--)
|
893
913
|
{
|
894
914
|
smpfix = pSample[kscan-1];
|
895
915
|
if (smpfix != smpend) break;
|
896
916
|
}
|
897
|
-
|
917
|
+
delta = smpfix - smpend;
|
898
918
|
if (((!(pIns->uFlags & CHN_LOOP)) || (kscan > (int)pIns->nLoopEnd))
|
899
919
|
&& ((delta < -8) || (delta > 8)))
|
900
920
|
{
|
@@ -991,9 +1011,11 @@ BOOL CSoundFile_SetPatternName(CSoundFile *_this, UINT nPat, LPCSTR lpszName)
|
|
991
1011
|
if (!_this->m_lpszPatternNames) _this->m_nPatternNames = 0;
|
992
1012
|
if (nPat >= _this->m_nPatternNames)
|
993
1013
|
{
|
1014
|
+
UINT len;
|
1015
|
+
char *p;
|
994
1016
|
if (!lpszName[0]) return TRUE;
|
995
|
-
|
996
|
-
|
1017
|
+
len = (nPat+1)*MAX_PATTERNNAME;
|
1018
|
+
p = (char *) SDL_calloc(1, len);
|
997
1019
|
if (!p) return FALSE;
|
998
1020
|
if (_this->m_lpszPatternNames)
|
999
1021
|
{
|
@@ -1012,19 +1034,19 @@ BOOL CSoundFile_SetPatternName(CSoundFile *_this, UINT nPat, LPCSTR lpszName)
|
|
1012
1034
|
UINT CSoundFile_DetectUnusedSamples(CSoundFile *_this, BOOL *pbIns)
|
1013
1035
|
//-----------------------------------------------
|
1014
1036
|
{
|
1015
|
-
UINT nExt = 0;
|
1037
|
+
UINT nExt = 0, i, j, k;
|
1016
1038
|
|
1017
1039
|
if (!pbIns) return 0;
|
1018
1040
|
if (_this->m_nInstruments)
|
1019
1041
|
{
|
1020
1042
|
SDL_memset(pbIns, 0, MAX_SAMPLES * sizeof(BOOL));
|
1021
|
-
for (
|
1043
|
+
for (i=0; i<MAX_PATTERNS; i++)
|
1022
1044
|
{
|
1023
|
-
MODCOMMAND *p = _this->Patterns[
|
1045
|
+
MODCOMMAND *p = _this->Patterns[i];
|
1024
1046
|
if (p)
|
1025
1047
|
{
|
1026
|
-
UINT jmax = _this->PatternSize[
|
1027
|
-
for (
|
1048
|
+
UINT jmax = _this->PatternSize[i] * _this->m_nChannels;
|
1049
|
+
for (j=0; j<jmax; j++, p++)
|
1028
1050
|
{
|
1029
1051
|
if ((p->note) && (p->note <= NOTE_MAX))
|
1030
1052
|
{
|
@@ -1038,7 +1060,7 @@ UINT CSoundFile_DetectUnusedSamples(CSoundFile *_this, BOOL *pbIns)
|
|
1038
1060
|
}
|
1039
1061
|
} else
|
1040
1062
|
{
|
1041
|
-
for (
|
1063
|
+
for (k=1; k<=_this->m_nInstruments; k++)
|
1042
1064
|
{
|
1043
1065
|
INSTRUMENTHEADER *penv = _this->Headers[k];
|
1044
1066
|
if (penv)
|
@@ -1052,9 +1074,9 @@ UINT CSoundFile_DetectUnusedSamples(CSoundFile *_this, BOOL *pbIns)
|
|
1052
1074
|
}
|
1053
1075
|
}
|
1054
1076
|
}
|
1055
|
-
for (
|
1077
|
+
for (k=1; k<=_this->m_nSamples; k++)
|
1056
1078
|
{
|
1057
|
-
if ((!pbIns[
|
1079
|
+
if ((!pbIns[k]) && (_this->Ins[k].pSample)) nExt++;
|
1058
1080
|
}
|
1059
1081
|
}
|
1060
1082
|
return nExt;
|
@@ -1064,14 +1086,17 @@ UINT CSoundFile_DetectUnusedSamples(CSoundFile *_this, BOOL *pbIns)
|
|
1064
1086
|
BOOL CSoundFile_DestroySample(CSoundFile *_this, UINT nSample)
|
1065
1087
|
//------------------------------------------
|
1066
1088
|
{
|
1089
|
+
MODINSTRUMENT *pins;
|
1090
|
+
signed char *pSample;
|
1091
|
+
int i;
|
1067
1092
|
if ((!nSample) || (nSample >= MAX_SAMPLES)) return FALSE;
|
1068
1093
|
if (!_this->Ins[nSample].pSample) return TRUE;
|
1069
|
-
|
1070
|
-
|
1094
|
+
pins = &_this->Ins[nSample];
|
1095
|
+
pSample = pins->pSample;
|
1071
1096
|
pins->pSample = NULL;
|
1072
1097
|
pins->nLength = 0;
|
1073
1098
|
pins->uFlags &= ~(CHN_16BIT);
|
1074
|
-
for (
|
1099
|
+
for (i=0; i<MAX_CHANNELS; i++)
|
1075
1100
|
{
|
1076
1101
|
if (_this->Chn[i].pSample == pSample)
|
1077
1102
|
{
|