How do I decode music tracks from My Fitness Coach on Wii?
09:09 24 Aug 2026

I'm hoping someone can help me decode music files from the Wii game "My Fitness Coach". I extracted .pak files from my disk image using Dolphin, one per track. A hex editor shows that each one has three .bao files embedded in it, with names like 100a0000.bao, 200a0008.bao, and 3ebac404.bao (much the largest). Online searching suggested I should open the 2xxx.bao file with vgmstream, with the 3xxx.bao in the same directory, and it would find and convert the 3xxx.bao file.

When I do this I can see that vgmstream looks at the first four bytes of the file (0x011B0100) and figures out that it's an Ubisoft .bao file which is the right version to be My Fitness Coach (according to the comments). It locates the correct 3xxx.bao name to open (it's embedded in the 2xxx.bao file) and looks for stream details.

At that point it fails in ffmpeg_fmt_chunk_swap_endian. It's expecting to find a codec of 0x6601 or 0x6501 (or 0x0166 or 0x0165) at a particular offset in the 2xxx.bao file to tell it what kind of encoding options to read, and instead it's finding random numbers (comparing files from multiple tracks there's no consistency in what's there). The offset it chooses comes from the code, but I can't see anywhere else in the file that would get a better result.

Does anyone know how these files work and what I might be doing wrong? Have I possibly extracted them incorrectly?

Below is the contents of 200a0008.bao with some annotations:

00 | 01 1B 01 00 28 00 00 00 14 00 00 00 00 00 00 00 bytes 0-3 are the version, 4-7 is header size
10 | FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 
20 | 20 00 00 00 10 00 00 00 00 0A 00 08 00 00 00 01 header ends at 0x28
30 | 00 15 B3 80 00 00 00 00 00 00 00 00 FF FB 00 00 
40 | 00 00 00 00 3E BA C4 04 00 00 00 00 00 00 00 00 3ebac404 names the large bao file with the stream data
50 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 
60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 
70 | 00 00 56 22 00 00 31 38 00 00 00 00 00 00 00 00 
80 | 00 25 FA 20 00 15 B3 80 FF FF FF FF 00 00 00 00 
90 | 00 00 00 00 00 00 00 00 00 00 00 07 00 00 00 00 
A0 | 00 00 00 00 00 2B 67 02 00 00 00 02 00 2B 66 FF 0x2b00 is the codec read out, starting at byte 0xA4
B0 | 00 00 00 02 03 7D FF CA 0B 04 FA D0 08 2D FE 3D 
C0 | 0D C3 F9 BD 04 EF 01 87 0C 96 FA 6C 08 FD FE 93 
D0 | 0D B3 FA 24 00 00 00 2A 00 00 00 00 00 2A 00 00 
E0 | 00 00 00 00 

Asking here because that's where vgmstream questions seem to go.

audio decoding