Skip to content
bnnm edited this page Jan 20, 2024 · 2 revisions

KNOWN BUGS / ISSUES

To be fixed, probably.

Known issues are separate as aren't always possible to fix, not really a bug, too hard/time consuming, or low interest.

general

general issues

  • average bitrate is borked for some metas with subsongs
    • codec/bitrate breaks when loading segmented stream as a part of another segmented stream
    • segments + layers have incorrect bitrate (EAXMA loop)
    • complex .txtp mixes
  • plugins: seek code could be faster
  • extensionless files don't work inside folders with extension in foobar ("folder.etc/file", "folder.etc\file")
  • mpg123 forces endianess/aligment in 8-bit buffer, problematic with some systems?
  • log: can't write long lines (unknown bug)
  • cleanup: crlfs + tabs

known general issues

  • codecs: ADPCM variants (ex. DSP, IMA, PS-ADPCM) may need to preserve history when looping (hard to test)
  • coding_utils: ffmpeg_make_riff don't always create proper RIFF headers (ok for now but may break if FFmpeg changes stuff)
  • code: performance could be improved, generally unsafe/brittle
    • not very interesting or useful, improved little by little
  • code: warning with disabled external libs could be improved
    • wrapping more stuff into would result in uglier code just to catch
    • preferably should not disable in meta, but in decoder (init_x fails if not implemented)
      • should set a init_x callback to "noop" (same for other decoder calls)
  • common: dual extensions (ex. ".cdk.wav") not supported
    • not many known, not that easy to detect
  • common: Gamecube games (unlike Wii) sample rate should be slightly higher due to a hardware bug
  • os: Linux can't open companion with different case
    • hard and messy to fix, rename/symlink as needed
    • could try opening companion file with same caps? (.ABK > .AST)
  • 32/64 diffs due to float rounding (+- samples in play settings/etc)
    • ao\Cloudphobia (PC)[OGG]\FallAp.ao
    • ao\GEO The Sword Millennia Kasumi no Tani no Kaibutsu (PC)[OGG]\town.ao
    • ogg-opus\Monster Boy
    • opusx\Touhou Genso Wanderer -Reloaded- (Switch)[OPUS]\BGM_8.opusx
    • ubi-dat\Rayman 2 (DC)[AICA]

components

components issues

  • make: ZIP target could include licenses
  • foobar: print loop times as xx:xxx (standard)
  • winamp: unicode build problems with UNICODE Windows flag (MSVC default)
  • winamp: improve conversions wpath to path, etc
  • winamp: for $AUTOTRACK doesn't like TRACKNUMBER (more common) and wants TRACK
  • audacious: some compiler warnings could be improved
  • audacious: missing C flags? "-O3 -ffast-math" etc
  • audacious: should be named audacious-vgmstream
  • CLI: files with unicode names don't work in Windows CMD (messy to fix and preserve multiplatform code)
    • wmain/WinMain: get wchar args, convert to utf8 (MultiByteToWideChar), pass to normal main
    • internally use utf8
    • when opening new files (WSTREAMFILE?), convert and use _wfopen
    • printf convert to widechar before print too?
    • https://github.com/thpatch/win32_utf8
  • cmake: missing flags in external libs?
    • some calls seem to overwrite them

known component issues

meta

meta issues

  • EA SPS/SNS: some EALayer3 discard modes are not 100% correct ATM (hard to test)
  • RD03: wrong last shortblock
  • VXN: segments could be played in the same stream instead of subsongs? (unknown format)
    • ex. Asphalt 9, may have short/med/full mixes, "Grpe" chunk may be mix table
    • bgm_ih_electro_01.vxn, short mix in Grpe seems to be entry03 with 00,02,0b,0c,0d subsongs
  • Dead Rising (PC): missing looping
  • .stz+.idx: unknown index format [Sylpheed (PS2)]
  • PSQ+INT: subsongs + ? codec [State of Emergency (PS2), Evil Dead: A Fistful of Boomstick (PS2)]
  • VS/SVS: pitch calculation could be slightly different
  • .kma Koei files in [Warriors: Legends of Troy (X360), others?]
  • .bsf: multi DSP [Battalion Wars (GC)]
  • .sts/stm: Fur Fighters (PS2)
  • BFSTP: inside .bard in Switch games (very similar to BFSTM) [Zelda BOTW, Mario Kart 8]
  • nst/rrds looping may be erratic in some Metroid Prime Hunters: First Hunt
  • Opus SPS segmented: looping slightly off [Penny Punching Princess (Switch)]
  • Ubi SB: splinter cell ps3 num_samples adjust like BAO Assassin's Creed
  • Metro .ivb [Bomberman Jetters, Dance Summit 2001 Bust A Move (PS2)]
  • FSB: "Hard Reset which has loop end set to some odd values on all on jingles" ?
  • layers diff sizes: "In the game Osmos, one of the tracks seems to be split into 5 different files, but 2 of the files are 12 seconds long and 3 of them are 3 seconds long. And it sounds like the 3 second long ones would loop 4 times for each time the 12 second long ones would."
  • load xsb to load .xwb: Stage01.xsb + Music.xwb, Stage02.xsb + Music.xwb (needs txtm)
  • FF11 PC: some files have non-encrypted frames at the end: music069.bgw, music071.bgw, music900.bgw
  • mta/mta2: tracks may be better as subsongs
    • tracks can have channel layout
  • Call of Duty: Advanced Warfare .pak mushed FLAC
  • Ubi BAO: support baos with hashed names (open files with name-to-hash)
  • EA Schl: buggy files (Monopoly, Trivial Pursuit, Hasbro Family Game Night)
  • Scooby-Doo and the Spooky Swamp (Wii)
  • xss: blossom tales switch missing some names
  • RIFF: bad format should fail faster > maybe check RIFF is numeric
  • FSB3: wrong full loops? [Heavenly Sword]
  • webm support
  • bk2: fix version m+ (modified header + packets? unsupported in ffmpeg) [Elden Ring, RDR switch, Wanted Dead]
  • .fsb nsane trilogy segmented may need needs real loops (#E that save config)
  • mkv https://www.programmersought.com/article/36687545957/
  • Beyond Good and Evil (GC)[DSP] weird old vs new
  • .mediastream_s files in Watchmen: The End is Nigh
    • Ogg streams in PC
    • MPEG streams in PS3
  • Ikaruga BGM.bnk refers to streams w/ loops?
  • .caf: add .aac (currently uses ffmpeg meta)
  • xma: improve channel mapping in init functions
  • PS2 padding finder detect flag 01
  • blocked ast: load adpcm state?

known meta issues

  • XWB XMA: XACT v35/36/37/39 not tested (exists?)
  • XWB MSADPCM: XACT2 looping not tested (exists?)
  • FF11/FF12/etc: movies using PSX_configurable or some type of compression?
  • FSB5 PCM24/PCM32: not implemented/enabled (no known games)
  • FSB4, VAG, Wwise, XWB: sfx or some tracks may loop when they shouldn't due to how loop detection works
  • Wwise: some XMA files have loop points even for jingles
    • use wwiser to properly handle XMA
  • MSF MPEG: strange-sounding bgm_001.msf found in Caladrius Blaze
    • happens also on PS4 AT9, may be encoded like that?
  • .partitio [Fahrenheit/Indigo Prophecy]:
  • MUSC: clicks every new block? decoding problems? [Legend of Spyro: Eternal Night (PS2)?]
    • still a bug?)
  • various sound bank (sfx only), not too interesting and usually can be handled with .TXTH
    • 2PSF/.iap: PSX [GANTZ (PS2), Mahoromatic (PS2)]
    • CSL/CSF: DSP [Baten Kaitos (GC), Fragile (Wii)]
    • .gcb: DSP [Burnout (GC)]
    • kabf/.kab: PCM sounds (SQEX's SEAD) [Final Fantasy XV (PC)]
    • .sfx/.xau/SFX1: PSX/XBOX-IMA [Run Like Hell (XBOX/PS2)]
    • .snd: DSP [Tales of Symphonia (GC)]
    • .wav/lnd: compressed sounds [Ever17 (PC)]
    • .wd/WD: PSX [PlayOnline (PS2), Dirge of Cerberus (PS2)]
    • .sp2/SPP2: PSX [Time Crisis 4 (PS3)]
    • .sp3/SPP3: PSX [Time Crisis Razing Storm (PS3)]
    • .dsp+gsb: DSP [Dr. Muto (GC)]
    • .seq/SEQW: PSX [Star Ocean 3, Valkyrie Profile 2]
    • .vab/pBAV: PSX [?]
    • vpkh/vsph: PSX [Air Force Delta (PS2)]
    • .bnk: PSX [Fight Club (PS2)]
    • BANK1.SE: PSX [Sylpheed (PS2)]
    • .bnk [State of Emergency]
    • .PSH+PSK+SYM [State of Emergency 2]
    • Gran Turismo PS2 games: ENGN
    • .msc = .msh+msb [used?]
    • .xb+xh XABb [Seven (PS2)]
    • Sony PS2 XVAB (.xv), XSEH (.voi, .v, .se) [Sony framework SFXs, like RXWS]
    • .bnk [Stormfront games]
    • .aw/bx from Nintendo games [Pikmin, Luigi's Mansion]
    • .sam+pps [Lost Kingdoms 2 (GC)]
    • AXHD - Rockstar San Diego (2003-2004)
    • .wave: simple CWAV container [Cursed Castilla (3DS)]
    • GSW+SND / VBC+SND: sound banks [Spiderman (GC/PS2)]
    • SE00 [Mushihimesama sfx]
  • various containers, can handled with TXTH
    • RayForce (Android) .asn: .mp3/.ogg container (loop list in the exe/so, in bytes)
  • FSHB/.fsb: XBOX-IMA music? [Wallace & Gromit In Project Zoo (XBOX/PC)]
  • KDJW/.kma: ?-IMA ADPCM music [Onigiri Online (PC)]
  • many formats supported by GARbro
  • formats supported by foo_adpcm (most are very obscure so not generally useful)
    • BasiL-WPD sample files (*.WPD)
    • StudioMiris-WDT sample files (*.WDT)
    • Hayashigumi-KWF sample files (*.KWF)
    • jANIS-PX sample files (*.PX)
    • CLOVER-BW sample files (*.BW)
    • RAC IMA-ADPCM files from Star Trek: The Next Generation - A Final Unity PC game
  • formats supported by towav
    • 25 to Life (PC) .EMT (Ogg)
    • Crime Life: Gang Wars (PC) *.CMP
    • Emperor: Battle for Dune (PC) *.BAG
    • Full Spectrum Warrior (PC) *.SND
    • Hitman: Blood Money (PC/PS2) *.STR
    • Just Cause (PC) *.SAB
    • Made Man (PC) *.WWB
    • Nox (PC, "audio.idx")
    • Shadow of Rome (PS2) *.APS
    • Shield (PC) *.ASF
    • Tony Tough and the Night of Roasted Moths (PC) *.ADP
  • various XMA
    • ?: [Are You Smarter Than A 5th Grader? (XBLA)]
    • ?: [Quake 4 (360)]
    • PSB: XBLA games
    • XWV: XBLA games [Bloody Good Time (X360)]
    • FFIR: alt XMA [Resident Evil 6 (X360)]
    • FUNl Men in Black: Alien Crisis (X360)]
    • STR: (raw xma?) [Legends of War: Patton (X360)]
    • ?: [Battlefield 4 (X360)]
    • SDNS: [Call of Duty: World at War (X360)]
    • swa: [Star Wars: The Force Unleashed (X360)]
    • MUSX XMA [007 Legends (X360)]
  • Key .ovk ogg container for voices
  • .snd extra data+FSB [Climax games: Rocket Knight (PS3), Shattered Memories (PS2)]
  • Blitz Games sfx mini PS-ADPCM or GC-ADPCM.
  • Samurai Shodown Anthology: adpcm + inf GCADPCM
  • Project_IGI .wav with ILSF interleaved DVI IMA
  • AI War Fleet Command music 128000hz?
  • imuse: add chunk subsongs
  • Monster House PS2

codecs

bugs

  • PS-ADPCM/XA: not fully accurate (implementations vary, see xa_decoder.c)
  • interleave_short_frame won't work in many cases of variable frame size (rarely used in practice)
  • Guitar Hero 2 last stream of half frame rate ignored in some files
  • reset_mpeg may need to work like flush_mpeg (to be tested)
  • Juiced 1/2 (PC): use giant .dsb WMA and some kind of offset of unknown format to locate sections
  • Metal Gear Solid Twin Snakes strange voice ogg
  • FFmpeg bugs:
    • simulated looping, potentially buggy with unknown formats
    • simulated Opus encoder delay
    • simulated ATRAC3 encoder delay
    • wrong encoder delay: ALAC, MP4, etc
    • xwma 1ch 32000hz wrong (wma looks ok)
    • "-Wcast-align" not working (can't do aligned/unaligned memory)
    • inverted signal in ATRAC3 decoding
    • internal OPUS
    • can't seek at all in some formats like .smk (even on video players)
    • broken XMA1 seeking leading to inf-loops in 5.1.2
      • "XMA1 doesn't need seeking", silently fixed after pointing out internals need flushing
    • mistakes in ADPCM codecs like DIV vs SHR in MSADPCM (not used, just warning)
    • seeking to zero breaks encoder delay and other stuff in various codecs (fixed in some cases)
  • fsb multichannel at9/celt faulty in some configs (unused?)
  • Wwise DSP ADPCM aligment in ParseAdpcmHeader
  • Ubi SB/BAO? weird XMA1 with wrong counter in XMA1 block header, has issues in FFmpeg
  • dsp: could try to reject .dsp with too much data (accounting some padding) to be mono
    • problem: some headers lie/set nibble counts as if they were stereo about [ESPN 2002]
    if ((header.nibble_count / 2) + 0x4000 < get_streamfile_size(streamFile) - 0x60)
        goto fail;
    
  • EALayer3: free bitrate misdetected by mpg123 at times
    • force free bitrate for ealayer3 by sending fake 2 free silent BR packets?
  • KTAC: buggy mode 1
  • ealayer3 causes lots of restarts
    • complex to fix ATM, would need to save granules
  • ADX: figure out frame size value what does exactly
  • some decoders should be implemented in float math (MTA2, EA-XA, etc)
  • ADPCM (ex. psx) use hist_16/32 more consistently
  • FFmpeg less frames to detect? use less IO buffer?
  • PSX optimize: maybe upper filters just set 0s in table
  • westwood clean decoder/meta
  • clean psx decoding old, doc about clamping
  • ima/xbima/msima/msadpcm optimize frame read
  • .ogg in Undertale have malformed granulepos in several of the files
    • would need detection to set discard seeks
  • awc: try if block have more frames than usual (rather than next block having extra frames?)
    • rdr2 music desyncs

new

encryption

  • Rome 2 Total War: XORed WEMs
  • Tales of Asteria
  • .rpgmvm: RPG Maker MV files M4A (iOS/Android?), XOR'ed with 0x10 key in System.json
  • Rock band (PSP) encrypted .ATM
  • Guitar Hero Legends encrypted *.wem
  • .sec SITERSKAIN: xor encrypted?
  • Zone4 .sod strange character swap table
  • Darkwind (PC)
  • Guitar Hero 6 Warriors of Rock custom? FSB encryption
  • hca phantasy star 2 bad key detection

    silent files but uses a bad key with high score forcing min test frames seems to work, but also makes key detection slower

sample issues

  • some formats loop_end may be 1 sample off, depending if loop end means "loop after playing this sample" or "loop when reaching this sample"
    • ex. some files suspiciously use "loop_end=123455, num_samples=123456")
  • encoder delay to be researched/fixed:
    • XMA: most formats should be fine work but there may be bugs
    • ATRAC3: GSB+GSP, RXWS, tri-Ace AAC, VAWX, XWB
    • MPEG: SCD, XVAG, MSF (probably not used)
    • ATRAC9: various
  • loop end +1 in XMA and AT3 in psb, maybe others
  • fix: dsp_bytes_to_samples, DSP frames can end before 0x08?
  • mp3 counter: ignore frames with only pre-data
  • wma v2 sample counts
  • xma encoder delay bugs (not reading skips ok?): xwb xma1, eaxma, gtd (glitch at the beginning)
  • #t trim command has issues with interleave last b/c total samples change and calcs depend on those
  • OGL Vorbis: num_samples in non-looping files is a bit off (approx calcs)
  • wma_get_samples wrong for 6ch 00000162 xwma konami
  • BINK: bink total samples is slightly off vs binkconv
  • opus number of samples maybe fixed for all frames

known improvements

For fun but not really useful

  • TXTP inline segments/layers (for mini/virtual txth)

    • file > file: segments
    • file : file: layers
    • virtual txtp are limited so not really useful (maybe for CLI)
    • which chars to use for all OSs?
  • TXTP: some kind of remap ea that would change FL FC FR BL BR LFE to standard FL FR FC LFE BL BR

    • better as a mixing related macro?
  • TXTH/TXTP: force internal name

    • ever useful?
  • TXTH: add xor mode/key? (IQ Remix)

    • too limited, better pre-decrypted
  • builds: use DLL delayed loading configurable during compile (substitute functions)

    • not very compatible and kinda strange
    • better build single lib
  • calculate codec_bitrate for CBR codecs:

    • let codecs set frame_size (ex. NXOPUS)
    • get_frame_size can't be used since some VBR codecs report frame_size (ex. FFmpeg)