Over the past eight years that I've been using MidiNES to make chiptunes, I've occasionally searched for tutorials and documentation detailing the specific use of all of the parameters but have only ever found demos and the original manual which simply outlines the CC signal designation and contains, at best, a brief explanation of their implementation. What all of the resources seemed to lack was a comprehensive explanation of how these parameters can be used in conjunction with one another and how this can translate into creating better sounds and maximizing the limitations of the sound chip. I've been considering writing a tutorial of sorts for years but just never got around to it until now.
What I'm hoping is to post in this thread regularly with each 'entry' highlighting a different topic. For example, some will cover technical aspects such as how to set up a MidiNES compatible file in your DAW, programming all of the CC's, which of those CC's to implement for different styles of note, etc., while others will cover topics related to composition and how to achieve certain results with the available parameters, and so on. I'm hoping for some decent responses so the time isn't wasted but I'll play it by ear. As long as people are interested, I'll continue adding to the guide! I'm not too concerned about having others post between my own since mine will be quite long in comparison so anyone who's browsing will be able to find them easily. Plus, I'll try to answer questions that pop up which will add to the overall usefulness of this thread as a comprehensive guide. If this continues on for long enough, I'll probably just end up transferring all of the text to a guide on my own website but for now, this is a good place to begin.
For starters, I'm going to focus on the bare bones basics for complete beginners - if you have a MidiNES cart, a NES, USB MIDI interface and a DAW (Digital Audio Workstation) that can send programmable MIDI control signals, the following will show you how to set everything up to get started. I realize most people with a MidiNES cart in their possession may already know the basics but it's better to explain too much than not enough!
Personally, I use FL Studio, so that will be in all examples but I'll try to use terminology universal to all DAWs and go into more detail to cover alternative methods when there may be differences between them.
Here is a brief description of my setup for reference:
- MidiNES with prosound modded NES (two 1/4" audio out jacks)
- Tascam US-122mkII midi interface to connect the MidiNES (via output cable) to my computer (via USB)
- Alesis USB Multimix8 (optional, but preferable to a direct line from the NES to speakers)
- M-Audio AV30 Speakers (not the best but sufficient for this)
- FL Studio 11 Producer Edition
Hooking Everything Up
Firstly, be sure your NES is fully functional, the MidiNES cart is inserted and secure, and the system powers on to the MidiNES title screen properly. If you're like me and you don't have a display hooked up to the NES, you can turn the volume on your mixer/speakers up a bit higher than you would to listen to music at a comfortable volume and listen in - whether you have a prosound modded NES or are working from the stock system, there will be some degree of hum. If it's consistent, then press the select button on the controller. This is a MidiNES feature which disables the visuals and trades the more noticeable hum for a subtle, solid, high pitched frequency. Pressing select again should return to the hum. If all these results are as expected, you have a good connection between the cart and 72-pin connector in the system and I recommend never removing the cart. This is your dedicated MidiNES system now!
Next, connect the MIDI out cable coming from the MidiNES cart to the MIDI OUT on your MIDI interface. You can also connect the USB cable from the interface to your computer now but I've found it can be finicky depending on what interface you're using. My previous Tascam US-122L interface almost always needed to be plugged in after I started up FL Studio (otherwise the program would freeze) but the US-122mkII has been much more reliable and FL Studio only freezes once in awhile (in which case I would unplug the USB, force close FL Studio then reopen the program before plugging the USB in again). I honestly don't know the underlying cause of this issue but that's been my fix thus far.
NOTE: Depending on what interface you're using, there may be a latency setting. Latency determines how quickly the MIDI data is sent to the interface (and therefore how close to 'real time' the NES responds to them), so the lower the latency, the better. For mine, it's an option within the software that installed with the driver for the interface but you may have a plug and play device with no associated software in which case the latency may be controlled via a knob or switch on the device itself. Regardless, latency isn't much of an issue if you aren't using additional synths that need to keep time with each other.
Now, open up your DAW and find the MIDI settings. In the settings options, there should be a list of MIDI INPUT and MIDI OUTPUT devices. The OUTPUT is what is important to us here. Plug in your device if it isn't already plugged in. If you don't see your specific interface listed in the outputs, there may be a 'refresh list' or 'rescan devices' button somewhere that will look for it. Once it pops up, select it and locate the 'PORT' option. I have this set to 1 but it really doesn't matter exactly what you set it to. What's important is that you use the same port number you select here later on when setting up the five MIDI output channels.
At this point, your DAW should recognize the interface and be able to send MIDI CC's to the MidiNES cart to make sound on the NES. You may have to enable MIDI output from another location but worry about that if it's not working later on. We'll set up the five channels now but you can test it after setting up the first.
Creating MIDI Out Channels
Okay, we're getting there! The next step is basically knowing how to do a few things then repeating the process a number of times. For reference, these are the five channels we'll be creating:
1) Pulse 01
2) Pulse 02
3) Triangle
4) Noise
5) DPCM
Let's create the Pulse 01 channel.
Add a MIDI Out channel to the instruments/voices/channels, wherever they may be located. This is done in a wide variety of ways in different DAWs so you may have to familiarize yourself with the specifics first. If you're working in a MIDI specific program (as opposed to a sequencing or pattern based sampling program like FL Studio), it will probably be easier to find and may be readily visible in the default interface layout. In FL Studio, there is a panel called 'Step Sequencer' which contains channels and a channel is added by going to CHANNEL>ADD ONE>MIDI OUT. You can name it whatever you like but for the sake of consistency and accuracy, I name it "Pulse 01". Upon adding it in FL Studio, the options for the newly created channel are opened (alternatively, clicking on the channel label does the same). Within these settings, you'll be looking for a few things:
CHANNEL - this determines which of the five available channels on the NES will be controlled by this MIDI Out. Set this to '1' (and the rest to 2-5).
PORT - set this (as well as every other channel) to the same number as you set in the MIDI settings. As I have my port set to '1', I've also set all of the channel ports to the same.
After setting these two parameters, open up the piano roll and lay a note or two down to see if you're getting sound from the NES. Be sure to add a note somewhere above A#2 as that is the lowest note the pulse channels can play. Assuming the results are as expected, continue! If not, then trouble shoot the connections, double check the MIDI settings, etc. until you've identified the problem.
Programming Midi Controls
The locations for the controls we'll be programming will be different for every DAW but in FL Studio, it's essentially a grouping of unidentified knobs and sliders with a blank drop down above it, all located in the channel settings. This area allows you to create groups of controls and then set the specific parameters of each control within (right clicking the knob brings up the available options). Whatever your setup gives you, you will need a total of 12 controls for the two pulse channels and less for the remaining channels. Access the settings/options for the first knob (for me, it's under "configure") and you should see the following among the options: Name, Controller # (be sure that, if given options between control types, 'CC' is selected), and a set of values determining the min and max possible value. Your program may have these organized in some fashion by CC# specifically but the same correlation of values will apply regardless.
Below are the settings I've chosen for all control knobs on this channel:
- Duty Cycle, CC#1, 0>127
- Mod Period, CC#6, 0>127
- Master Volume, CC#7, 0>127
- Fine Pitch, CC#8, 0>127
- Length Envelope, CC#9, 0>127
- Loop Envelope, CC#10, 0>127
- Volume Envelope, CC#11, 0>127
- Mod Hack, CC#12, 0>127
- Enable Sweep, CC#13, 0>127
(the following apply to the sweep functions)
- Sweep Up/Down, CC#14, 0>127
- Sweep Period, CC#15, 0>127
- Sweep Shift, CC#16, 0>127
Truth be told, I only use a few of these controls regularly, but having them all programmed in for possible future use is probably the best practice. Generally, I prefer to manually create some of the effects that can be done with certain parameters but on a regular basis I implement the Duty, Length, Loop and Volume controls in conjunction with general channel controls that are standard in most DAWs (like channel pitch, channel volume, note velocity, etc). But I'll save all that for later. We have four more channels to create!
Fortunately, everything about the Pulse 02 channel is the same as Pulse 01, with one exception - the Channel #. Remember, all channels will have the same port # but the channel needs to reflect one of five available channels on the NES. So naturally, Pulse 02 will be on channel '2'. Hopefully, your DAW has an option to duplicate the MIDI Out channel you just created (after which you can change the channel # and name) but if not, just do everything you just did again changing the name and channel # as mentioned above.
For the next three channels, we'll repeat this process but the channels will be designated 3-5 and the custom MIDI controls will be as follows:
TRIANGLE (channel 3):
- Fine Pitch, CC#8, 0>127
NOISE (channel 4):
- Master Volume, CC#7, 0>127
- Length Envelope, CC#9, 0>127
- Loop Envelope, CC#10, 0>127
- Volume Envelope, CC#11, 0>127
DPCM (channel 5):
- Pitch, CC#3, 0>127
- Loop, CC#4, 0>127
- Bank Switch, CC#14, 0>127
While I've included all of the Pulse channel controls previously, I've not done the same for the DPCM channel. This is one of those features that is 'expandable' in the sense that with additional hardware/software you can load different sample sets and do crazy stuff with it, but for the vast majority of compositions, I use this strictly as a drumkit (in conjunction with the noise channel) and so you can feel free to explore the others on your own to see what you can do once you've learned the basics and a bit more after that.
Well, that's it for this tutorial.
I hope this will be informative for some people just starting out as I know a lot of people here already know most of this but we'll get into the more advances stuff down the road!
Last edited by Doctor Octoroc (Jan 17, 2019 6:08 pm)