Coder Social home page Coder Social logo

vgmstream / vgmstream Goto Github PK

View Code? Open in Web Editor NEW
1.4K 1.4K 168.0 37.2 MB

vgmstream - A library for playback of various streamed audio formats used in video games.

Home Page: https://vgmstream.org

License: Other

Makefile 0.11% Shell 0.11% C 96.65% C++ 1.41% Batchfile 0.02% M4 0.02% PowerShell 0.09% Python 0.59% CMake 0.76% Roff 0.23%
audio c codec foobar2000 game ogg vgmstream video-game winamp

vgmstream's Introduction

vgmstream

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, 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, 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.
  • TXTH function, to add external support for extra formats, including raw audio in many forms.
  • TXTP function, for real-time and per-file config, like forced looping, removing channels, playing certain subsong, or fusing multiple files into a single one.
  • Simple external tagging via .m3u files.
  • Plugins are available for various media player software and operating systems.

The main development repository: https://github.com/vgmstream/vgmstream/

Automated builds with the latest changes: https://vgmstream.org (https://github.com/vgmstream/vgmstream-releases/releases/tag/nightly)

Common releases: https://github.com/vgmstream/vgmstream/releases

Help can be found here: https://www.hcs64.com/

More documentation: https://github.com/vgmstream/vgmstream/tree/master/doc

Getting vgmstream

There are multiple end-user components:

The main library (plain vgmstream) is the code that handles the internal conversion, while the above components are what you use to get sound.

If you want to convert game audio to .wav, try getting vgmstream-cli (see below) then drag-and-drop one or more files to the executable (support may vary per O.S. or distro). This should create (file.extension).wav, if the format is supported. More user-friendly would be installing a player like foobar2000 (for Windows) or Audacious (for Linux) and the vgmstream plugin. Then you can directly listen your files and set options like infinite looping, or convert to .wav with the player's options (also easier if your file has multiple "subsongs").

See components in the usage guide for full install instructions and explanations. The aim is feature parity, but there are a few differences between them due to missing parts on vgmstream's side or lack of support in the player.

Note that vgmstream cannot encode (convert from .wav to a video game format), it only decodes (plays game audio).

Windows

Get the latest prebuilt binaries (CLI/plugins/etc) on our website:

Or the less frequent "official" releases on GitHub:

The foobar2000 component is also available on https://www.foobar2000.org based on current release.

If the above links fail, you may also try the alternative versions built by bnnm:

You may compile from source as well, see the build guide.

Linux

A prebuilt CLI binary is available. It's statically linked and should work on systems running Linux kernel v3.2 and above:

Building from source will also give you vgmstream.so (Audacious plugin), and vgmstream123 (command-line player).

When building, many extra components have to be installed or compiled separately, which the build guide describes in detail. For a quick build on Debian and Ubuntu-style distributions run ./make-build-cmake.sh. The script will need to install various dependencies, so you may prefer to copy commands and run them manually.

macOS

A prebuilt CLI binary is available as well:

Otherwise follow the build guide.

More info

Enjoy! hcs

vgmstream's People

Contributors

acekombat avatar actualmandm avatar bnnm avatar bxaimc avatar codebase7 avatar cyberbotx avatar ednessp avatar grj1234 avatar hcs64 avatar hexagon123 avatar josephgibbs avatar julianxhokaxhiu avatar katiefrogs avatar kddlb avatar kjhmagic avatar kode54 avatar libertyernie avatar makefilex avatar mbc07 avatar modusc896d352 avatar nickninetheeagle avatar predatorcz avatar punk7890 avatar retingencyplan avatar rururutan avatar shawwn avatar simontime avatar soneek avatar thealexbarney avatar tricksterguy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vgmstream's Issues

Suggestions for test.exe

Create minimum length parameter so the program will automatically use the loops to get it above that duration.
Automatic output should use the original file name and not the word 'dump'

some .at3 files going 'numb' after midpoint, looping infinitely, causing crash or "bad allocation" message

Sorry, hope you're not getting tired of me reporting bugs yet.

Songs that go 'numb', they either take the last sound they processed at the midpoint/looppoint and play it forever, or if you skip directly there from silence it will continue to play silence forever. Ends up sometimes crashing the player or causing "bad allocation" messages for every song after it, requiring a restart:

Wipeout Pure - Data_0A
Zwei!! - 408 Final Battle Demon Vesper

Songs that somehow looped forever for me:

428 Fuusa Sareta Shubya de - bgm_c03.e01
Ace Combat Joint Assault - REGFILE_0000002C

C&C Tiberian Sun Firestorm addon .AUD have errors on ARM?

<*>  hello
<*>  around?
<*>  anyway, I just wanted to ask if it's known bug in vgmstream that .AUD files bugs on ARM but not in x86?
<*>  easiest to notice is with Command & Conquer Tiberian Sun Firestorm addon, scores010022.aud
<*>  there is a constant tone on the background very annoying
<*>  correction, scores010023.aud

Paging @bnnm, maybe you know something about testing on ARM? I haven't actually done any builds of any ARM apps to support this, so I don't even know if they mean ARM Linux, ARM Android, iOS? And I don't know if it's due to an endianness issue in that particular decoder, since ARM Linux can choose to be big endian if it wants.

ACM 1-channel files are being played like with double samplerate

https://github.com/kode54/vgmstream/blob/master/src/coding/acm_decoder.c line 675 : 'acm->info.channels = 2;'.
This forcing is not good - it is against the purposes of the values in the header.
Even if would appear that the major of sounds have this value incorrect, this is, in my opinion, not the proper way to resolve that situation - the proper way would be to make correction only for those sounds which have this value incorrect.
Test sound : http://a0.sderni.ru/d/2101408/_pb_faster_15A91B17.7z

build failure

@bnnm Build via test/Makefile currently fails when building without ffmpeg support. This line is to blame: xwb.c:245 because the struct xma_sample_data is enclosed in a #ifdef VGM_USE_FFMPEG

Clicks in BNSF files

Some BNSF (G7221) files decode with audible clicks in a few frames.
Seen in many songs in Tales of Graces Wii and Tales of Vesperia PS3, a few in Mojipittan Wii, etc.

As a test I isolated the offending frames in a couple of tracks (one channel frame decodes incorrectly).
I assume there is a bug in the Siren7 codec (https://github.com/kode54/libg7221_decode) since headers and stuff seem correct.

bnsf_examples.zip

EDIT
Link to the Polycom's reference C decoder: http://www.itu.int/rec/T-REC-G.722.1-200505-I/en
Also official EXE: http://docs.polycom.com/global/downloads/company/about_us/technology/siren14_g7221c/Siren14PCExecutable.zip
This decoder works and is well commented, but still complex to understand for me.
I think the lib was created from it but stripping much stuff (like those helpful comments...).

Using hcs's old DLL (from the reference decoder) it works fine. I don't know if there are any disadvantages though.
Can be found here: http://hcs64.com/files/vgmstream_external_dlls.zip

Example, current DLL vs hcs's DLL:
example

Not possible to convert Switch audio to any format

So, I get this message...

1 out of 1 tracks converted with major problems.

Source: "E:\Mario Kart 8 Deluxe (2017-04-28)(Nintendo)\pBGM_N64_RAINBOW_ROAD_N.bfstm" / index: 1
An error occurred while writing to file (The encoder has terminated prematurely with code -1 (0xFFFFFFFF); please re-check parameters) : "C:\Users\dgali\Documents\pBGM_N64_RAINBOW_ROAD_N.mp3"
Additional information:
Encoder stream format: 32000Hz / 4ch / 16bps
Command line: "G:\foobar2000\encoders\lame.exe" -S --noreplaygain -b 320 - "pBGM_N64_RAINBOW_ROAD_N.mp3"
Working folder: C:\Users\dgali\Documents\

Conversion failed: The encoder has terminated prematurely with code -1 (0xFFFFFFFF); please re-check parameters

I have no idea why.
Track attached.

pBGM_N64_RAINBOW_ROAD_N.zip

Audacious Linux plugin crashing on Icebreaker(3DO) STR files

The vgmstream audacious plugin seems to have a horrible time trying to access these files.

(my username will be censored)

Trying to open the .STR results in this happening:
ERROR vfs_local.cc:119 [fopen]: ~/tempshit/ice_002.STH: No such file or directory Segmentation fault

Renaming to .STH results in this happening:
ERROR vfs_local.cc:119 [fopen]: ~/tempshit/ice_002.str: No such file or directory ERROR vfs_local.cc:119 [fopen]: ~/tempshit/ice_002.str: No such file or directory ERROR vfs_local.cc:119 [fopen]: ~/tempshit/ice_002.str: No such file or directory ERROR vfs_local.cc:119 [fopen]: ~/tempshit/ice_002.STH.txth: No such file or directory Segmentation fault

Finally, renaming back to .STR and symlinking the file to .STH results in it finally playing but it sounds completely mono (the music is supposed to be in stereo)

Here's a screenshot of the file header if that helps:
image

Missing looping option.

There's a certain kind of behavior in some tracks that cannot be reproduced with the available settings on vgmstream.
Some tracks will start playing the track, loop a certain amount of times a part and then they will continue playing the file until the ending of the actual file (ignoring loop points) without fadeout.
Best example is this audio file from GT:HD Concept:

http://www.mediafire.com/file/6z16jf9b6yapk49/Nittoku_Inoue_-_Uknown_Title_%28XMB_Short_Edit%29.AT3

It should loop a couple of times on their loop points and then it should ignore the loop point and reach it's proper end.

At this point the only way to play those files in a kinda proper way is to ignore loop points.

Second Channel cut too early (Tony Hawk's PS2 Games)

When playing a .genh in foobar of Playstation 2 Tony Hawk's games, the second channel is completely cut too early at the end of a track.

Something goes wrong, however when you convert the whole .wad music file, the second channel ain't cut at the end of each tracks.
It only happens when you play the music splitted from the HED/WAD archive.

Here's a list of tracks to hear it : (headphones will be more useful to detect)

Tony Hawk's Pro Skater 3 :
=> CKY - 96 Quite Bitter Beings

Tony Hawk's Pro Skater 4 :
=> Gang Starr - Mass Appeal

Tony Hawk's Underground :
=> Alkaline Trio - Armageddon

Tony Hawk's Underground 2 :
=> Atmosphere - Trying to Find a Balance

Tony Hawk's American Wasteland
=> EI-P - Jukie Skate Rock

Others Tony Hawk's games doesn't have this issue because there is enough silence at the end.

Music source: http://psf2.joshw.info/t
I have also tried my own ripping of the tracks with a redump disc, i'm still getting the same channel error at the end also.

Ripping info :

  • 48khz
  • 2 channels
  • Interleave : 0x18000
  • No Loops

Add support for multitrack .scd audio

Used in games such as Final Fantasy XIII-2, Lightning Returns: Final Fantasy XIII and a couple files in Kingdom Hearts HD 1.5 Remix and Kingdom Hearts HD 2.5 Remix to name a few.
If you need any files as reference, let me know.

Unresolved External Symbol

in_vgmstream.obj : error LNK2001: unresolved external symbol _snwprintf

Line 109 in winamp/in_vgmstream.c: #define wa_snprintf snwprintf

Change was added on Aug 19: Add Winamp subsong handling (disabled)

SGDX: add codec type 5

(self-reminder)
SGDX is missing codec type 5 (6ch file). Some kind of ADPCM/PCM?

The only case I found is in PS3 Afrika m0024.sgb/sgh
(out of Boku no Natsuyasumi 3, Genji PS3, Kurohyo1/2, Tokyo Jungle, Sarugetchu Sarusaru Daisakusen, Brave Story; maybe Folklore?).

m0024.zip

Feature: resume playing after N loops

Hi, I implemented a small feature. Since it's a minor thing and my implementation is a bit hacky I wanted to discuss it first.

Basically I wanted a song to continue playing normally after looping a few times, instead of just fading.
Typically, after a loop_end there is only a couple of seconds then a sudden stop, but rarely songs have proper, clean ending by the composers (instruments dropped, ellaborate fades, etc) that I wanted to keep.

I implemented it by keeping a loop_target (set in test.exe) and loop_count in the VGMSTREAM struct. When loop_count reaches loop_target the code stops looping by disabling the loop_flag (in vgmstream.c).
This was the simplest way to do it but maybe it has unforeseen side effects, since I don't fully understand the code.
I tested a few formats and it seems to work fine. If you create a WAV with the ignore-loop flag and another with 1 loop + resume-after-playing flag (which logically should be equivalent), they are byte-exact.

I only added it to test.exe (using "-I" since seemed kind of opposite to -i=ignore loops). While other plugins could use this it's only useful if you know the song has a proper fade.

Do you think it's worth adding, and maybe is there a cleaner way to do it?

Foobar2000: music not ending correctly after seeking

After seeking, music will keep playing until the "expected" playtime has ended, with the seek bar stopped at the end.
Ex. 1:00 long file, if I seek to 0:30, it'll keep playing 1min until ~1:30.

Happens with any looping file, old or new (ex. ADX), doesn't happen in Winamp.
I guess some counter is not being updated (decode_seek/decode_run?).

No seamless loop on Audacious

Using Audacious 3.7.2, I can easily play .brstm files, but with Repeat and No Playlist Advance ticked (implying it'd loop that song only) the loop points in the .brstm are not used. I have tested this with two BRSTM files downloadable from smashcustommusic here and here. The plugin was compiled with the most recent vgmstream available at the time of writing.

EDIT: I think the files may be opening using the ffmpeg plugin - I'm not seeing a listing for vgmstream in the plugin list, unless it's been misnamed.

2017-10-25-172226_1920x1080_scrot

Audacious file existence check is broken

If you'll check here:

https://github.com/audacious-media-player/audacious/blob/master/src/libaudcore/vfs.cc#L83-L108

You'll see that they don't throw an exception when file open fails, so the constructor will always succeed, it'll just produce an object which will crash the player if you try to use it. We need to report this upstream maybe, and also change our implementation to check m_impl somehow for validity before passing VFS files on to the caller.

Paging @bnnm, in case you can help with this?

Disregard, it was the fault of whoever wrote the Audacious 3 plugin, creation errors need to be checked with *ptr bool operator, not a null pointer. Null pointer check kept just in case someone builds where exceptions aren't thrown by memory allocation errors.

Resolved by fecf28f.

Certain xma files not playing properly

vgmstream plugin r1050-148-g6a4577f on foobar2000 v1.3.13

When playing xma audio(from xbox360 rip), I found 2 problems:

1. Last few seconds cut out suddenly and become silence (lost several seconds of music) before the seekbar reach the end. This happens on every xma file

2. Playback speed faster than normal. This happens on some xma file.

I also use towav.exe to decode the xma file to PCM wav, and this wave file playback with no problem I mentioned above

Here is the sample zip package
SampleXMA
contain a sample of xma file "ar2_big_lp3.xma" and "towav.exe".
towav usage:
towav.exe inputfile

Certain AT3 files not playing properly

The character voice files from Fate/Extra are not playing correctly (after dumping the cpk, it's the folder labeled "cv"). I saw somewhere online that it might be an issue with vgmstream not being able to handle mono at3, but I don't know if that's actually the case.

The files appear to be valid at3 (RIFF header, WAVEfmt, fact, data), and what's more, ffmpeg seems to be able to decode them just fine; it gives some warnings (e.g. [wav @ 000000000036b740] Non-monotonous DTS in output stream 0:0; previous: 5120
0, current: 40960; changing to 51200. This may result in incorrect timestamps in
the output file.), but it's able to produce valid wav files that play just fine.

Using ffmpeg build 8ff0f6a, 20160326 Win64 static
Using foobar2000 1.3.9
Using vgmstream plugin r1050-32-gec99511 Sep 21 2015

FFmpeg: avoid "slow" looping

FFmpeg looping only works using a "discard loop", accurate but slow (player's buffer may not make this noticeable).

Fixing it is not straightforward so I'll dump info here for future reference I may edit it later.


Seeking API
FFmpeg seeks to the closest frame (upper/lower depending on flags) of a timestamp, then one must manually discard the excess samples. Sample-to-timestamp conversion is needed (stream may use samples as time_base but not always). Internally seeking works roughly like this:

  • if implemented use read_seek (may fallback to index)
  • fallback to seek by timestamp-index
  • fallback to seek manually frame by frame (slower).
    • Due to a bug (?) this will consume the target frame (ex. seek to ts=0 > gives 2nd frame)

To avoid the 3rd case (bug+slowness) we need to set up the index; only common formats implement read_seek (ex. wav/pcm, but not msf/adx/vag) and there is no way to know if it fallbacks.
Alternatively metas could request to activate non-discard looping when it's known it works, but that still makes some formats needing discard.

Setting up the timestamp index
Index of timestamp to offset_to_seek. Ideas to find the timestamp:

  • manually: precalculate closest frame/sample + discard
    • only when block_align + frame_size is known/fixed, not all demuxers set both (could be added by metas)
    • some formats need to know the packet size (VBR only? can use block_align?)
  • during decode: (VBR)
    • pre-set target_sample = loop_start, check if need to find index (not added already)
    • each new packet: check if target_sample falls in the packet > save index_pos/dts/discard_samples
      • may need to manually calc size on next packet, index_pos-current_pos (ex mp4?)
    • when looping starts, add to index if it wasn't already

The indexed packets may need to be keyframes for the index to work (probably all audio packets are).
In init_ffmpeg an index to 0 is set up (for resets), so this can be skipped if loop_sample = 0

ADPCM / history samples
After seeking the codec state is flushed (avcodec_flush_buffers), thus the ADPCM history. Solutions:

  • Don't flush if ADPCM detected, or manually requested: may work, side effects?
  • Index frame -N, then discard: meta must signal it needs -N frames for the history to work

Seeking timestamp format
FFmpeg has DTS (decode timestamp) and PTS (presentation timestamp). Most demuxers seek by DTS, but some may use PTS. This is sometimes signaled by AVFMT_SEEK_TO_PTS but apparently not always.
The index assumes it's DTS. This may give unexpected results when mixed with a PTS demuxer.

DTS/PTS are timebases representing time units of the demuxer / stream, so they don't need to match any real value. In practice they often PTS are samples number.
Codecs and formats can use different timebases (AVStream::time_base vs AVCodecContext::time_base). Ex. video codec can be frame interval (ex, vid 25 fps, timebase=1/1000: 40 units between frames (1/25 / 1/1000). Units picked are usually so fractions give ints and audio codec in samples, and stream in timestamp.
To convert timestamps (in AVStream.time_base) to sample or the other way around:

    ts_internal_base = AV_TIME_BASE_Q;
    ts = av_rescale_q(ts_internal, ts_internal_base, 
        pFormatCtx->streams[stream_index]->time_base);

Some formats also seem to start at -1, maybe can start at any value (trac). Sometimes the stream has a first_dts/pts but not always.

Other considerations
For flexibility, it could be useful to make loop_type(enum) selectable:

  • default: fast or discard?
  • fast loop: try fast loop, if fails/-1 use discard loop
  • force discard: when seeking is known to be inexact
  • force index over read_seek: when read_seek/2 is known to be inexact

When implementing metas: must check default VS discard looping are byte-exact.
Some odd demuxers (SHN) may not seek at all due to ? (ffprobe -show_packets: N/A), I'll ignore them.

Offset seeking can be done like this, but formats that rely on internal state will have problems:

    ret = avio_seek(data->formatCtx->pb, 0, SEEK_SET);
    /*avio_flush(data->formatCtx->pb);*/
    avcodec_flush_buffers(data->codecCtx);

Some formats can avformat_seek using byte, but it's rarely implemented
To seek by offset we need to now frame sizes, but it can be erratic erratic:

 flac 0:   pkt_dts=0, pkt_pts=0, cur_dts=4096
 msf-at3:  frame_size=0,    block_align=384, get_audio_frame=1024
 msf-mp3a: frame_size=1152, block_align=17,  get_audio_frame=0
 msf-mp3b: frame_size=1152, block_align=17,  get_audio_frame=0
 msf-mp3c: frame_size=1152, block_align=81,  get_audio_frame=0
 cbr mp3:  frame_size=1152, block_align=0,   get_audio_frame=0
 vbr mp3:  frame_size=1152, block_align=0,   get_audio_frame=0
 flac:     frame_size=0,    block_align=0,   get_audio_frame=0
 at3p:     frame_size=0,    block_align=560, get_audio_frame=2048
 at3:      frame_size=0,    block_align=152, get_audio_frame=1024
 aa3.      frame_size=0,    block_align=688, get_audio_frame=2048
 sgd-ac3   frame_size=0,    block_align=0,   get_audio_frame=1536
 sgd-at3   frame_size=0,    block_align=560, get_audio_frame=2048
 aac       frame_size=1024, block_align=0,   get_audio_frame=0
 oma       frame_size=0,    block_align=744, get_audio_frame=2048

Help with Compiling

I'm a long time user, but only of pre-compiled Winamp binaries. There are a few recent additions to vgmstream that I'm interested in (particularly WWise PCM playback) but compiling from source that isn't my own is not something that's my strong suit. Is there any chance of getting instructions to compile this (I'm using Visual Studio 2015, if that matters) or better yet, a precompiled binary from the latest revision? I do apologize if there's an answer to this listed somewhere, but I did do some searching prior to posting this to no avail.

I also know this probably isn't the right place to be asking this, so I'm going to close this issue as soon as it's posted and leave a tag here ( @bnnm ) so it doesn't clutter the actual issue page.

Sorry for any inconvenience and thank you for reading my request!

Problem with XWAV playback affecting some files

Dear Sir,
just a notice from one of the humble admirers of your foobar2000
vgmstream coding works.
Alas, since the beginning of 2017 the updates of
foo_input_vgmstream.fb2k-component.zip as well as of
vgmstream...-test-u.zip (in cooperation with bnnm I think whose email
address I can't come upon so I'm left with pestering you) contain
in_vgmstream.dll / xmp-vgmstream.dll / foo_input_vgmstream.dll files
that render at least my xwav files (maybe others too) stuttering to
unhearable.
I was lucky enough to get older well working versions from 2016, that is
in_vgmstream.dll, r1050-166-g1899a20, 2016-12-27, and xmp-vgmstream.dll,
r1050-92-g577df6d, 2016-11-26, but wasn't able to find a corresponding
older version of foo_input_vgmstream.dll on the net. My OS is still
Windows XP.
Since I haven't got the slightest notion of coding myself, I hope not to
be too brash and not to disturb your workflow too much asking you to
have an occasional look at that phenomenon.
Please excuse my quirky English, my mother language is German. Thank you
very much in advance.

Attachment 2017-01-15.zip

test.exe not finding loop points in this fsb file.

music.zip
The loop points of the first substream of this fsb is at 0 and 2059263, using -l 10 generates a file that just plays once, meaning it did not find these loop points and just played through once.

FSBExtractor finds these loop points, here they are for the rest of the substreams too:
image

any plans on marking a version number?

Hi,
I am a Linux distribution maintainer. I found this software is pretty cool (^^โ™ช.

There is a problem, shall we use r1050-8xx-xxxxx as your version number when we package your software? Are there any plans on releasing or tagging a new version?

Sincerely,
Lion Yang

Update libmpg123

Paging @kode54

Some EALayer3 files needs a bugfix from the very latest libmpg123, plus seeing it's 10 years old it wouldn't hurt to update.

Official Windows build can be found here: mpg123-1.25.8-x86. Needed:

  • mpg123.h
  • fmt123.h (new file, just minor defines separated from the above)
  • libmpg123-0.dll
  • libmpg123-0.dll.def (may need renaming to libmpg123-0.def and adding "LIBRARY libmpg123-0.dll")

The DLL is swap-able, and I tested in pretty much every supported MPEG format and all worked fine, with minor +-1 sample variations (rounding?).

Could you take care of it, should I go ahead and do a PR?

(figured this would be an ok way to notify)

Certain formats can't be decoded with r1050-247-g8365af7

Hi, dear developers!
I can't play these formats below after I updated my vgmstream plugin to r1050-247-g8365af7, foobar2000 just keep saying:

Decoding failure at 0:00.000 (Unsupported format or corrupted file):

  • NDS strm
  • GC adp
  • GC dsp
  • GC agsc
  • Wii brstm
  • Wii fsb
  • Wii rwav
  • PSP oma
  • PSP at3
  • X360 xma

Attempt to implement clang-format rules

@bxaimc / @bnnm
We need to find a way to get clang-format to work on this code base. I found that it sort of works, but it mangles comments, and it will add new levels of mangling every time it processes a file.

Stuff like this:

#define MACRO \
    4 /* something something \
        */

Will happily get mutated into:

#define MACRO                                                    \
   4 /* something something \                               \
          \                                                                 \
       */

And it will add more lines full of backslashes each time it processes the file, making the comments bigger. Perhaps a bug in the Win32 snapshot I picked up today?

At the very least, try turning your tabs off when formatting files for VGMStream. If we can help it, we should be using 4 spaces, no tabs, everywhere. I see this has not been followed for years, and there are messes of tabs everywhere.

gtd.c fails to compile while building audacious plugin

make[2]: Entering directory `/home/yun/vgmstream/src/meta'
depbase=`echo gtd.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
	/bin/bash ../../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I../../audacious    -Wall -g -O2   -DVAR_ARRAYS -I../.. -I../.. -I../../ext_includes/ -g -O2   -MT gtd.lo -MD -MP -MF $depbase.Tpo -c -o gtd.lo gtd.c &&\
	mv -f $depbase.Tpo $depbase.Plo
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../../audacious -Wall -g -O2 -DVAR_ARRAYS -I../.. -I../.. -I../../ext_includes/ -g -O2 -MT gtd.lo -MD -MP -MF .deps/gtd.Tpo -c gtd.c  -fPIC -DPIC -o .libs/gtd.o
gtd.c: In function 'init_vgmstream_gtd':
gtd.c:86:1: error: expected declaration or statement at end of input
 }
 ^
gtd.c:10:23: warning: variable 'chunk_size' set but not used [-Wunused-but-set-variable]
     size_t data_size, chunk_size;
                       ^
gtd.c:10:12: warning: variable 'data_size' set but not used [-Wunused-but-set-variable]
     size_t data_size, chunk_size;
            ^
make[2]: *** [gtd.lo] Error 1

foobar randomly prints wrong metadata

Rarely foobar will show weird strings in the properties dialog for some files, when adding a bunch.
Ex. "codec: Binsamplerate" (instead of "Bink") or "codec: Xbox Med", other tags also may fail.

Surely something I broke in the last update here, but I don't see anything weird plus it's hard to replicate.

Maybe string8_fast / p_info.info_set are not thread-safe or something dumb I missed? (paging @kode54).

No way to select stream numbers (Only first 3 stereo channels of LittleBigPlanet's interactive FSBs can be accessed)

When using vgmstream, we can only access the first three stereo channels of an interactive LittleBigPlanet FSB, even though in the game those interactive tracks are usually twice the amount of that. Going past the those three stereo channels repeats the same ones again but with crackles being added to them. (example of crackle issue) Using fsbext, it's possible to get all the channels from the FSB files using the command -M.

Sample file (i_pod.fsb)

Some AT3 files crash

[I was noticing that some PSP rips seemed to be working and some didn't, crashing the player upon adding to playlist. With Wild ARMs XF, every at3 is fine except "415b Noriyasu Agematsu - FINAL DISASTER (1).at3"]

FSB5 Multi-stream some files do not play properly, sounding garbled

I am browing to my great delight the FSB5 FFX archive: however, certain songs (usually towards the end of the stream) are absolutely unplayable and garbled, in both the remaster and PS2 stream.

Specifically, "Summoned beast battle" in the ps2 stream (amongst many others) and a couple of the very last ones of the Remastered stream (fewer than the ps2 stream) are garbled. Very. Converting doesn't fix them.

Sound format is identified as XBOX 4-bit IMA ADPCM.

sample is greater than 1 gb so will upload later.

EDIT: DELETED
Folder with the FSB files.

XBOX 4-bit IMA ADPCM (WAD Decibels Explosion)

Game : Tony Hawk's Underground 2 (Xbox)
File : music_pcm.wad
Channels : 2
Frequency : 48000
Interleave : 0x18000
Output : genh file

Genh on foobar : 9 tracks of the mix plays perfectly, the rest is an explosion of decibels along with the music.
There is probably something going wrong in the treatement.

I can provide the source files if necessary.

Screenshot of genh to flac
screenshot_1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.