mirror of
https://github.com/vgmstream/vgmstream.git
synced 2025-01-17 23:36:41 +01:00
Update docs
This commit is contained in:
parent
7e48a38385
commit
ef3ba857f5
50
BUILD.md
50
BUILD.md
@ -17,14 +17,14 @@
|
|||||||
|
|
||||||
## Compiling modules
|
## Compiling modules
|
||||||
|
|
||||||
### CLI (test.exe) / Winamp plugin (in_vgmstream) / XMPlay plugin (xmp-vgmstream)
|
### CLI (test.exe/vgmstream-cli) / Winamp plugin (in_vgmstream) / XMPlay plugin (xmp-vgmstream)
|
||||||
|
|
||||||
**With GCC**: use the *./Makefile* in the root folder, see inside for options. For compilation flags check the *Makefile* in each folder.
|
**With GCC**: use the *./Makefile* in the root folder, see inside for options. For compilation flags check the *Makefile* in each folder.
|
||||||
You need to manually rebuild if you change a *.h* file (use *make clean*).
|
You need to manually rebuild if you change a *.h* file (use *make clean*).
|
||||||
|
|
||||||
In Linux, Makefiles can be used to cross-compile with the MingW headers, but may not be updated to generate native code at the moment. It should be fixable with some effort.
|
In Linux, Makefiles can be used to cross-compile with the MingW headers, but may not be updated to generate native code at the moment. It should be fixable with some effort. Autotools should build it as vgmstream-cli instead (see the Audacious section).
|
||||||
|
|
||||||
Windows CMD example for test.exe:
|
Windows CMD example:
|
||||||
```
|
```
|
||||||
prompt $P$G$_$S
|
prompt $P$G$_$S
|
||||||
set PATH=C:\Program Files (x86)\Git\usr\bin;%PATH%
|
set PATH=C:\Program Files (x86)\Git\usr\bin;%PATH%
|
||||||
@ -91,24 +91,24 @@ Windows builds aren't supported at the moment (should be possible but there are
|
|||||||
|
|
||||||
Terminal example, assuming a Ubuntu-based Linux distribution:
|
Terminal example, assuming a Ubuntu-based Linux distribution:
|
||||||
```
|
```
|
||||||
# get libraries
|
# build requirements
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
|
|
||||||
sudo apt-get install audacious
|
|
||||||
|
|
||||||
sudo apt-get install git
|
|
||||||
sudo apt-get install gcc g++ make
|
sudo apt-get install gcc g++ make
|
||||||
sudo apt-get install autoconf automake libtool
|
sudo apt-get install autoconf automake libtool
|
||||||
sudo apt-get install audacious-dev libmpg123-dev libvorbis-dev libglib2.0-dev libgtk2.0-dev libpango1.0-dev
|
sudo apt-get install git
|
||||||
|
# vgmstream dependencies
|
||||||
|
sudo apt-get install libmpg123-dev libvorbis-dev
|
||||||
|
# Audacious player and dependencies
|
||||||
|
sudo apt-get install audacious
|
||||||
|
sudo apt-get install audacious-dev libglib2.0-dev libgtk2.0-dev libpango1.0-dev
|
||||||
|
|
||||||
# check audacious version
|
# check Audacious version >= 3.5
|
||||||
pkg-config --modversion audacious
|
pkg-config --modversion audacious
|
||||||
|
|
||||||
|
# build
|
||||||
git clone https://github.com/kode54/vgmstream
|
git clone https://github.com/kode54/vgmstream
|
||||||
cd vgmstream
|
cd vgmstream
|
||||||
|
|
||||||
|
|
||||||
# build
|
|
||||||
./bootstrap
|
./bootstrap
|
||||||
./configure
|
./configure
|
||||||
make -f Makefile.audacious
|
make -f Makefile.audacious
|
||||||
@ -117,7 +117,7 @@ make -f Makefile.audacious
|
|||||||
sudo make -f Makefile.audacious install
|
sudo make -f Makefile.audacious install
|
||||||
|
|
||||||
|
|
||||||
# post-cleanup
|
# optional post-cleanup
|
||||||
make -f Makefile.audacious clean
|
make -f Makefile.audacious clean
|
||||||
find . -name ".deps" -type d -exec rm -r "{}" \;
|
find . -name ".deps" -type d -exec rm -r "{}" \;
|
||||||
./unbootstrap
|
./unbootstrap
|
||||||
@ -125,6 +125,12 @@ find . -name ".deps" -type d -exec rm -r "{}" \;
|
|||||||
git clean -fd
|
git clean -fd
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# vgmstream123 player
|
||||||
|
Should be buildable with Autotools, much like the Audicious plugin, though requires libao (libao-dev).
|
||||||
|
|
||||||
|
Windows builds aren't supported at the moment (source may need to be adapted for non-POSIX systems).
|
||||||
|
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
### Code
|
### Code
|
||||||
@ -146,7 +152,7 @@ There are no hard coding rules but for consistency should follow general C conve
|
|||||||
./src/coding/ format data decoders
|
./src/coding/ format data decoders
|
||||||
./src/layout/ format data demuxers
|
./src/layout/ format data demuxers
|
||||||
./src/meta/ format header parsers
|
./src/meta/ format header parsers
|
||||||
./test/ test.exe CLI
|
./test/ CLI tools
|
||||||
./winamp/ Winamp plugin
|
./winamp/ Winamp plugin
|
||||||
./xmplay/ XMPlay plugin
|
./xmplay/ XMPlay plugin
|
||||||
```
|
```
|
||||||
@ -226,6 +232,22 @@ Every call the decoder will need to find out the current frame offset (usually p
|
|||||||
|
|
||||||
If the decoder needs to keep state between calls it may use the VGMSTREAM for common values (like ADPCM history), or alloc a custom data struct. In that case the decoder should provide init/free functions so the meta or vgmstream may use. This is the case with decoders implemented using external libraries (*ext_libs*), as seen in *#ifdef VGM_USE_X ... #endif* sections.
|
If the decoder needs to keep state between calls it may use the VGMSTREAM for common values (like ADPCM history), or alloc a custom data struct. In that case the decoder should provide init/free functions so the meta or vgmstream may use. This is the case with decoders implemented using external libraries (*ext_libs*), as seen in *#ifdef VGM_USE_X ... #endif* sections.
|
||||||
|
|
||||||
|
Adding a new decoder involves:
|
||||||
|
- *src/coding/(decoder-name).c*: create `decode_x` function that decodes stream data into the passed sample buffer. If the codec requires custom internals it may need `init/reset/seek/free_x`, or other helper functions.
|
||||||
|
- *src/coding/coding.h*: define decoder's functions.
|
||||||
|
- *src/vgmstream.h*: define new coding type in the list. If the codec requires custom internals, define new `x_codec_data` struct.
|
||||||
|
- *src/vgmstream.c: reset_vgmstream*: call `reset_x` if needed
|
||||||
|
- *src/vgmstream.c: close_vgmstream*: call `free_x` if needed
|
||||||
|
- *src/vgmstream.c: get_vgmstream_samples_per_frame*: define so vgmstream only asks for N samples per decode_x call. May return 0 if variable/unknown/etc (decoder must handle setting arbitrary number of samples)
|
||||||
|
- *src/vgmstream.c: get_vgmstream_frame_size*: define so vgmstream can do certain internal calculations. May return 0 if variable/unknown/etc, but blocked/interleave layouts will need to be used in a certain way.
|
||||||
|
- *src/vgmstream.c: decode_vgmstream*: call `decode_x`, possibly once per channel if the decoder works with a channel at a time.
|
||||||
|
- *src/vgmstream.c: vgmstream_do_loop*: call `seek_x` if needed
|
||||||
|
- *src/vgmstream.c: reset_vgmstream*: call `reset_x` if needed
|
||||||
|
- *src/formats.c*: add coding type description
|
||||||
|
- *src/libvgmstream.vcproj/vcxproj/filters*: add to compile new (decoder-name).c parser in VS
|
||||||
|
- *src/vgmstream.c*: add parser init to the init list
|
||||||
|
- if the codec depends on a external library don't forget to mark parts with: *#ifdef VGM_USE_X ... #endif*
|
||||||
|
|
||||||
#### core
|
#### core
|
||||||
The vgmstream core simply consists of functions gluing the above together and some helpers (ex.- extension list, loop adjust, etc).
|
The vgmstream core simply consists of functions gluing the above together and some helpers (ex.- extension list, loop adjust, etc).
|
||||||
|
|
||||||
|
13
README.md
13
README.md
@ -4,11 +4,12 @@ This is vgmstream, a library for playing streamed (pre-recorded) audio
|
|||||||
from video games.
|
from video games.
|
||||||
|
|
||||||
There are multiple end-user bits:
|
There are multiple end-user bits:
|
||||||
- a command line decoder called "test.exe"
|
- a command line decoder called "test.exe/vgmstream-cli"
|
||||||
- a Winamp plugin called "in_vgmstream"
|
- a Winamp plugin called "in_vgmstream"
|
||||||
- a foobar2000 component called "foo_input_vgmstream"
|
- a foobar2000 component called "foo_input_vgmstream"
|
||||||
- an XMPlay plugin called "xmp-vgmstream"
|
- an XMPlay plugin called "xmp-vgmstream"
|
||||||
- an Audacious plugin called "libvgmstream"
|
- an Audacious plugin called "libvgmstream"
|
||||||
|
- a command line player called "vgmstream123"
|
||||||
|
|
||||||
Help and newest builds can be found here: https://www.hcs64.com/
|
Help and newest builds can be found here: https://www.hcs64.com/
|
||||||
|
|
||||||
@ -27,10 +28,10 @@ Put ```libvorbis.dll```, ```libmpg123-0.dll```, ```libg7221_decode.dll```, ```li
|
|||||||
```avutil-vgmstream-56.dll``` and ```swresample-vgmstream-3.dll``` somewhere Windows can
|
```avutil-vgmstream-56.dll``` and ```swresample-vgmstream-3.dll``` somewhere Windows can
|
||||||
find them.
|
find them.
|
||||||
|
|
||||||
For Winamp/XMPlay/test.exe this means in the directory with the .exe, or in a
|
For Winamp/XMPlay/command line this means in the directory with the main .exe,
|
||||||
system directory, or any other directory in the PATH variable.
|
or in a system directory, or any other directory in the PATH variable.
|
||||||
|
|
||||||
### test.exe
|
### test.exe/vgmstream-cli
|
||||||
```
|
```
|
||||||
Usage: test.exe [-o outfile.wav] [options] infile
|
Usage: test.exe [-o outfile.wav] [options] infile
|
||||||
Options:
|
Options:
|
||||||
@ -77,6 +78,9 @@ Every file should be installed automatically by the .fb2k-component bundle.
|
|||||||
### Audacious plugin
|
### Audacious plugin
|
||||||
Needs to be manually built. Instructions can be found in the build document.
|
Needs to be manually built. Instructions can be found in the build document.
|
||||||
|
|
||||||
|
### vgmstream123
|
||||||
|
Needs to be manually built. Instructions can be found in the build document.
|
||||||
|
|
||||||
## Supported codec types
|
## Supported codec types
|
||||||
Quick list of codecs vgmstream supports, including many obscure ones that
|
Quick list of codecs vgmstream supports, including many obscure ones that
|
||||||
are used in few games.
|
are used in few games.
|
||||||
@ -127,6 +131,7 @@ are used in few games.
|
|||||||
- Bink
|
- Bink
|
||||||
- AC3/SPDIF
|
- AC3/SPDIF
|
||||||
- Xiph Opus (Ogg, Switch)
|
- Xiph Opus (Ogg, Switch)
|
||||||
|
- Musepack
|
||||||
- FLAC
|
- FLAC
|
||||||
- Others
|
- Others
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user