libxmp / libxmp

Libxmp is a library that renders module files to PCM data.
300 stars 69 forks source link

SONG6.PSM can't be loaded #156

Closed Wohlstand closed 3 years ago

Wohlstand commented 4 years ago

This file is from Jazz Jackrabit game: SONG6.PSM.zip

it's only one which can't be loaded. Modplug still can load it.

The debug log that I have got:

libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @95181
get_dsmp [libxmp/src/loaders/masi_load.c:217] [1B]                                  00000 00000 00000   V40 +000  8448
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @95285
get_dsmp [libxmp/src/loaders/masi_load.c:217] [1C]                                  00000 00000 00000   V40 +000  8448
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @95389
get_dsmp [libxmp/src/loaders/masi_load.c:217] [1D]                                  00000 00000 00000   V40 +000  8448
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @95493
get_dsmp [libxmp/src/loaders/masi_load.c:217] [1E]                                  00000 00000 00000   V40 +000  8448
xmp_release_module [libxmp/src/load.c:620] Freeing memory
xmp_release_module [libxmp/src/load.c:677] free dirname/basename
load_module [libxmp/src/load.c:375] load
load_module [libxmp/src/load.c:384] test Fast Tracker II
load_module [libxmp/src/load.c:384] test Amiga Protracker/Compatible
load_module [libxmp/src/load.c:384] test Startrekker
load_module [libxmp/src/load.c:384] test Soundtracker
load_module [libxmp/src/load.c:384] test Impulse Tracker
load_module [libxmp/src/load.c:384] test Scream Tracker 3
load_module [libxmp/src/load.c:384] test Scream Tracker 2
load_module [libxmp/src/load.c:384] test STMIK 0.2
load_module [libxmp/src/load.c:384] test Multitracker
load_module [libxmp/src/load.c:384] test Soundtracker 2.6/Ice Tracker
load_module [libxmp/src/load.c:384] test Imago Orpheus v1.0
load_module [libxmp/src/load.c:384] test Poly Tracker
load_module [libxmp/src/load.c:384] test Digitrakker
load_module [libxmp/src/load.c:384] test Ultra Tracker
load_module [libxmp/src/load.c:384] test Liquid Tracker
load_module [libxmp/src/load.c:384] test Liquid Tracker NO
load_module [libxmp/src/load.c:384] test Epic MegaGames MASI
load_module [libxmp/src/load.c:388] load format: Epic MegaGames MASI
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [SDFT]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 8
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk SDFT (8) @20
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 254
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (254) @36
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 327
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (327) @298
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 258
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (258) @633
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 331
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (331) @899
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 414
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (414) @1238
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 418
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (418) @1660
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 414
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (414) @2086
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 414
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (414) @2508
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 414
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (414) @2930
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 405
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (405) @3352
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 258
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (258) @3765
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [SONG]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 392
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk SONG (392) @4031
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 2395
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (2395) @4431
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 2783
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (2783) @6834
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 5635
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (5635) @9625
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 12325
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (12325) @15268
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 6627
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (6627) @27601
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 6275
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (6275) @34236
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 2065
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (2065) @40519
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 10017
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (10017) @42592
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 97
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (97) @52617
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 97
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (97) @52722
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @52827
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @52931
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @53035
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @53139
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @53243
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @53347
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @53451
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @53555
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @53659
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @53763
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @53867
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @53971
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @54075
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @54179
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @54283
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @54387
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @54491
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @54595
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @54699
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @54803
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [DSMP]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 96
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk DSMP (96) @54907
masi_load [libxmp/src/loaders/masi_load.c:768] Module title: ""
masi_load [libxmp/src/loaders/masi_load.c:768] Module type: Epic MegaGames MASI PSM
masi_load [libxmp/src/loaders/masi_load.c:776] Stored patterns: 11
masi_load [libxmp/src/loaders/masi_load.c:777] Stored samples : 31
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [SDFT]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 8
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 254
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (254) @36
libxmp_alloc_tracks_in_pattern [libxmp/src/loaders/common.c:124] Alloc 4 tracks of 48 rows
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 327
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (327) @298
libxmp_alloc_tracks_in_pattern [libxmp/src/loaders/common.c:124] Alloc 4 tracks of 48 rows
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 258
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (258) @633
libxmp_alloc_tracks_in_pattern [libxmp/src/loaders/common.c:124] Alloc 4 tracks of 48 rows
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 331
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (331) @899
libxmp_alloc_tracks_in_pattern [libxmp/src/loaders/common.c:124] Alloc 4 tracks of 48 rows
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 414
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (414) @1238
libxmp_alloc_tracks_in_pattern [libxmp/src/loaders/common.c:124] Alloc 4 tracks of 48 rows
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 418
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (418) @1660
libxmp_alloc_tracks_in_pattern [libxmp/src/loaders/common.c:124] Alloc 4 tracks of 48 rows
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 414
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (414) @2086
libxmp_alloc_tracks_in_pattern [libxmp/src/loaders/common.c:124] Alloc 4 tracks of 48 rows
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 414
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (414) @2508
libxmp_alloc_tracks_in_pattern [libxmp/src/loaders/common.c:124] Alloc 4 tracks of 48 rows
iff_chunk [libxmp/src/loaders/iff.c:75] chunk id size: 4
iff_chunk [libxmp/src/loaders/iff.c:80] chunk id: [PBOD]
iff_chunk [libxmp/src/loaders/iff.c:99] size: 414
iff_process [libxmp/src/loaders/iff.c:51] Load IFF chunk PBOD (414) @2930
libxmp_alloc_tracks_in_pattern [libxmp/src/loaders/common.c:124] Alloc 4 tracks of 48 rows
iff_chunk [
sezero commented 4 years ago

I built current git version of libxmp and xmp-cli on i686 linux. It loads and plays that SONG6.PSM for me, reporting 1min16s duration.

Wohlstand commented 4 years ago

Okay, I have checked out the repo, I have pulled the most new stuff and I have tried to use it... works!

libxmp/examples $ LD_LIBRARY_PATH=../lib ./player-sdl SONG6.PSM 
 (Epic MegaGames MASI PSM)
^C3/ 31   8/ 48

btw, the module loader is used xmp_load_module by filename. The loading was failed when loading this file from a memory... will try to make a trick and check the result...

Wohlstand commented 4 years ago

Okay, just now I made an ugly test on a VERY quick hand: player-sdl-mem.c.zip and, it plays SONG1.psm file, but SONG6 fails as at me

SONG1.PSM.zip

Wohlstand commented 4 years ago
$ make player-sdl
$ LD_LIBRARY_PATH=../lib ./player-sdl 'SONG1.PSM' 
 (Epic MegaGames MASI PSM)
^C0/ 12  13/ 64
$ LD_LIBRARY_PATH=../lib ./player-sdl 'SONG6.PSM' 
./player-sdl: error loading SONG6.PSM
sezero commented 4 years ago

It's failing here: https://github.com/cmatsuoka/libxmp/blob/master/src/loaders/iff.c#L101

Possibly an issue with the hio layer in libxmp. Will try tracing.

sezero commented 4 years ago

Seems like this hio_seek() call fails: https://github.com/cmatsuoka/libxmp/blob/master/src/loaders/masi_load.c#L702 .. and it carries over its error.

BTW, hio error for memory buffers is broken: it sets h->error to good old errno, but it has nothing to do with errno...

sezero commented 4 years ago

Seems like this hio_seek() call fails: https://github.com/cmatsuoka/libxmp/blob/master/src/loaders/masi_load.c#L702 .. and it carries over its error.

Using the debug printf()s I added to memio.c, it fails like this: MSEEK: m->size: 55003, offset: 197664, m->pos: 4256, CAN_READ: 50747

Obviously the required offset is crazy. An ugly workaround would be clearing the error from hio like (most probably not for merging):

diff --git a/src/loaders/masi_load.c b/src/loaders/masi_load.c
index 5da0270..267683d 100644
--- a/src/loaders/masi_load.c
+++ b/src/loaders/masi_load.c
@@ -700,6 +700,7 @@ static int get_song_2(struct module_data *m, 

                default:
                        hio_seek(f, subchunk_size, SEEK_CUR);
+                       hio_error(f);   /* clear possible error flag */
                }
        }

... which makes your particular file to play for me using memory buffers.

Wohlstand commented 4 years ago

Looks odd, btw, why it works from the file at the same time? :thinking:

Obviously the required offset is crazy. An ugly workaround would be
clearing the error from hio like (most probably not for merging):

Maybe add the edge check to don't try to seek an impossible offset? and print the debug message about that? Is the file itself is odd?

sezero commented 4 years ago

Looks odd, btw, why it works from the file at the same time? thinking

Play with fseek() using crazy offsets and see.

Asked questions to @cmatsuoka in private mail.

sezero commented 4 years ago

Simplifying mseek() in src/memio.c like the following makes it work:

int mseek(MFILE *m, long offset, int whence)
{
    switch (whence) {
    default:
    case SEEK_SET:
        break;
    case SEEK_CUR:
        offset += m->pos;
        break;
    case SEEK_END:
        offset = m->size + offset;
        break;
    }

    if (offset < 0) return -1;
    if (offset > m->size)
        offset = m->size;
    m->pos = offset;
    return 0;
}

But I don't know about merits of the size negativity checks in there, and there will be more to adjust along the way I think. So @cmatsuoka should join the discussion.