add README.md
This commit is contained in:
parent
8cdf252905
commit
d9774f3000
1 changed files with 91 additions and 0 deletions
91
README.md
Normal file
91
README.md
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
= About =
|
||||||
|
|
||||||
|
This Python script is able to extract all music tracks from a Runescape cache.
|
||||||
|
It is not necessary to have the game installed. Only the cache files need to be
|
||||||
|
present in a directory. Specifically the files `main_file_cache.dat2`,
|
||||||
|
`main_file_cache.idx17` and `main_file_cache.idx40` are needed.
|
||||||
|
|
||||||
|
= Usage =
|
||||||
|
|
||||||
|
If you have Runescape installed, you can find the cache in your user directory
|
||||||
|
in `jagexcache/runescape/LIVE/`. If you run Runescape under Wine, then they
|
||||||
|
will be located in
|
||||||
|
`$WINEPREFIX/drive_c/windows/profiles/josch/jagexcache/runescape/LIVE/`.
|
||||||
|
|
||||||
|
Then run the script like this:
|
||||||
|
|
||||||
|
./rsmusicextract.py path/to/cache path/for/extracted/files
|
||||||
|
|
||||||
|
You can omit the path to extract the music files to, in which case the program
|
||||||
|
will only list which music tracks are available.
|
||||||
|
|
||||||
|
You can also add the `--incomplete` option in which case also incomplete music
|
||||||
|
tracks will be extracted (or displayed in case you omitted the directory to
|
||||||
|
extract to).
|
||||||
|
|
||||||
|
= Combining the music =
|
||||||
|
|
||||||
|
If an output directory is given, then the script will create it if necessary
|
||||||
|
and extract the individual music chunks into subdirectories which are named
|
||||||
|
after the music track they belong to. The chunks are mostly either 3.918 s or
|
||||||
|
7.836 s long.
|
||||||
|
|
||||||
|
Each individual chunk is an ogg vorbis file which, when concatenated, make the
|
||||||
|
full music track. They are numbered sequentially to concatenate them in the
|
||||||
|
right order.
|
||||||
|
|
||||||
|
The vorbis container format allows to concatenate multiple vorbis files by
|
||||||
|
simply running (on unix-like operating systems):
|
||||||
|
|
||||||
|
cat file1.ogg file2.ogg file3.ogg > combined.ogg
|
||||||
|
|
||||||
|
The problem is, that there are some players which either do not support ogg
|
||||||
|
files of that kind and will only play the very first chunk or which add
|
||||||
|
split-second pauses between the individual parts. Even using the ffmpeg concat
|
||||||
|
demuxer will leave audible gaps between the individual chunks. I posted the
|
||||||
|
following questions to find a solution to this problem:
|
||||||
|
|
||||||
|
- http://superuser.com/questions/864911/lossless-concatenation-of-ogg-vorbis-files
|
||||||
|
- http://stackoverflow.com/questions/27980960/how-to-lossless-concatenate-ogg-vorbis-files
|
||||||
|
|
||||||
|
Until that problem is solved, you can concatenate the individual tracks in a
|
||||||
|
single file by re-encoding the output stream. To not loose any quality, flac
|
||||||
|
can be used as the codex. The following snippet will combine the individual ogg
|
||||||
|
chunks in every directory into a single file of the same name:
|
||||||
|
|
||||||
|
$ mkdir combined
|
||||||
|
$ for dir in */; do \
|
||||||
|
dir=${dir%*/}; \
|
||||||
|
sox --combine concatenate "$dir"/* -C 8 "combined/$dir.flac"; \
|
||||||
|
done
|
||||||
|
|
||||||
|
= Origin =
|
||||||
|
|
||||||
|
This code is inspired by RSCacheTool by Villermen:
|
||||||
|
|
||||||
|
https://github.com/Villermen/RSCacheTool
|
||||||
|
|
||||||
|
It especially benefits from the reverse engineering that was done to create
|
||||||
|
that tool.
|
||||||
|
|
||||||
|
This script was written because of certain fundamental design shortcomings of
|
||||||
|
RSCacheTool which made it suboptimal for my use case. For example, to just list
|
||||||
|
all music tracks, RSCacheTool first has to extract all files from archive 40
|
||||||
|
which can take up a couple of gigabytes of disk space.
|
||||||
|
|
||||||
|
While RSCacheTool aims to be a swiss army knife for Runescape cache files, this
|
||||||
|
script only wants to provide the means to display and extract the Runescape
|
||||||
|
music from Runescape cache files.
|
||||||
|
|
||||||
|
RSCacheTool also has to be run in two stages to extract and name the music
|
||||||
|
track. This script does both actions in one go.
|
||||||
|
|
||||||
|
This script works "the other way round" compared to RSCacheTool. While
|
||||||
|
RSCacheTool first extracts all files and allows to rename them later, this
|
||||||
|
script will first extract the list of all available music and then extract the
|
||||||
|
necessary files from the archive. This allows to list all available music
|
||||||
|
tracks without having to extract them first.
|
||||||
|
|
||||||
|
Finally, because of its simplicity, this script is only 20% of the length of
|
||||||
|
RSCacheTool. For example it does not attempt to join the extract music as this
|
||||||
|
can be done by a small shell invocation as demonstrated above.
|
Loading…
Reference in a new issue