Let's launch fmcomposer.exe. The window below appears, showing the song editor. Hover the screenshot with mouse to see help.
Click on the first column of a channel then press an alphabetical key to add a note. You can edit the Key/Note mapping in the config page if they don't suit to your keyboard.
Adding a note will also add the instrument number (it depends on the instrument you select in the instrument list), and a default volume. You can select/move all those data with the mouse, edit them with right click or double click and more, please see keyboard shortcuts.
Notes can be slurred by removing their instrument number.
To stop a note, press '='
The last column is reserved for effects. They can change the panning, delay a note, change the tempo and many other things, see effect list.
Try composing a simple tune. To play several notes at the same time, put them on different channels :
Bored with the default piano sound ? Click on the Instrument tab . The Add button above the instrument list is now available :
Click on Add to add a second instrument into the list, then Load to open one of the instruments shipped with the program. You'll found them in the instruments folder.
See the next chapter to learn how to create your own sounds.
FM (Frequency Modulation) synthesis works by modifying a wave's frequency depending on the amplitude of another wave :
The Carrier get its frequency changed as the Modulator evolves.
To get interesting sounds, more than a single modulation is needed. FM Composer provides 6 of them, which can be configured in any imaginable way. They are called operators, each one can generate a basic shape : sine wave, square, triangle...
When they are at the bottommost position, you listen to their direct output : changing their volume impacts as you expect, the output volume. When they are above, their sound isn't directly heared : their output modulates the frequency of the operator below . The volume of those operators will impact the tone of the below ones. When several operators are next to each other, there is no frequency modulation thing, their output is simply summed like if they were separate sounds. The way the operators are arranged is called an algorithm.
Click on the Instruments tab. Don't be impressed by the amount of parameters. They are organised per operator. When your mouse hovers a parameter block, the corresponding operator is highlighted so you can see what you are actually editing :
|Volume envelope||Volume-over-time parameters. It's a classic ADSR envelope but with added delay, initial volume and hold (held time before decay) additional parameters.|
|Frequency||Frequency parameters. Can be a ratio calculated from the playing note, or a fixed frequency. Integer ratios are best for harmonious sounds. 1/4 tone and Fine parameters allow to break those integer values and create inharmonic sounds./td>|
|Waveform||Changes the waveform type and its offset.|
|Pitch envelope||Changes the way the frequency evolves over time. Initial freq/decay time defines a starting frequency and a time to reach the normal frequency. Release freq/release time is the same but triggered on note release.|
|Keyboard scalings||Allow to modify operator parameters depending on the note position on the keyboard. The higher the values, the higher effect strength will be applied.|
|LFO||Choose how the LFO affects the operator's frequency and amplitude|
Start by experimenting how FM works. Put the operators 1 and 6 on a bottom position, Drag&drop the 2, 3, 4 and 5 on the 6 then mute the 6th. This will mute all the operators above it so you can listen to Op1 :
Play a note on your keyboard, you should hear a simple sine wave sound which is operator 1's output. Play with the envelope parameters and the waveform choice. Now put an operator above it. Listen how the sound is modified as you change its volume and frequency multiplier. This is very basic 2-operators FM and you can already make a lot of sounds with it. But they won't be much refined, the 4 others operators are here so you can build more precise harmonics to get the sound you want.
Let's say you want to create a pan flute sound. Try to split it in several parts. You have the 'T' noisy attack sound, and the main sustained sound of the pipe. You can use two blocks of 3 operators to make this sound : the first 3 will do the attack sound, the 3 others the pipe sound. It's a simple way of creating sounds when you don't know where to start : split the complex final sound into separate simple ones.Hints:
By listening to a real pan flute, you'll probably notice that it's not just a noisy attack + a resonating sound. There is still an airy sound in the sustained part, and the attack has some harmonics that are not pure noise. Try to recreate those subtleties by tweaking your current sound.
A great way of understanding how to make sounds is to look at some of the built-in FM Composer sounds (/instruments/ folder). You can see how they are made and use them as a starting point if creating your sound from scratch seems too annoying.
Creating a particular sound can be achieved easily after some practice. Try creating a rough approximation with few operators, then refine the sound by adding others operators and fiddling with multipliers and waveforms.
As seen in the tutorial tutoriel, adding notes is done by selecting an instrument in the list, clicking in the pattern then pressing a key. 24 channels are available, each one having a volume, panning and reverb. Shift+Mouse wheel allows to scroll horizontally so you can see all the channels. To move/swap channels, click on their number in red then drag&drop :
Right clicking on the pattern list shows several options for organizing, creating and removing them :
Moving a pattern is done, like the channels, by drag&drop.
Pattern editing functions are also available with the right click. You can transpose the selected notes, create fade in/outs, insert/delete rows, add effects...
The effect column is divided in two parts, a letter representing the effect type, and a value. If you are familiar with trackers, you'll notice some similarities.
|A||Arpeggio||Create a fast, chiptune-like 3 notes arpeggio. The first note is the note on the pattern, the two others are defined by the value of this effect : the units represent the second note, in semitones from the first (0-9), the tens represent the third node (0-25 although the common usage range )||0-255|
|B*||Pattern jump||Jump to another pattern. Use in combination with C (row jump) to create a loop point||0-255|
|C*||Row jump||Jump to another row (on the same pattern if no pattern jump is specified)||0-255|
|D||Note delay||Allows notes to be played with precise timing (1/8th row steps)||0-7|
|E||Portamento up||Increase the pitch of the current note. Value affects the slide speed||0-255|
|F||Portamento down||Decrease the pitch of the current note. Value affects the slide speed||0-255|
|G||Glissando||Create a smooth pitch transition between notes. Value controls the glissando speed||0-255|
|H||Vibrato||Add vibrato. It is persistent, so you can use other effects while keeping vibrato active. Put a H0 to stop it.||0-255|
|I||Pitch bend||A MIDI-like pitch bend. Unlike portamento up/down which continuously change pitch without any limit, pitch bend sets the pitch relative to the current note. 0=-2 semitones, 64 = -1 semitone, 127=nothing, 192=+1 semitone, 255=+2semitones.||0-255|
|J||Tremolo||Create a tremolo effect. Like vibrato it's a persistent effect, use J0 to stop it.||0-255|
|K||Instrument control||Modify a parameter of the current instrument. Use the instrument editor to select which parameter this effect controls :||0-255|
|M||Channel volume||Change the channel volume. 0=muted, 99=full volume||0-99|
|N||Channel volume slide||Smooth channel volume slide. 0=fast decrease, 127=no change, 255=fast increase.||0-255|
|P||Panning slide||Create a smooth panning transition. 127 does nothing, lower values pans to the left faster as it comes close to 0, higher values pans to the right faster as it comes close to 255||0-255|
|Q||Note retrigger||Fastly repeats the note on the same row, up to 8 times||0-7|
|R||Reverb send||Set the reverb amount. 0=no reverb, 99=maximum||0-99|
|T*||Set tempo||Change the tempo (BPM).||0-255|
|V*||Global volume||Set the global volume. 0=muted, 99=full volume||0-99|
|W*||Global volume slide||Smooth global volume slide. 0=fast decrease, 127=no change, 255=fast increase.||0-255|
|X||Channel panning||Set panning to the desired value. 0=left, 127=middle, 255=right.||0-255|
|Y*||Sync marker||Special markers for synchronizing events to the song. See the FM Lib API||0-255|
The library is written in C, without any dependencies, and allows the playback of songs made with FM Composer. It provides real time control of the channel properties (volume, panning), global tempo, muting/replacing instruments, fire events when the song reach a specific point... A lot of useful features for sound interactivity in your game.
The API provides a simple function that writes its output to a buffer, so you can output that to the speakers using a lib that provides sound card access, or write the data to a file, or doing whatever you want with it.
|Indie (1-2 people)||$20 / app|
|Studio (3-10 people)||$100 / app|
|"AAA" (10+)||$500 / app|