This commit is contained in:
bnnm 2024-06-07 13:24:57 +02:00
parent f2b42dd9c4
commit c6adbc6b38
2 changed files with 25 additions and 3 deletions

View File

@ -2,13 +2,13 @@
This is vgmstream, a library for playing streamed (prerecorded) video game audio.
Some of vgmstream's features:
- [Hundreds of video game music formats and codecs](doc/FORMATS.md), from typical game engine files
to obscure single-game codecs, aiming for high accuracy and compatibility.
- Decodes [hundreds of video game music formats and codecs](doc/FORMATS.md), from typical
game engine files to obscure single-game codecs, aiming for high accuracy and compatibility.
- Support for looped BGM, using file's internal metadata for smooth transitions, with accurate
sample counts.
- [Subsongs](doc/USAGE.md#subsongs), playing a format's multiple internal songs separately.
- Many types of companion files (data split into multiple files) and custom containers.
- Encryption keys, internal stream names, and many other unusual cases found in game audio.
- Encryption keys, internal stream names, and other unusual cases found in game audio.
- [TXTH](doc/TXTH.md) function, to add external support for extra formats, including raw audio in
many forms.
- [TXTP](doc/TXTP.md) function, for real-time and per-file config, like forced looping, removing

View File

@ -929,3 +929,25 @@ vgmstream's internals are tailored to play streams so, in other words, it's not
possible to add support for sequenced audio unless massive changes were done,
basically becoming another program entirely. There are other projects better
suited for playing sequences.
## External loop points
Most games use audio formats that define loop points inside its files. That is,
you get looped/repeated audio in vgmstream simply by opening the files.
However some games use formats that don't define loops points, and instead store
loops in the executable or some external file. For example they could have a bunch
of `.ogg` and some text with start/end loop time info for all `.ogg`, or `.opus`
files with loop samples defined in a `.bfsar`.
Since those cases are typically custom/per game, vgmstream can't really read those
loop points automatically. Instead, one should make (manually or with some script)
one TXTP per file that tells vgmstream about its external loop points, and play
the `.txtp`:
**BGM_BTL_ACMaster_opus.txtp**: `BGM_BTL_ACMaster_opus.lopus #I 258724 2929972`
Some games also use intro + loop "segments" in separate files that can be combined
with `.txtp` as well.
This may even happen with formats that do have loops in other games (for example
relatively common with `.fsb` and mobile games, that may define loops in a .json file).