1
0
mirror of https://github.com/ScrelliCopter/VGM-Tools synced 2025-02-21 04:09:25 +11:00

Compare commits

5 Commits

Author SHA1 Message Date
6d60ea91c0 update README.md 2019-09-27 16:16:50 +10:00
6164533c1a port autoextract to shell 2019-09-27 15:58:08 +10:00
7c5a577fba makefile for crappy vgm pcm scanner util 2019-09-26 22:54:08 +10:00
7e0740d03a adpcm decoders compiling on loonix 2019-09-26 22:06:51 +10:00
c1a5003a82 batch should be crlf I guess 2019-09-26 14:53:40 +10:00
8 changed files with 103 additions and 88 deletions

5
neotools/.gitignore vendored
View File

@@ -4,3 +4,8 @@
*.log *.log
*.pcm *.pcm
*.wav *.wav
*.o
adpcm
adpcmb
neoadpcmextract

View File

@@ -1,32 +1,46 @@
Neo-Geo VGM tools Neo-Geo VGM tools
----------------- =================
A hodge-podge of tools for working on NG VGM files, A hodge-podge of tools for working on NG VGM files,
these files are provided in the hope that they may be useful to someone. these files are provided in the hope that they may be useful to someone.
Makefiles have currently not been tested but shouldn't be hard to get working.
Windows binaries are available under the Releases tab.
Included tools (sources included). Included tools (sources included).
- **adpcm.exe**: - **adpcm**:
ADPCM Type-A to WAV converter. ADPCM Type-A to WAV converter.
- **adpcmb.exe**: - **adpcmb**:
ADPCM Type-B encoding tool that also does decoding to WAV. ADPCM Type-B encoding tool that also does decoding to WAV.
- **neoadpcmextract.exe**: - **neoadpcmextract**:
Scans a .vgm and dumps all ADPCM type A&B data to raw .pcm files. Scans a .vgm and dumps all ADPCM type A&B data to raw .pcm files.
- **autoextract.bat**: - **autoextract**:
Convenience batch script that uses the above tools to dump all samples to WAVs. Convenience shell/batch script that uses the above tools to dump all samples to WAVs.
Building
--------
Linux:
```shell script
make -f adpcm.Makefile
make -f adpcmb.Makefile
make -f neoadpcmextract.Makefile
```
Windows:
- The updated Makefiles haven't been tested on Windows yet.
- Working Windows binaries are available from the [Releases](https://github.com/ScrelliCopter/VGM-Tools/releases) tab.
How to use How to use
---------- ----------
Copy your .vgz into this directory, drag it onto autoextract.bat, Linux:
the script will create a directory of the same name and dump all the converted samples there. - Run `./autoextract.sh` from this directory with a path to your .vgm or .vgz,
a directory for the song will be created containing wav samples.
Windows:
- You will need gzip.exe (provided with the aforementioned release).
- Copy your .vgm or .vgz into this directory, drag it onto autoextract.bat,
the script will create a directory of the same name and dump all the converted samples there.
That's all there is to it. That's all there is to it.
TODO TODO
---- ----
- Replace the batch script with something less shite (and actually cross-platform). - Unify all tools into one & obsolete the crappy glue scripts.
- Write a makefile for neoadpcmextract.
- Make this stuff build on Linux.

View File

@@ -1,70 +1,34 @@
# Standard makefile to use as a base for DJGPP projects # Standard makefile to use as a base for DJGPP projects (not anymore lol)
# By MARTINEZ Fabrice aka SNK of SUPREMACY # By MARTINEZ Fabrice aka SNK of SUPREMACY
# Programs to use during make # Programs to use during make
AR = ar LD := $(CC)
CC = gcc
LD = gcc
ASM = nasm
PACKER = upx
# Flags for debugging TARGET := adpcm
#DEBUG=1 SOURCE := adpcm.c
#SYMBOLS=1
# Flags for compilation # Flags for compilation
ASMFLAGS = -f coff CFLAGS := -fomit-frame-pointer -O3 -Werror -Wall \
ifdef SYMBOLS
CFLAGS = -o -mpentium -Wall -Werror -g
LDFLAGS = -s
else
CFLAGS = -fomit-frame-pointer -O3 -mpentium -Werror -Wall \
-W -Wno-sign-compare -Wno-unused \ -W -Wno-sign-compare -Wno-unused \
-Wpointer-arith -Wbad-function-cast -Wcast-align -Waggregate-return \ -Wpointer-arith -Wbad-function-cast -Wcast-align -Waggregate-return \
-pedantic \ -pedantic \
-Wshadow \ -Wshadow \
-Wstrict-prototypes -Wstrict-prototypes
LDFLAGS = LDFLAGS := -lm
endif
CDEFS =
ASMDEFS =
# Object files # Object files
MAINOBJS = OBJECT := $(SOURCE:%.c=%.o)
# Library files
MAINLIBS = obj/adpcm.a
# Make rules # Make rules
all: adpcm.exe all: $(TARGET)
adpcm.exe: $(MAINOBJS) $(MAINLIBS) $(TARGET): $(OBJECT)
$(LD) $(LDFLAGS) $(MAINOBJS) $(MAINLIBS) -o $@ $(LD) $(CFLAGS) $(LDFLAGS) $^ -o $@
src/%.asm: %.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
obj/%.o: src/%.c
$(CC) $(CDEFS) $(CFLAGS) -c $< -o $@
obj/%.oa: src/%.asm
$(ASM) -o $@ $(ASMFLAGS) $(ASMDEFS) $<
obj/%.a:
$(AR) cr $@ $^
# Rules to manage files # Rules to manage files
pack: adpcm.exe .PHONY: clean
$(PACKER) adpcm.exe
mkdir:
md obj
clean: clean:
del obj\*.o rm -f $(TARGET) $(OBJECT)
del obj\*.a
del obj\*.oa
del *.exe
# Rules to make libraries
obj/adpcm.a: obj/adpcm.o
# obj/decode.oa \

View File

@@ -1,8 +1,6 @@
#include <process.h>
#include <stdio.h> #include <stdio.h>
#include <mem.h> #include <stdlib.h>
#include <math.h> #include <math.h>
#include <io.h>
#define BUFFER_SIZE 1024*256 #define BUFFER_SIZE 1024*256
#define ADPCMA_VOLUME_RATE 1 #define ADPCMA_VOLUME_RATE 1
@@ -70,8 +68,11 @@ int main(int argc, char *argv[])
} }
adpcm_init(); adpcm_init();
Filelen = filelength(fileno(Fp1)); fseek(Fp1, 0, SEEK_END);
Filelen = ftell(Fp1);
fseek(Fp1, 0, SEEK_SET);
*((unsigned int*)(&RiffWave[4])) = Filelen*4 + 0x2C; *((unsigned int*)(&RiffWave[4])) = Filelen*4 + 0x2C;
*((unsigned int*)(&RiffWave[0x28])) = Filelen*4; *((unsigned int*)(&RiffWave[0x28])) = Filelen*4;

View File

@@ -4,7 +4,7 @@ CFLAGS = -O3
SRC = . SRC = .
OBJ = . OBJ = .
OUT_OBJ = $(OBJ)/adpcmb.exe OUT_OBJ = $(OBJ)/adpcmb
all: $(OUT_OBJ) all: $(OUT_OBJ)

View File

@@ -1,19 +1,19 @@
if ["%~x1"]==[".vgz"] goto vgztopcm else goto vgmtopcm if ["%~x1"]==[".vgz"] goto vgztopcm else goto vgmtopcm
:vgmtopcm :vgmtopcm
neoadpcmextract.exe %1 neoadpcmextract.exe %1
goto pcmtowav goto pcmtowav
:vgztopcm :vgztopcm
copy /y %1 temp.vgm.gz copy /y %1 temp.vgm.gz
gzip.exe -d temp.vgm.gz gzip.exe -d temp.vgm.gz
neoadpcmextract.exe temp.vgm neoadpcmextract.exe temp.vgm
del temp.vgm del temp.vgm
goto pcmtowav goto pcmtowav
:pcmtowav :pcmtowav
for /r %%v in (smpa_*.pcm) do adpcm.exe "%%v" "%%v.wav" for /r %%v in (smpa_*.pcm) do adpcm.exe "%%v" "%%v.wav"
for /r %%v in (smpb_*.pcm) do adpcmb.exe -d "%%v" "%%v.wav" for /r %%v in (smpb_*.pcm) do adpcmb.exe -d "%%v" "%%v.wav"
del "*.pcm" del "*.pcm"
mkdir "%~n1" mkdir "%~n1"
move "*.wav" "%~n1" move "*.wav" "%~n1"

19
neotools/autoextract.sh Executable file
View File

@@ -0,0 +1,19 @@
#!/bin/sh
FILE="$1"
NAME="$(basename "$FILE")"
WAVDIR="${NAME%%.*}"
if [ "${NAME##*.}" = "vgz" ]; then
cp "$FILE" "temp.vgm.gz"
gzip -d "temp.vgm.gz"
FILE="temp.vgm"
fi
./neoadpcmextract "$FILE"
mkdir -p "$WAVDIR"
for I in smpa_*.pcm; do ./adpcm "$I" "$WAVDIR/${I%%.*}.wav"; done
for I in smpb_*.pcm; do ./adpcmb -d "$I" "$WAVDIR/${I%%.*}.wav"; done
find . -type f -name "*.pcm" -exec rm -f {} \;
[ "$FILE" = "temp.vgm" ] && rm -f "temp.vgm"

View File

@@ -0,0 +1,12 @@
TARGET := neoadpcmextract
SOURCE := neoadpcmextract.cpp
CXXFLAGS := -O2 -pipe -Wall -Wextra
all: $(TARGET)
$(TARGET): $(SOURCE)
$(CXX) $(CXXFLAGS) $< -o $@
.PHONY: clean
clean:
rm -f $(TARGET)