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

Reorganised slightly, and added my spc sample ripper + spc2it.

This commit is contained in:
2018-09-03 02:45:47 +10:00
parent 48dcc09399
commit 45ec9cf2cf
28 changed files with 6195 additions and 0 deletions

296
spctools/spc2it/doc/OPENSPC.TXT Executable file
View File

@@ -0,0 +1,296 @@
This is a modified version of OpenSPC 0.301, improved by Dwedit,
with support of fractional update rates to generate better IT files.
See http://www.romhacking.net/forum/index.php?topic=10164.0
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
OpenSPC ver.301
/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\
Intro
-----
OpenSPC is an SPC Player created using a modified version of SNEeSe's ASM SPC
core. The rest was written in C using DJGPP. You can find new versions and
a FAQ for OpenSPC at:
http://home.gvi.net/~martin
OpenSPC was created by Butcha, and has been contributed to by Cyber Warrior X,
Crono, Kadar, and Cait Sith 2.
++++++++++++++++
Table of Contents
--------------------------------------------
1.) What's New
2.) Disclaimer and License
3.) System Requirements
4.) Current Progress
5.) Future Progress
6.) Configuration File
7.) IT Dumping
8.) Credits/Special Thanks
+++++++++++++
1.) What's New
--------------------------------------------
v0.301 - Relatively small update
* Added ID support for SPC files (thanks to Cait Sith 2). Displays info for
SPC files that contain it, in both the lite version and the full version,
non-gui mode.
* Changed "SPC->IT conversion" name in IT files to the ID song name if
specified in SPC file.
* Updated to SNEeSe version .36 SPC code, including all optimizations and
bugfixes that were present in it.
v0.300 - Another big (and overdue) update
* Prevented notes that are out of IT's range from writing the invalid data -
prevents IT corruption, but probably still won't sound quite right.
* Checked for invalid loop points supplied by an SPC file (wouldn't think
you'd *need* to check... %#!@$).
* Updated display screen with new pitch when sliding.
* Fixed rare bug which allowed volumes with opposite signs in both channels
to cancel each other out when in mono mode.
* Corrected bug where if a voice was keyed off at the same time the sample
ended, the voice would not get turned off. Prevents the big long strings of
note cut commands sometimes seen in the IT files.
* Decided to scrap my sound drivers in favor of Allegro's. This means both
the Ensoniq SoundScape and ESS AudioDrive should now be supported in addition
to all SoundBlaster types. Note only the sound driver, not the mixer, has
been replaced.
* As a side effect of this, the onscreen display updates slower now, because
Allegro requires much more sound data to be mixed and delivered at once.
This is much more noticable with frequencies less than 22050 Hz.
* Config file rewritten to reflect changes in sound driver. Should still be
compatible if you have any old frontends, but I'm not sure.
* Corrected a bug in ADSR/GAIN which could cause the envelope height to wrap
around infinitely. (Jurassic Park)
* Implemented main volume registers
* Changed to the newest version of SNEeSe SPC core. TCALL (and therefore
Terranigma) now works! Other optimizations and fixes are also present.
* Changed to SNEeSe's SPC timer code. Timers are now cycle-exact rather than
calculated once every update.
* Reimplemented ADSR/GAIN in the style of the timer code, which means it is
now cycle-exact. Any song that changed envelope states while monitoring ENVX
should now work much better.
* Doubled output volume both in the mixer and in IT dumping. This can
potentially cause clipping distortion while mixing and maxed-out volumes in
IT files if the volume ever gets too high, but it seems SNES games rarely
use high volume which is why it sounded so quiet in the first place.
* Fixed up the display for text mode. Colors and layout should be identical
to the graphics mode, especially if used with an 80x50 screen. Use setgui=2
in the config file to activate.
* Implemented a command line switch equivalent to the setgui parameter in the
config file. (-g x)
* Fixed up the colors on the display and allowed the colors to be changed in
the config file.
* Did a little cleaning and optimization of the source code.
v0.200 - Lots new in this version
* Allowed IT dumping with other than 200 rows/pattern (change in CFG file)
* Fixed bug with volume and IT dumping (played too loud and would
sometimes result in undesired volume column effects being applied)
* Fixed segmentation fault bug when a negative volume applied to a channel
* Fixed a bug with GAIN linear decrease mode
* Fixed file loader bug when filename preceded with "..\" <Doh, stupid me>
* Fixed file loader bug when loading files with extension .SP1, .SP2, etc.
* Increased number of SPC cycles to execute, while simultaneously
implementing system to pause emulation if SPC idle. Should prevent games
like Starfox from slowing down and speeding up, and *might* even save some
CPU power in other games
* Got rid of the "SPC Sample" for samples without lengths. (Thanks to Crono)
* Added .IT pattern compression. (Crono)
* Reduced memory requirements when *NOT* logging a .IT file (Crono)
* Now uses "specific" mixing method for each style of output. (Crono)
* Old Soundblaster drivers tweaked, should sound better and can now go up to
45454 Hz. May introduce some incompatibility, let me know. (Crono)
* Soundblaster Pro drivers tweaked, hopefully sound better. (Crono)
* Moved actual emulation stuff from main.c to emu.c. main.c now only
contains main() and other graphics-related stuff.
* Added support for Ensoniq Soundscape, SoundFX and MediaFX cards (thanks to
Kadar)
* Added support for non-standard IRQs. Let me know if you still have
problems getting it to play on your SB-compatible sound card.
* Found and eliminated something WinAmp wasn't liking about the way unlooped
samples were saved.
* Created 'lite' version! Now capture SPC's to either IT or WAV files
direct to disk at maximum speed rather than having to listen to them.
Uses command line options to specify parameters. (Replaced 'main.c' with
'lite.c' and removed sound drivers in project file)
* Added many of the same command line options to the full version. If no
options are specified it will default to what's in the OPENSPC.CFG file.
* Added a preset time limit and current time indicator to both versions.
* Replaced the SNEeSe SPC core with a newer version; had hoped this would fix
some SPC bugs, but no luck there. Oh well, hopefully its faster or
something.
* Broke down and did some SPC debugging myself; managed to get Prince of
Persia, WWF, Doom, FF2 (Fabul Castle), SOM2 (Boss Theme), and Simpsons:
Bart's Nightmare working a lot better.
Details: - all SBC to memory were subtracting in the wrong order
- CMP YA, dp didn't complement the carry flag
- membit addressing mode operand bits were mapped incorrectly
* Corrected some bugs in GAIN Increase and Decrease modes and re-enabled
ENVX reporting; made WWF, Doom, and Simpsons sound even better.
* Added a reverse stereo option for those of you experiencing swapped sound
channels with an SBPro compatible.
v0.100 - Initial release
+++++++++++++++++++++++++
2.) Disclaimer and License
--------------------------------------------
This program is still considered to be in beta status. Neither Butcha nor any
of the other contributors are responsible for any undesirable effects of using
this program. Also, none of the authors are responsible for the possesion or
use of any copyrighted material taken from copyrighted ROMs using this
program.
Please do not redistribute this program without its included documentation.
Also, do not package this program with SPC or IT files from copyrighted games.
++++++++++++++++++++++
3.) System Requirements
--------------------------------------------
The light version should have very few requirements. Probably a 386 with an
FPU could run it, but I can't say for sure. Memory shouldn't be a problem as
long as you have some available swap space. The following are some tentative
guidelines for the full version:
Minimum Recommended System:
- 486/100 processor
- 8MB RAM
- Sound Blaster or compatible card
Strongly Recommended System :
- Pentium processor (P133 or higher)
- The more RAM the merrier (especially with Windows 9x)
- VGA card (for graphical display)
- Sound Blaster 16 or 100% compatible
+++++++++++++++++++
4.) Current Progress
--------------------------------------------
The following are implemented in the sound engine:
- 16bit digital stereo sound
- SPC700 Sound CPU (likely still bugs to be found)
- FULL ADSR and GAIN volume effects (now cycle-exact!)
- Song capture in the IT format
- Sound recording to WAV format (lite version only)
The following are missing in the sound engine:
- ECHO
- FIR filter
- Noise
- Modulation
The following are some known bugs:
- If the pitch changes too fast while a note is on, an IT file will not be
able to reproduce it fast enough, resulting in a subtle "rounding" effect.
(i.e. FF3 Atma Weapon)
- A few games' music doesn't like being played with a fixed update-per-second
method, resulting in unpredictable effects
- Any game that changes the sample location or data while playing will sound
strange (Doom, Cannon Fodder). No easy work around this, because ITs always
expect the same sample to stay the same.
- Dragon Quest seems to have some severe bugs, no idea why
++++++++++++++++++
5.) Future Progress
--------------------------------------------
Future progress is completely indefinite at this point, due to my currently
attending college at UMR. I haven't had a lot of free time here, and that
which I do have I will most likely be devoted to other things. As far as
major features missing from the program go, there isn't a whole lot more
I can add, because it wouldn't transfer into an IT file anyway (echo, filter).
Noise and modulation might be possibilities, I'd have to look more into it. I
would like to have a much better display, but I keep saying that and never get
around to working on it. Also, there are the above bugs to fix. I would
however like to rewrite the IT code to save more data temporarily into a
proprietary format, and then convert this data to an IT file. This would make
it easier for other people to add support for other filetypes. It could also
make the IT code itself more efficient in compressing the resulting file. I
have no idea when or if I'll get to this, however. We'll see.
+++++++++++++++++++++
6.) Configuration File (not in lite version)
--------------------------------------------
Any documentation you need for the configuration file should be found in
comments inside the OPENSPC.CFG file itself. If you've let some frontend
overwrite it and you can't find any comments, you'll have to restore from the
original ZIP. I recommend backing up the config before using any frontends,
if the frontend doesn't do so itself. Do NOT delete this file, OpenSPC will
NOT regenerate it.
+++++++++++++
7.) IT Dumping
--------------------------------------------
IT dumping is done via 16 channels(8 channels each with independent left and
right volume control). When you switch on IT dumping, everything you hear in
the player is saved into the IT file. This means the IT file starts on the
first note of the SPC and ends when you hit a key to end recording. Upon
pressing a key, a note cut command is issued across all 16 channels, along
with a command to loop back to the beginning of the song. This makes it easy
to record simple looping songs-simply hit a key just before the first note of
the song plays again, and it should sound pretty decent. However, many songs
have an "intro" that they play first, and then go into another section and
loop. To make these loop correctly, you will have to manually edit the IT
yourself. I will describe how to do it using Impulse Tracker; it is up to you
to figure it out if you use a different one, but it shouldn't be much
different.
- First of all, switch on IT dumping and play the song. Stop recording a
second or two after you hear it loop.
- Open up the resulting IT file in Impulse Tracker.
- Find the first note of the section that loops. If it is at the beginning of
a pattern, you are incredibly lucky. If not, go to the next pattern and see
where it begins with relation to the music(for example, say the pattern
begins 5 rows before channel 2 plays a C#5). Also, remember which pattern
number it is.
- Go find the end of the song. Locate the first note of the looped section,
then look forward until you find the spot you remembered(5 rows before
channel 2 plays C#5, in our example). Hit ALT-DEL to delete everything in
this pattern after that spot. When the pattern is clear after that spot,
put the cursor on the effects column of any channel and enter in effect 'B'
followed by the number of the pattern you found in the last step(in hex).
- Once you've completed this, you'll probably want to delete any extra
patterns after this one, along with their respective orders.
- Play it. Sound right? Save it. If not you either found the wrong spot or
entered in the wrong pattern number.
It may sound a little complicated or awkward, but its really not that bad when
you've done it a few times. I did it 16 times to create the examples on my
webpage. If you'd like you can open them up for an example.
+++++++++++++++++++++++++
8.) Credits/Special Thanks
--------------------------------------------
Thanks go to:
- Savoury SnaX and Charles Bilyu for the SPC code used in this project.
- Shawn Hargreaves (and others) for the Allegro library
- Citizen X for letting CWX see the WinSPC source for ideas
- Gary Henderson for helping CWX with SPC Dumping and with Terranigma
- The rest of the Snes9x team for their hard work and the release of the
Snes9x source code, although this program contains no Snes9x-derived code.
- zsKnight and _Demo_ for an awesome emulator and for inventing SPC files
(even though I still think I came up with the idea for playing a sound save-
state first :)
- TheGun and SailorStarFighter for some early betatesting (hi guys :)
--Butcha