Nintendo VST

If you use my VST in your project, give me a shout on Twitter @matthewmontag. I'd love to hear what you come up with. 

Update 7/23/2013: Download NES VST 1.2

Change log:

Version 1.2

  • Fixed issues from version 1.1...
    • Pitch range -12 to +12
    • Fixed problem where C was playing F#
    • Tuning is back to A440
    • More reasonable volume level
    • Cleaned up the default patch set

Version 1.1

  • Portamento (try it with the noise generator)
  • Master volume control
  • Pitch bend (fixed range of 2 semitones)
  • Velocity sensitivity
  • Legato mode (doesn't retrigger step sequencers)
  • More colors :)

Audio Samples

Super Mario Brothers

Steps Ahead

Project Notes and Documentation

Overall module graph in SynthMaker

The NES VST is designed to emulate the 8-bit sounds of the Nintendo, remaining faithful to the specifications of the 2A03 chip. The plugin was built in Outsim SynthMaker to allow for an advanced user interface, and sounds were evaluated against the output of FamiTracker, which uses the Blip Buffer library to generate "perfect" alias-free primitive waveforms. In our project, aliasing is minimized with conventional techniques available in SynthMaker.

The following is a discussion of each 2A03 chip sound channel (Square, Triangle, Noise, and DPCM) and their implementation in SynthMaker.

Square

Our square wave was initially constructed by summing two saw waves limited at half bandwidth, which really means 1/4 of the sample rate or 11,025 hz. This was unsatisfactory and we switched to a construction from saw waves limited at nyquist. The test signal was a square wave with pulse width modulation cycling across 25%, 50%, 75%, and 12.5% pulse width. The results are compared here:

Square PWM

Linear sonogram of PWM square wave. The first tone is produced by SynthMaker before correction. The second and fourth tones are produced by FamiTracker. The third tone is the corrected full-bandwidth square wave produced by SynthMaker. Notice the first tone produces undesirable full bandwidth clicks when the pulse width changes. The corrected tone masks this effect.

Triangle

The Nintendo triangle wave has a distinct sound. It is produced by quantizing a triangle waveform to 16 discrete amplitudes. It also has an asymmetrical rise and fall. The falling segment of the waveform is slightly curved and the rise is linear. The triangle wave normally contains only odd harmonics, but this irregularity causes the signal to gain even harmonics, characteristic of the saw wave.

One period triangle waveform output of FamiTracker

Sample 1

4 bit quantized triangle wave, no anti-aliasing

Sample 2

4 bit quantized triangle wave, 2x oversampling, aliasing still audible

Sample 3

A-B comparison

Nintendo triangle wave (produced by FamiTracker) vs. aliased triangle from SynthMaker.

Sample 4

A-B comparison

Wavetable triangle vs. Nintendo triangle wave (produced by FamiTracker) This first attempt at band-limited wavetable synthesis used only 32 sample points as input. The resulting waveform does not have the high quantization harmonics.

Sample 5

A-B comparison

Nintendo triangle wave (produced by FamiTracker) vs. band-limited wavetable triangle from SynthMaker. This time, the wavetable used 512 sample points. The sample points were also tweaked to create an asymmetric wave shape.

Triangle Oscillator Block Diagram

The final block diagram of the triangle oscillator in SynthMaker

Noise

The noise channel in the Nintendo is not noise in the usual sense, where amplitude or frequency would be modulated randomly. Instead, the NES sends a random sequence of bits directly to audio out. This is analagous to a square wave with a continuously-varying random pulse width. The NES produces noise in repeating sequences of 32767 or 93 bits. The pitch or color of the noise is variable at 16 modes. These modes are mapped to MIDI notes in our VST plugin.

The noise sequence produced by code is heavily aliased with a great deal of harmonic content above 22,050 hz. To solve this problem we subdivide time and create 8 unique output samples at every tick. These samples are merged and lowpass filtered to produce an 8x oversampled anti-aliased output.

Noise Oscillator Block Diagram

Noise oscillator in SynthMaker. Creates a new noise buffer every time a note is triggered, allowing every note to produce a unique noise pattern, characteristic of the Nintendo.

DPCM

Delta pulse code modulation is achieved by either increasing or decreasing the amplitude of the signal by a fixed interval at every sample. The signal never maintains a steady amplitude, and the amplitude climbs at a limited rate. The NES uses DPCM to play sampled audio, and does so with an amplitude resolution of 6 bits or 64 levels. We achieve realtime DPCM in code. We allow the user to select 4 custom WAV file samples and attach the samples to MIDI notes C4, D4, E4, and F4.

DPCM Oscillator Block Diagram

DPCM code section. This represents the DSP behind each "NES DPCM" module in the graph below.

Filter Section

The output is filtered by custom highpass- and lowpass-shelf filters. The filters attenuate unwanted ultra low frequency and high frequency content that may be produced by the DPCM.

77 ResponsesLeave a Reply

  1. Shirley Phelps, can you elaborate a little? Did you try monophonic and turning on Legato for stacked notes/pitch slides? Also, lay off the bigotry.

  2. MSG

     /  May 11, 2013 Quote

    Great sounding plugin! One weird thing I noticed tough is that the pitch zeroes out at the twelfth partial which Isn't an octave (equivalent C to F#). To match my other VSTs I have to go full 12+ or -. Thanks for the free plugin!

  3. Gee, thanks for trollin, Shirley Phelps. Velocity response works just fine, and legato works as well.

  4. Hey, I LOVE this synth. But I am having a weird issue with the latest version.

    Every note is offset by a Tri-tone for some reason. So a C will be an F# instead. O_O

  5. Tom Smith

     /  July 12, 2013 Quote

    Hey, this does sound fabulous, but i've noticed something problematic. C is not C, at least it's not in FL studio. It's F#. I have to completely re-center the 0 pitch on F sharp before 'c' is 'c'.

    Any idea why this is? Is it a bug? or is it just like this for me? I tested with my other VSTs, and against my piano. the 'c' in this is f#, for all waveforms that have a tonal pitch.

  6. Dude, your plugin is amazing! I use it every day!

    I hope you release a revised version soon :)

  7. Orean Cosby

     /  July 16, 2013 Quote

    Hey hon, it's Orean. I was wondering if you plan on increasing the limit to the pitch? Like, it goes up to 12. Some instruments I'm trying to mimic from Famitracker won't work because of the limit...

  8. Game Sound Guy

     /  July 22, 2013 Quote

    Thanks for updating the VST! I love this thing and appreciate all the work you put into it! Also yes, I am very interested in a Reason rack extension.

  9. Hey Orean. Trying to get that Tim Follin sound, eh? So, in the fixed version 1.2, it's got pitch -12 to +12, giving you a nice 2 octave range. Cool? Your email address bounced, by the way...

  10. Hey-

    Is there any chance of 64bit version of this existing any time soon? I just updated Live to the 64 bit version and it seems to only like 64 bit plugins.

  11. Christian (PHOHAT)

     /  August 4, 2013 Quote

    Wonderfull!!! thanx you so much...there're some hits coming in the air... lolllllll

  12. Neonlare

     /  August 15, 2013 Quote

    My god this is the best NES vsti I've seen since ever! I've been trying to nail a Follin sound style too but have not had much luck with it. Anyone got any suggestions or patches for FLStudios that emulate that glorious sound of Solstice or Silver Surfer? What about the Sunsoft Bass sound too? :) A good set of presets based on some of the classics would really help the creative juices! :)

    Thanks for the vst Matt! :D

  13. NeonlareAnyone got any suggestions or patches for FLStudios that emulate that glorious sound of Solstice or Silver Surfer? What about the Sunsoft Bass sound too? :)A good set of presets based on some of the classics would really help the creative juices! :)
    Thanks for the vst Matt! :D

    Good question. I have wanted to create a nice starter patch set for a while, including some Follin style patches. In the meantime I might post a little tutorial on how to create them yourself.

  14. Itching to try this but it's not working. I *think* it's because I have a 64bit host. Has anyone got this working in a 64bit host? I tried jBridge but it did not seem to work.

  15. J.: Itching to try this but it's not working. I *think* it's because I have a 64bit host. Has anyone got this working in a 64bit host? I tried jBridge but it did not seem to work.

    Yeah, that's the reason. Sorry - it doesn't work on 64 bit hosts. The plugin would have to be rewritten to support 64 bit.

  16. Success! Well kind of. Turns out that you can run 32bit DAWs in Windows 64bit, so I got in working after all. Really cool stuff.

  17. You absolutely rule, Matt.

  18. works great with Sonar 8.5 on my Windows 64bit after putting it in the x86 (32bit) cakewalk plugins folder

  19. OwlOfTheAsh

     /  October 13, 2013 Quote

    Best vst for nes simulation. I,ve never seen other synth, that been more functional (except trackers).
    I throw my money to the monitor, but nothing happens :C

  20. Orean Cosby

     /  October 22, 2013 Quote

    Hey hon! Just checkin' in! See how you're doing! Me and my church members are really excited about what God is doing! Thank you hon. Stay blessed!
    ~Orean

  21. Hey Matt... I am just wondering if you'll be lifting the 64 LFO limit... I was able to hack a save file and allow an LFO of 5 bars... I've been trying to study the coding in the save file and change things up... For the most part, I broke some limits... but I can't seem to get passed the 64 LFO limit... I really like to stretch the limit so I could really reproduce lots of NES songs accurately... anyway... thanks. :)

  22. Thomas

     /  December 6, 2013 Quote

    This looks and sounds really great! I was just wondering if perhaps you could make a version for Mac?

  23. is my 2 time using an 8 bit vst. the first is the expansion of nexus and this a lot way better and easy to manipulate. Thanks for this keep the good job. and works fine in my hp laptop with fl studio 11 in 64 bit

  24. To be noticeable, a large and colourful indoor banner is perfect.
    The picture shown here has all details completed so you can see what can be
    achieved, but the template will come with the box at the top blank so you can complete your own story.
    These displays can provide information about your company; make your company logo or image stand out and drive the
    attention of visitors to your booth.

  25. Hi Matt is there any mac version?

  1. Square Wave Shootout: Choosing the Best 8-bit, NES, Game Boy, or Chiptune VST - Phytopep
  2. World of Retro Gaming Music | djDarkX's Lair

Leave a Reply