Oh, and I think now is the time to correct that filesize bug in the actual program. SNESMod makes .spc files that are 13,312 bytes too large, so simply replace file.ZeroFill( 65535 - (EndOfData - StartOfModule-MODULE_BASE) ); with file.ZeroFill( 52224 - (EndOfData - StartOfModule-MODULE_BASE) ); in it2spc.cpp and recompile.
And another note... I will be watching out for memory overflows caused by not realizing that echo actually consumes memory on the SPC700!
post #47468 ::
2014.08.29 8:23pm :: edit 2014.08.29 8:32pm
@b00daw how does one even use spc generated noise with snesmod wowwww also @kff could you please give me a fixed version of snesmod? i've no idea on how to compile stuff asklfsajlf im a n00b golgi already gave me, thx tho aslkfsjf
@Moose: Audio Overload is acceptable under the condition that you're using a late enough version.
@raphaelgoulart: That requires a specially modified version of SNESMod. I have the binary on hand, but you'll have to hex-edit the file manually. Speaking of binary, here it is: https://app.box.com/s/dvdce0j9q853einjem7l
In addition to copying the binary to $500-$1AF6 in the .spc file, you need to put in a #$03 into $01F4, and a #$01 into $01F5. If you want to start anywhere other than order number zero, just modify $01F7 to be your desired order number.
All you need are these brand new effects (not used by Impulse Tracker):
S05 ~ Turn on pitch modulation for one channel
S06 ~ Turn off pitch modulation for one channel
S07 ~ Turn on pitch modulation for all channels
S08 ~ Turn off pitch modulation for all channels
S09 ~ Turn on noise generation for one channel
S0A ~ Turn off noise generation for one channel
S0B ~ Turn on noise generation for all channels
S0C ~ Turn off noise generation for all channels
S1x-S2x ~ Noise frequency (take away 10h to get your frequency)
Warning: Noise frequency applies to all channels that have noise on
S92 ~ Mute channel (but still give it an output for pitch modulation)
S93 ~ Unmute channel
These might overlap with unofficial add-on effects that have been applied since the original Impulse Tracker... but SNESMod doesn't support those effects in the first place. Thus, I use them for the bonus features instead. They might affect playback when you're originally making the song in an unintended fashion, just to note.
thanks a lot kff! doubt i'll use it tho, seems a bit complicated, but if my file end up being too big, i could use that to save a bit of space - pretty sure spc generated noise is smaller than hi-hat/crash samples :D
So, I am also terribly new at writing .scps. I keep having notes disappear in the upper registers? Is there any way to work around this? And I would not say no if I could the edited version of snesmod =)
WITH YR HANDS
you can use openmpt to make an 8-channel .it file with specific limitations and use snesmod to convert it
on this specific compo you've gotta add spc echoes though (hence its name haha) but that's not difficult either
the limitations you gotta pay attention to when making the .it file and how to add echoes are in snesmod's readme file
there are other ways to do so (ex.: mml) but snesmod is the easiest, i think
@MrWimmer: You need to downsample your samples in order to use higher pitches. This is a hardware limitation. Best bet is to cut your lengths in half (make sure your loop points are also divisible by 32 or something that goes into 16 evenly for best results) so you can use those higher pitches... either that, or work around this upper pitch limitation.
hey i wanted to share a little technical something i stumbled onto lately with snes sound design.
i often run into problems using the more 'sophisticated' samples, aka more complex waveforms like flutes, strings, etc(stuff that's not simple chippy waveforms) in that they usually either sound too muddy or too thin for how i end up using them in my cramped 8 channel arrangement.
the problem is of course working with these lower sample rates. there's just not much harmonic content, so you have to really stick close to the notes where they were orginally sampled...but even then things can get muddy or thin.
i've read interviews, some of the old snes composers lamented over how difficult it was to get a set of samples that sounded good together. "once you finally found some that worked well together, of course you'd keep using them over and over in other games..."
anyway, i was doing a midi transcription of the snes rainbow road yesterday and discovered something really neat that happens soon after the intro:
when the xylo-sound first comes in, the melody D-E-F-G-D etc, it's set in the fifth octave. arrangement wise it belongs up there because all the brass stuff is happening an octave below, however i noticed my midi arrangment sounded quite thin and weak with it up there in the fifth octave.
there's a subharmonic in there! when i applied the subharmonic with a similar ratio to my midi transcription, it sounded just right. there are also a lot of other very clever things they did with their samples, but i'll save that for another time.
so what does this mean?
it means that you can use acoustics to your advantage to further overcome the challenges of low fidelity and limited channels. there are samples that have a similar 3:1 or 5:1 ratio applied to the first octave above the fundamental to give it a bit more presence.
also it's good to keep in mind is that that overtones contain harmony within them! snes mariokart used this to their advantage as well, they did a lot of really clever things. when considering an arrangement and how to make it sound deep and full with samplerate-dictatedly dull samples and limited channels, you can use harmonics as a way to simultaneously augment your arrangement while adding harmonic excitement.
PRACTICAL BOTTOM LINE: if your sample is feeling a bit too thin, add a subharmonic an octave below. if it's too muddy, try layering a pitched up copy of itself an octave above. make sure to lower the volume of your added harmonic, a 3:1 fundamental to harmonic ratio is a good starting place.
you can do this with audacity: just layer two instances of a sample over one another, pitch one up/down an octave and then lower its volume. keep playing with the ratio and check how it sounds in your song until it sounds the way you want.
there's also ways you can muck with harmonics via loop points, but i prefer to just edit and resample. audacity does the trick. and of course the snes delay brings life to things as well...
post #47923 ::
2014.09.19 9:11am :: edit 2014.09.19 9:20am
i've had an idea
why dont we do an snes rom with all (or the top x) songs of the compo, after its finished? it would probably be interesting
even though im not sure all songs would work properly in an emulator or even real hardware or something idkkkkk im a n00b
edit: i found this http://www.alpha-ii.com/Download/SPC2R110.rar and it seems interesting (drag n drop the spc into this and open in yr fav emulator)
it worked perfectly with my golgicollab (i use snes9x btw)
You have three sound drivers to learn how to switch between them if you want to avoid having to reset the system to switch (these are the only ones that I know of that have actually been used): XMSNES, SNESMod, and the Super Mario World sound driver (or AddmusicK). My special SNESMod sound driver is backwards-compatible with the original, so that doesn't count... but that does mean you have to load that particular version for all of the songs. Shouldn't affect the end results.
Super Mario World's sound driver is probably the easiest (I think the SPC700's boot routine is used every time to load data if my recollection is correct). What helps is that I have personally dealt with locating the original routine that handles the bankswitching in the game itself, so I can doubly help you in that regard. The catch is that safe-cracking was required on the original bank modifier that I came up with. I'll even specify the instructions here... Simply store an $FF to $2141, then execute the routine that handles the boot ROM.
SNESMod is medium difficulty (you can switch back to boot ROM via a command ID that is programmed in SPC700 assembly already). The catch is that I don't think the corresponding 65C816 code was programmed... so you'd have to program that yourself.
XMSNES is by far the hardest because you have to invent all of the code to go back to the boot ROM (I found no native code to go back to the boot ROM). Therefore, this one requires a full blown hack in SPC700 ASM. Thankfully, it looks like you have free space in the actual code to do your magic to add such a command. Just remember... you have to program both the SPC700 assembly and the SNES portion to be able to switch sound drivers. This is also by far the least supported sound driver, because the developer discontinued it (this is the same person that went on to do SNESMod).
Worse, you have to work off of raw hex data for all of this stuff and manually sort out every single piece of data by category (especially when it comes to missing sources). That won't be fun.
And beware! The earliest song that I know of that's in .spc format on this site (Green Mountain) does overflow on the echo. I made a bugfixed version, but I was unable to keep all of the echo parameters intact due to insufficient memory. You also have memory relocations to deal with in this particular instance, which is easy to resolve by simply implanting some code with the SPC700 boot routine.
I write all of my songs in .xm format* and convert them to .it using code from schimtracker (I also use this process to strip out any unsupported commands). It seems like it would be simpler, if given the source .xm files, to convert them to use snesmod.
*I use a modified version of SoundTracker for Linux.
I'd rather use the original sound drivers, or at least versions that can be swapped on the fly without resetting the SNES. Thus...
- Super Mario World sound engine (Addmusic might qualify, as long as I can still load data the old fashioned way via the boot routine).
- A special version of XMSNES that has code to switch back to the boot routine.
- My special version of SNESMod with noise generation and pitch modulation.
It might also be a good idea to add a piece of code that simply clears all of the memory except for itself before loading the next sound driver. Loading methodologies should be as close to the original as possible (essentially loading per whatever defined fragment there is).
We have nearly 100 pieces of music to deal with here from a wide variety of artists, so original sources might be a no-go for every single one.
post #47934 ::
2014.09.19 12:34pm :: edit 2014.09.19 12:35pm jowlsucks liēkd this
My idea was for this compo specifically, it's interesting to know it's possible! But I've no idea how to program stuff for the SNES (I barely know java!)
I don't think anyone used XMSNES in this compo so we'd only have to deal with the easy and medium difficulty situations.
And it'd be even more interesting if we managed to do a fully working SNES cartridge with the songs on this compo! My idea would be to make it kinda like the 2A03 Puritans Cartridge, maybe even sell it, idk (I would certainly purchase one, even though I (still) don't have a SNES)
Nah... It needs its own player. I'll get back to y'all in a bit when I ask the right people. SP2s are compressed by chopping up the SPCs into banks, dupe checks the banks, deletes the dupes, then orders them for replay. Almost the same as an SPC. :)