Language…
18 users online:  Ahrion, Anas, anonimzwx, autisticsceptile1993, Batata Douce, codfish1002, cozyduck, Foxy_9000_, Hammerer, Housemeister, LuigiTron, Mario's GameBase, Maw, NewPointless, playagmes169, ppp9q, sinseiga, temsuper1 - Guests: 262 - Bots: 361
Users: 64,795 (2,376 active)
Latest user: mathew

Accurate SNES Instrument Emulation!

MP3 Samples of C700 in action:

http://bin.smwcentral.net/u/994/3Dworld%2BYI.mp3 (Courtesy of Jimmy52905. Thanks for sharing, dude!)
http://picopicose.com/files/sound_of_mnemon.mp3 (From C700's official site)

Example FLP: http://bin.smwcentral.net/u/1743/MM9_Overdrive_Scramble.flp (Requires FL Studio 12.4 [build 29] or higher, C700, and BRSO Articulate)

Hey guys, just thought I'd make this post to share my knowledge with you all! Here's a tutorial on how to make a convincing SNES instrument sound in your favorite (VST-supported) music editor! While this tutorial centers around FL Studio, this method should work for any VST-supported music program. This will not let you insert custom music into Super Mario World (unless you're looking at MSU-1 stuff), but it helps with making an MP3/OGG/WAV sound like a legit SNES chiptune.

If you're interested in creating authentic SPCs using Music Macro Language (MML), I would recommend checking out AddMusicK and PetiteMM instead.

No matter your DAW of choice, you can near-perfectly emulate BRR/SPC samples to create some convincing pseudo-SNES-chip music with a single VST, though if you're interested in emulating SNES perfectly, this is quite a lengthy read.

The first thing you want to do is download C700 from the page: http://picopicose.com/software.html

No worries—the page is in Japanese, but the program itself is in English. Extract the C700.dll (not the one in the x64 folder. I've heard some people get many unexpected errors from the 64-bit edition) and put it in your VST folder (typically at C:\Program Files (x86)\Image-Line\FL Studio 11\Plugins\VST)

Open FL Studio and insert/replace a channel with C700:


^If you can't find "C700" on the list, make sure that you re-scan for any VSTs, and double-check that C700.dll is in the correct folder.

If you managed to get C700 to open, you should see this window:



Find an SPC with the instrument that you want. http://www.snesmusic.org/v2/ is a great resource for finding SPCs from particular games. (.rsn files act like .zip files, just extract the SPCs as if it were a .zip)

---
EDIT: Or, if you want to use your own custom instrument, drag/drop a .wav over the waveform in the C700 Interface. I recommend importing a .wav which is 32kHz 16-bits Mono (C700 can do stereo though!), and has a start and end loop point, both loop points being a multiple of 16 in decimal. OpenMPT is a great tool designed around doing that kind of stuff, though you could also use something like Audacity, then skip to the echo part of this tutorial.
---

Open the SPC in SPC700 Player, and look at the sample number of the instrument (you might want to mute the other channels to find it).



Open up windows calculator (or any hex>decimal calc you prefer) and press ALT+3 (or View>Programmer Calculator). Convert the value from hex to decimal. (My value was 1F, so the calculator gave me back 31.)

Extract split700's /bin/ folder and move the SPC into it. Run the .bat and find the instrument BRR you need (The folder will get very messy!), then drag the BRR over the waveform in the C700 window:



Alternatively, if you dropped an SPC into the program, scroll up/down to find your instrument (my case was 1f, or 31 in decimal):



At this point you can already place notes, but we need to make the instrument's volume envelope (ADSR) sound even more accurate. Open the SPC up in SPC700 Player again and double-click on the window (or press left/right) to navigate to the ADSR menu. Find your instrument's ADSR:



So in my ADSR:
A = F
D = 7
S = 7
R = 00

If I convert each of those to decimal via calculator:
A = 15
D = 7
S = 7
R = 00

Which is how I would configure my ADSR here:



^While this is accurately converting, C700 treats Release differently in contrast to the standard N-SPC music engine. Un-check Sustain mode for best compatibility results.

Also, I wouldn't recommend controlling C700 directly in the VST, so use 8 MIDI Out ports (or if you use FL, check this out. It's useful for instrument patch/prog changing!)
I recommend making all your instruments "mono"phonic by checking the tickbox to the right of the waveform.

Now we have an accurate instrument, there's one last step, which is defining echo and ADSR.



Just find and convert each of these values to decimal, then put the data into C700. Don't forget to enable the echo box for the channels you want to have echo!



EDIT: Forgot to mention, if any hex value is over $7F, you'd be using negative numbers. $FF would be -1, $FE would be -2, and so on.

Another note: I highly recommend hooking all of your MIDI channels to the VST, rather than having several C700 VSTs open at the same time.

EDIT: Need to change instruments mid-song in FL? Use this to control MIDI Program Changes with note colors: http://blake.so/articulate/

EDIT2: I made a brief write-up on creating your own original brr samples: http://smwc.me/1423553

Also, "Drum" channels are just samples, and should be treated no differently than actual melodic ones. The same rules still apply.

One last note: SNES has a max of 8 monophonic (one note at a time) channels, and echo values are global, and can only be enabled/disabled. You can change the global echo value in the middle of the song, though it is not recommended.

Hope this helps everyone interested in creating SNES music!
crispyoshi,
Thanks for sharing this tool! I have been using it a lot in the past couple of days and I was hoping you'd be able to answer a question about it since there is not a whole lot of info on this tool floating around the web. I have been using this VST to play samples from existing game soundtracks but would like to import my own samples (wav) as well.
When I export a sample in .WAV format from an SPC in SPC TOOL, the format is able to import into the VST. When I use any other .WAV sample that was not generated from SPC tool, the VST does not load the sample. I have tried converting the bitrate in Adobe Audition but I have had no success getting my samples to load.

What .WAV specifications will allow the sample to import?
Is there any tool out there for converting an existing .WAV into a .BRR?

Thanks again for sharing C700, I love it!
EDIT: This post is now obsolete, and the tutorial has already been updated with new information.



Originally posted by josephedward
crispyoshi,
Thanks for sharing this tool! I have been using it a lot in the past couple of days and I was hoping you'd be able to answer a question about it since there is not a whole lot of info on this tool floating around the web. I have been using this VST to play samples from existing game soundtracks but would like to import my own samples (wav) as well.
When I export a sample in .WAV format from an SPC in SPC TOOL, the format is able to import into the VST. When I use any other .WAV sample that was not generated from SPC tool, the VST does not load the sample. I have tried converting the bitrate in Adobe Audition but I have had no success getting my samples to load.

What .WAV specifications will allow the sample to import?
Is there any tool out there for converting an existing .WAV into a .BRR?

Thanks again for sharing C700, I love it!

Hey josephedward! I'm glad to see the SNES love spreading! I actually use SampleTool and a clean Super Mario World rom to import the WAV sample I have.

First, I open the rom in SampleTool. I import this blank bank by clicking "Import from file". After that, I click "Insert" and select my WAV (I recommend you use a lower bitrate like 44100, Uncompressed PCM, and make it mono. You can do whatever, but the sample will be significantly larger.)

Hopefully if the sample wasn't too big (if it was, shrink it!), I click "Play", then I steal the temp.brr file it generates. I open the .brr in a hex editor like XVI32 and add a "00 00" loop point header to the file. After that, I just drag/drop the .brr over C700 and it imports! Loop points can be defined within C700 itself.

Your .wav start and end loop points should both be multiples of 16 (in decimal). This can be a huge pain, though, because the compression from .wav to .brr can potentially screw up the loop point, if only slightly, and the slightest offset can cause a pop, which could become more (or less) drastic if echo is applied. (That, or I'm just not very good at .wav editing hah)

Hope this helps!
This tool is AMAZING!!! but I have a question... well... for some reason, this tool won't show me the Kick, Snare, and Hi-Hat samples from Lufia and the Fortress of doom.

I've used SSOR95 to extract samples from roms... and I got those samples from using SSOR95... but I can't get them from C700.

Any idea why?

EDIT: Also... do you know if it's possible to convert a .xi / .brr / .smpl into a .wav? I wanna make a soundfont with the samples but it only takes .wav
I'm not really sure why it would be doing that, but it's definitely unfortunate.

As for dumping BRRs and converting them to .wav, there's a tool called Split700 which dumps all the .brrs from an existing .spc. In the /bin/ folder of split700 is the .bat you'd use to dump all the .brrs. After you find the BRR you need (by referring to SPC700 Player and the instrument number, explained in the first post) then you drag/drop the BRR file over brr2wav and it's instantly converted. (Credits to gocha for making the tools)
Really loved the VST, but i have a problem, using C700 now I can't use the MIDI OUT channel's pan and volume controllers, do you now how can I use those? I need to use the volume controller in order to make fade in and fade out effects.
Originally posted by alexjavier93
Really loved the VST, but i have a problem, using C700 now I can't use the MIDI OUT channel's pan and volume controllers, do you now how can I use those? I need to use the volume controller in order to make fade in and fade out effects.

I'm really sorry about the late reply, but C700 was recently updated on the download page with monophonic support, and using MIDI Out channels works well with channel pan and note velocity. There's also a Sustain Mode which emulates the standard SNES Release, and I've updated the tutorial to account for it.

Also, if you use FL, this is a great alternative to MIDI Out: http://blake.so/articulate/

It's basically MIDI Out, except you can use piano roll note colors to do things like instrument patching (By changing the Prog) on a single channel.
Originally posted by Felix Flywheel
EDIT: Also... do you know if it's possible to convert a .xi / .brr / .smpl into a .wav? I wanna make a soundfont with the samples but it only takes .wav

Whoops, I missed this. split700 includes a program called "brr2wav.exe", which is a simple drag/drop tool and also includes the loop start/end points in the .wav.
Thanks for making this tutorial! I have a question and sorry if you already explained it. I have the instruments from Megaman X loaded up and they sound good except there's no "wobble" effect, they sound flat. I want to replicate the effect used in the main synth of the intro stage for example.

What data do I need from the SPC for this or do I need to do something in my DAW?
(sorry for my bad english)

Can somebody please help me? :C

I REALLY want to emulate this instrument:
http://www.youtube.com/watch?v=AoZIOnDXcIM

But result sucks, can somebody help?
Originally posted by MrRomanze
(sorry for my bad english)

Can somebody please help me? :C

I REALLY want to emulate this instrument:
http://www.youtube.com/watch?v=AoZIOnDXcIM

But result sucks, can somebody help?

What you need is likely a slow vibrato, which I explain later in this post.

Originally posted by OrangeFox
Thanks for making this tutorial! I have a question and sorry if you already explained it. I have the instruments from Megaman X loaded up and they sound good except there's no "wobble" effect, they sound flat. I want to replicate the effect used in the main synth of the intro stage for example.

What data do I need from the SPC for this or do I need to do something in my DAW?

You're probably referring to vibrato, which can be controlled using MIDI CC #1

If you're using BRSO in FL, this is how I would recommend controlling MIDI CC #1. Right-click and un-assign all of the knobs, or at least the conflicting ones (vibrato/dynamics):



Then, assign MIDI CC #1 (vibrato) to a vacant knob, and rename it if you prefer:





Now you can right-click the knob and control vibrato with a MIDI controller by selecting "Link to Controller" and physically moving the mod wheel on your keyboard.

However, if you don't use a MIDI controller, maybe consider using automation clips.

Also an unrelated note, the new C700 can import looped .wav samples by dragging/dropping it over the waveform in the C700 Interface. I recommend importing a .wav which is 32kHz 16-bits Mono (C700 can do stereo though!), and has a start and end loop point, both loop points being a multiple of 16 in decimal. OpenMPT is a great tool designed around doing that kind of stuff, though you could also use something like Audacity. I've updated the first post with this info, too.
This is extremely great and useful, except the fact...

...there is a chance in 1 to 10 that loading that plug-in in my FL Studio will cause my whole computer to crash.
This happened twice today, the only escape was to force-shut down my computer.

I wonder why...

'signature.txt' was not found.

Originally posted by CrispyYoshi
What you need is likely a slow vibrato, which I explain later in this post.


Well, thanks! But I don't know how to make it sound the same. I can't find any information about Vibrato in SPC700. #w{:<}
Originally posted by lu9
This is extremely great and useful, except the fact...

...there is a chance in 1 to 10 that loading that plug-in in my FL Studio will cause my whole computer to crash.
This happened twice today, the only escape was to force-shut down my computer.

I wonder why...

Hm, perhaps you might've ran out of memory on your computer? I'd suggest cleaning up computer space, closing out programs taking up memory (like Skype or a web browser) or trying the 64-bit version of the program (I haven't used the 64-bit version recently though)

I'd also advise only using one C700 and controlling it with several MIDI Outs.

Originally posted by MrRomanze
Originally posted by CrispyYoshi
What you need is likely a slow vibrato, which I explain later in this post.


Well, thanks! But I don't know how to make it sound the same. I can't find any information about Vibrato in SPC700. #w{:<}

You can see it in SPC700 Player, though I don't think you can get the exact values, but only estimate it.

(Look at Pitch)
(Look at the yellow bars)

You could also try changing the values in the top-right corner of C700:



If you really wanted to, you could open the SPC in a hex editor and read the values, but not only do I have no knowledge in accomplishing that but I also don't think you can easily convert that to MIDI data. For a slow vibrato like the video you shared, try using a low vibrato speed/rate and medium-level depth.
Originally posted by CrispyYoshi

You could also try changing the values in the top-right corner of C700...


Weird, instrument always sounds flat, with any vibrato values. #w{x(}

Also, ADSR and Echo just doesn't sound right too! #w{:s}

Here, I recorded the instrument (all values from SPC, except Echo settings and Vibrato (which doesn't work) ) :

http://www.filedropper.com/-2_1

- Sound is... Eh... Too "long" ?
- Sound is flat :C
Originally posted by MrRomanze
Originally posted by CrispyYoshi

You could also try changing the values in the top-right corner of C700...


Weird, instrument always sounds flat, with any vibrato values. #w{x(}

Also, ADSR and Echo just doesn't sound right too! #w{:s}

Here, I recorded the instrument (all values from SPC, except Echo settings and Vibrato (which doesn't work) ) :

http://www.filedropper.com/-2_1

- Sound is... Eh... Too "long" ?
- Sound is flat :C

Did you try changing the C700 VST port to the same port your MIDI controller (MIDI Out or BRSO) is using? That might be why C700 isn't listening to your vibrato knob. In FL, you'd do that by clicking on the "2" gear icon shown in this pic, in the C700 window: https://www.image-line.com/support/FLHelp/html/img_plug/plugin_wrapper.jpg Then you'd go to the Settings tab and change the MIDI Input Port to 0.

Regarding ADSR, make sure that you have "Sustain Mode" unchecked if you're using the values directly given in SPC700 Player. For echo, turn the main volume level (very bottom-left of C700) to 127 for both left/right speakers. This will make the entire VST much louder, but it will also affect the echo to use the volume levels which most SNES games use (which is also displayed as "MasterLv" in hex within SPC700 Player, on the same page where all the echo information is)
How do I see what instruments are used in a Song?, and what's the name of the song url I posted, Thanks#tb{:D}
Huh, I was wondering about this for a while now, but is there still no SMW custom music support? I am trying to use OpenMPT + SNESMOD for that now, but its really weird that the songs made in this VST cant actually be ported to hacks, when it CLEARLY says that its supposed to perfectly emulate the SNES sound chip. :/
Layout by Mathos
That's because the audio processor of the SNES is actually programmable, which means that only a low number of SNES games actually uses the same audio engine. Usually only games by the same developer. In other words: How audio data is played on the SNES depends, by a huge amount, on the game itself. This means that it's pretty much impossible to write a converter that outputs general audio files you can insert into every SNES game. A tool like that would only be possible for a specific game (or maybe a number of games). Only games using the same audio engine could potentially use the same audio format.
Feel free to visit my website/blog - it's updated rarely, but it looks pretty cool!