Overview

FTplug is a VSTi plugin that emulates NES audio hardware and allows to use 
FamiTracker compatible sequence-based instruments.



Features

- Regular 2A03 pulse/tri/noise channels and VRC6 pulse/saw support
- FamiTracker compatible MML-like sequence-based instruments system
- FamiTracker instrument files (*.fti) loading and saving
- Powered with Blargg's Nes_Sound_Emu and Blip_Buffer for best sound quality
- Authentic sound
 - Includes proper time, volume, and pitch quantization
 - Includes quirks and limitations of the HW (pulse can't go below A-1,
   triangle can't go below A-0, the MSB change pop, etc)
- PAL/NTSC support
- Velocity support that is mapped to the 2A03 levels (velocity 100 for
  maximum volume of 15, no velocity for triangle)
- Multi mode, allows to map up to 12 presets to notes within octave (useful
  from drum kits)



Usage

The five text lines is to input MML-like number sequences that FamiTracker
uses to define its intruments. To get better idea how instruments work and
what the text strings do, please refer to the original FamiTracker
documentation (FamiTracker.chm).

In short, each frame in sequence defines how a parameter value changes over
the time. It specified for each frame that lasts 1/60 of second (for NTSC).
Sequences can contain positive and negative numbers, and can be looped using
| symbol.

Volume sequence defines volume envelope, how the volume changes over the
time. 15 is max volume, 0 is silence. Last value remains in effect, so volume
envelope '15' will keep maximum volume until a key is released.

Arp envelope defines arpeggio, and measured in semitone offsets from the
base note. I.e. 12 is octave higher, -12 is octave lower. Looped arpeggio
sequence '| 0 4 7' will create a major chord.

Pitch sequence defines slight offsets from base notes measured in period units
(internal NES frequency units). It can be useful to create vibrato or slides.
Unlike two previous sequnece, this one has a negative effect (that is, positive
values shift frequency down), and uses an accumulated value, i.e. sequence
of '1 1 1 1' will shift the tone 4 units down, and looped sequence '| 100' will
produce a fast slide down.

Hi-Pitch sequence is the same as Pitch, but uses larger steps. 1 unit here is
like 16 units of the normal Pitch sequence. I don't know when it coudl be useful,
but FamiTracker has it.

Duty sequence controls duty cycle of the Pulse type channel (0-3), and noise mode
of the Noise type channel (0-1).


The Pulse/Triangle/Noise buttons select channel type. Pulse channel can play
rectangular wave with duty cycle of 12.5% (thin sound), 25% (medium sound), and
50% (pure square wave). Triangle plays a triangle wave that can go one octave
lower than pulse, but does not have any volume control. Noise can produce digital
noise, either white or periodic (metallic tone), in 16 pitches.


The Multi button enables special mode in which 12 notes within any octave will
play 12 presets starting from the current one. All presets will be played at
note C-4 regardless of which note has been pressed down. This is useful to
create drum kits and arpeggio chord collections.


The NTSC/PAL buttons affect to the flavor of the NES APU emulated. The effect
is applied globally. It is really subtle, mostly affects to the note range and
tuning (a few cent offsets here and there), and adds a bit of variety into
sound of the noise channel.


The slider on the right is output gain of the plugin. It is a global parameter,
affects all presets.

You can assign different presets to different MIDI channels. The channel is
selected with the +/- buttons right to the 'MIDIch' label.

You can globally change plugin polyphony (how many notes it can play at once)
using the +/- buttons right to the 'Polyphony' labels. This includes totally
monophonic mode with just one channel. This mode is different, because every
new note played will hijack the channel, and when all but one notes released,
the last one will be played again.


Velocity is mapped to the 2A03 levels. Velocity 100 or above is for maximum
volume of 15, everything below maps linearly to volume levels 0..15. There is
no velocity effect for the triangle channel. The volume ratio between channel
is natural to the original NES sound hardware, so you likely will want to
make your pusle instrument max volumes a bit below 15, either using lower
values in the volume sequence, or by using velocity below 100. Velocity
derived volume is multiplied to the sequence volume, flattenning out the
volume envelope, that's how FamiTracker handles volume.



License 

The plugin and its source code comes without any warranty. You can
redistribute it and/or modify it under the terms of the WTFPL. See 
http://www.wtfpl.net/ for more details. 

The plugin also uses Blargg's LGPL licensed libraries.



History

v0.21 03.06.19 - x64 support
v0.2  08.05.19 - VRC6 support, *.fti files loading and saving
v0.1  06.05.19 - Initial WIP release, basic 2A03 support


Mail:	 shiru@mail.ru
Web:     http://shiru.untergrund.net
Support: https://www.patreon.com/shiru8bit