Manual

Everything the FM-1 does under Norilsk. New here? Start with The panel; to install, see Install.

First steps

  1. Power on. Generator 1 is chosen; each generator already has a sound and a lane of effects.
  2. Play white keys. Press FX, SEL or ENV to hear the other generators.
  3. Press HOME until a generator sounds right to you. SHIFT + HOME keeps its family and tries again.
  4. Hold a key and press SHIFT to latch it. Latch notes on two or three generators to build a texture.
  5. Turn KNOB 2 for more or less effect, KNOB 1 to disintegrate, KNOB 3 and KNOB 4 for delay and reverb.
  6. Press SAVE, hold a white key 0.8 s: the whole machine is stored in that snapshot. Make a few, set a morph time with KNOB 1 and move between them.
  7. Hold SAVE (outside the SNAPSHOTS page) to keep everything in the FM-1's flash as a session.

Cheat sheet

SHIFT is the rightmost black key. Black keys are contextual: a key with a job in the current view glows dimly (lit when on); a key with none does nothing and stays dark. "Hold" means 0.8 s unless stated otherwise.

Slots

ToDo this
Choose generator 1, 2 or 3 (keys play it)Press FX, SEL or ENV
Choose effect slot (lane) 1, 2 or 3Press LFO, EDIT or GLO
Mute or unmute a slotHold its button
Mute fade in / fade out of a generator (OFF to 60 s)SHIFT + its button, let go: its page. KNOB 1 MUTE FADE IN, KNOB 2 MUTE FADE OUT. Its button to leave
Level / pan of chosen generator (pan moves its lane too)Turn SELECT / ALGORITHM
Link two generators (first modulates second)Hold SHIFT, hold first generator's button, then hold second's. Repeat to unlink

Playing

ToDo this
PlayWhite keys: chosen generator, in current scale. Keys playing the scale's root glow dimly
Play from a MIDI keyboard or computerUSB or the TRS MIDI IN jack: channels 1, 2, 3 play generators 1, 2, 3; channel 16 the chosen one (GLOBAL SETUP changes them)
Change octave (−3 to +3)OCT− / OCT+
Latch a noteHold white key, press SHIFT (key stays lit)
Release a latched noteHold SHIFT, press lit key
Set root and scaleARP opens SCALE page: SELECT root, ALGORITHM scale (23). ARP again to leave
Random root and scaleSHIFT + ARP (let go at once; held, it opens PRESETS)
DISINTEGRATOR of generator being played (0 to 100)KNOB 1
Master DRIVE (0 off to 100)SHIFT + KNOB 1
FX MIX of chosen lane, dry to wetKNOB 2
Delay send / reverb send of generator being playedKNOB 3 / KNOB 4
Output levelMASTER

Drawing new material

ToDo this
New sound for chosen generator (with its lane's effects)HOME
New effect chain for chosen laneChoose the effect slot, press HOME
New, but same family (or same recipe)SHIFT + HOME
Pick a family (generator) or recipe (effect slot)Hold SHIFT, turn PRESETS: alphabetical list, four per page. Then SHIFT + HOME draws a new one of it
Everything new, all six slotsHold HOME
New cables only1st black key (REWIRE)
New values only (effects), or new sound of same family (generator)SHIFT + 1st black key (RAND PARAMS)
Bias draws towards harsh, torn material2nd black key: ABRASIVE path on/off
Bias draws towards dark ambient and drones3rd black key: DARK path on/off
Draw industrial percussion: struck metal, machines4th black key: MACHINE path on/off

Pages

ToDo this
Delay settings (TIME, FEEDBACK, DAMP, MIX)SEQ, then KNOB 1 to 4
Reverb settings (SIZE, DECAY, DAMP, MIX)SEQ twice, then KNOB 1 to 4
Modulation of chosen slotSEQ three times. PRESETS picks LFO 1, LFO 2 or route A to H; KNOB 1 to 4 set its values
Back to playingSEQ a fourth time
A generator's page (MUTE FADE IN, MUTE FADE OUT)SHIFT + its button, then KNOB 1 / KNOB 2. Its button to leave
Random modulation for chosen slotSHIFT + SEQ
GLOBAL SETUP (MIDI, USB audio)Hold SHIFT, hold SAVE 0.8 s. PRESETS moves, SAVE chooses, SHIFT + SAVE goes back (from the top: out)

Looper (generator being played)

ToDo this
Record a loopREC to arm (first note starts it), REC again to end (plays at once)
OverdubREC while loops play
Clear loopsHold REC 1 s
VARY on/offSHIFT + REC
Stop or restart loopsPLAY
Stop or start all generators' loopsSHIFT + PLAY
Take loops out or bring them backHold PLAY, press white keys
REVERSE, PENDULUM, RANDOM, HALF SPEED, DOUBLE SPEEDHold PLAY, press 4th to 8th black key (again: off)
Move loops one scale step down / upSHIFT + OCT− / OCT+ (hold a generator's button too for its loops only)

Snapshots

ToDo this
Open SNAPSHOTS pageSAVE (again, or a slot button, to leave)
Recall snapshotPress and release its white key
Store current stateHold its white key 0.8 s, or move frame with PRESETS and hold SAVE
Empty snapshotHold SHIFT, hold its white key
Morph time (0 to 30 s)KNOB 1 on SNAPSHOTS page

Sessions

ToDo this
Save while playingHold SAVE (saves into loaded session; with none loaded, offers first empty slot)
Clear: a new session in place of the one loaded10th black key (beside SHIFT): NEW SESSION? PRESETS to YES, SAVE. The saved one stays in the flash until you save over it
Open SESSIONS listSHIFT + SAVE (let go at once; held, it opens GLOBAL SETUP)
Pick a sessionPRESETS
Open its page (BACK, LOAD or NEW, SAVE, COPY, DELETE)SAVE
Pick and run a rowPRESETS, then SAVE
Go back a levelSHIFT + SAVE

Presets

ToDo this
Open PRESETS for the generator being playedHold SHIFT, hold ARP 0.8 s
Pick a slot (64)PRESETS
Load it into the generatorARP or SAVE (back to playing)
Save the generator into itHold ARP or SAVE. Over a full slot: OVERWRITE? PRESETS to YES, ARP
LeaveSHIFT + ARP, SHIFT + SAVE or a slot button

Start-up

ToDo this
Rescue mode (install again)Hold OCT− while powering on
Chip's own updaterHold OCT− and OCT+ 5 s

How it is put together

Norilsk has three generators, three effect slots, a master delay and a plate reverb. I think of the generators as furnaces: each burns a sound. Effect slots are the pipes the sound runs through; delay and reverb are the air the fumes end up in. In practice:

  • Each generator plays through its own lane of effects: generator 1 through lane 1, 2 through 2, 3 through 3. A small dry part of each generator also goes straight to the master.
  • Each lane is a chain of two or three effects, drawn from a recipe. An effect before the last can also send to the master on its own.
  • White keys play the generator chosen last, in the current scale. Four voices are shared by the three generators.
  • Each generator has level, pan, mute, delay and reverb sends, a looper and a DISINTEGRATOR. Each lane has level and mute. A generator's pan also pans its lane and every effect in it: panning is set on the generator only.
  • One generator can modulate another (ring, amplitude or filter), but only if you link them by hand: hold SHIFT, hold one generator's button, then the other's.

CPU core 1 renders the voices. Core 2 runs the effects, delay and reverb, one block (0.73 ms) behind.

Every sound swells in and keeps moving. However, nothing sounds on once no note is held, latched or looped: released voices fade out within three seconds, and effect slots close two seconds after the last voice. Delay and reverb are the exception: their tails always ring out in full, whatever you let go or mute.

What is random and what isn't

Almost nothing is set by hand at the start. It is drawn at random; your job is to choose, keep, throw again and play. Randomness works at every scale:

  1. Sound. FURNACE, the engine, draws a sound from family, seed, path and engine generation. The same four values always give exactly the same sound, so a session only needs to store the seed.
  2. Note while it sounds. An invisible hand (after Anima) keeps moving each voice's four macros. Russolo's grit drops bits, crosses the sound with itself and makes it stutter. Grains are read from places that wander. In other words, the same key held twice never sounds the same twice.
  3. Generator (HOME on a generator): scene, family (chosen by how harsh it may be), which effects it is cabled into, and how much of it is heard dry.
  4. Effect slot (HOME on an effect slot): one of 38 recipes. Each place in the recipe gets one of its allowed effects that fits the slot's memory; every value is drawn around its default, and the outs are drawn too. In a twin recipe the second effect is the first again, its values drawn from the first's and kept apart. HOME on a generator also draws its lane's chain.
  5. Paths. ABRASIVE and DARK bias every draw above: scenes, families, recipes and effect values. MACHINE draws only the struck families and the recipes that suit a strike.
  6. Partial draws. REWIRE draws only cables. RAND PARAMS draws only an effect slot's values, or a new sound of the same family for a generator. SHIFT + HOME keeps family or recipe. Holding HOME draws all six slots.
  7. Modulation. SHIFT + SEQ draws a slot's two LFOs and two to six of its eight routes. STEPS and DRIFT shapes and the RANDOM source keep drawing new values as they play.
  8. Playing. DISINTEGRATOR gates, stutters, crushes and pans each generator in pulses of random length. Looper's VARY changes every note it plays; RANDOM jumps between loops.
  9. What isn't random. A snapshot stores the whole machine and recalls it exactly, or morphs into it. Sessions keep everything in flash.

Screen

Designed for low vision: few words, very large type, high contrast.

Main view is drawn as a place. Smog drifts slowly across the top, with audio load on the left and battery on the right. Below ground, the three effect slots are rusty pipes, one above the other. Each effect is a section between bolted flanges, its name on a dark plate: FLT filter, FLD fold, MU mulaw, SHF shift, MDL modal, STR string, VOX vowel, TAP tape, RVS reverse, SPR spring, GLT glitch, CLD cloud, SCR scream, RNG ring, STV starve, CHB cheb, BNK bank, SMR smear, DIF diffuse, SLW slew, XOR xor, DST dust, WST waveset, XMD xmod, CHS chaos.

Under each name, a band shows the colours of the generators feeding it. Plates fed by the chosen generator are filled with its colour. A section glows hotter while sound passes through it; a muted pipe is cold grey.

At the bottom, the generators are brick furnaces, fire in their mouths in their colours (red, blue, green): brighter while they sound, dark when muted. Chosen slot has a white frame. Cables are not drawn. KNOB 1 shows its value on a full-screen dial.

On the settings pages (DELAY, REVERB, MOD, a generator's page) each setting's name is amber and its value white. The setting just turned is black on white, its name dark amber.

Messages (LANE 2 REWIRED, GEN 1 WIRE, OVERLOAD) cover the top of the screen for a moment. One too wide for a line takes two; a line still too wide drops one size. No word runs off the screen.

Generators

Each generator runs an instance of FURNACE, the engine, playing one sound drawn from forty-four families. Four voices are shared by the three generators, and each voice is a complete instance of the engine. Because of this, one sound on two keys never sounds quite the same. Details: FURNACE engine below.

Mute fades

SHIFT + a generator's button, let go, opens its page: GEN 1, GEN 2 or GEN 3 at the top, two settings below.

  • MUTE FADE IN (KNOB 1): how long the generator takes to come back when its button is held to unmute it.
  • MUTE FADE OUT (KNOB 2): how long it takes to fade away when its button is held to mute it.

Each OFF (at once, as before) to 60 s: half-second steps to 10 s, whole seconds above. Both OFF at power-on and in a new session. The fade falls evenly in loudness; the generator's sends to its lane and to the master delay and reverb fade with it. Muted or unmuted again halfway, it turns back from where it is. Kept in snapshots and sessions. A snapshot recalled at once, or a session loaded, sets the mutes at once; a morph glides them over its own time.

The generator's button, or SHIFT + it again, leaves the page. Holding SHIFT with one generator's button and then pressing another still links them (no page).

DISINTEGRATOR

KNOB 1 while playing sets the DISINTEGRATOR of the generator the keys play, 0 to 100. It is an unstable gate after the sound is made and before its cables, so effects hear it too.

It cuts the sound into pulses of uneven length. Each pulse lets the sound through, gates it down (to silence from 60 upwards), repeats a 10 to 90 ms slice of what was just played, or crushes it (bits and sample rate). A pulse may also throw the dry part across the stereo image.

Higher values give shorter, more irregular pulses, more of them acting, deeper and wider. Every edge is smoothed over about 1.5 ms, so no clicks. At 0 nothing is touched. Each generator keeps its own value in snapshots and sessions.

Ideas from Destroy FX's Skidder and from buffer repeaters; none of their code.

FURNACE engine

FURNACE started as Tonitor's FM engine and was rebuilt around one goal: sound that is never struck, never still and never exactly the same twice. Struck sound came later, on a path of its own (MACHINE, generation 7).

It works on one voice, one note and one block of 32 samples (0.73 ms at 44.1 kHz) at a time. Everything is integer maths, because the chip has no floating point; per-sample code runs from RAM. Code: firmware/src/mol.c (voice and draw), fm6_core.c (operators), wt.c (waves), found_clips.h (found sounds).

Voice signal path

Every block goes through these stages, in this order:

  1. Hand (generation 3). An invisible hand rests on each voice (after Anima: Tonitor's version, from Vascular). One finger drags figures across a surface: orbits, figures of eight, scribbles, slow glides, now and then a flick. It presses in slow swells and sometimes lifts to land elsewhere; a second "ghost" finger comes and goes. Finger position, pressure, speed, angle, distance and age are read once a block. Two to four of them, chosen when the sound is drawn, are mapped to brightness, cloud, level, grit, glitches and cloud darkness. Never to pitch.
  2. Operators. Six-operator FM: msfa (Dexed's core) in Felucca's integer port, as Tonitor shaped it. DX7's 32 algorithms, four-rate / four-level envelopes, keyboard scaling, ratio or fixed frequencies, feedback, LFO. Each operator reads a sine or one of 28 band-limited single cycles (four primitives, Bigorna's sixteen harmonic sets, eight made for bells). A wave can morph towards the next in its bank, and its phase can be bent as on the Casio CZ: a sine opens like a filter, a square's width follows its envelope. Each wave has eight levels of detail; one is picked every block from the operator's frequency, so the wave itself never aliases. Macros act here: BRIGHTNESS on modulator index, DETUNE (or INHARMONIC) on ratios, MOTION on LFO and tremolo. Finally a 7 Hz high-pass removes the DC that FM produces, and the sound's measured gain is applied.
  3. Exciter and body (generation 4). Operator output, noise or a bow drives a body tuned to the note. TUBE is a waveguide: a delay line one period long, damped and low-passed inside its loop, with an allpass adding a wire's stiffness (partials pulled apart). Open, or closed at one end for odd partials only. MODAL is six resonators on the ratios of a bar, plate, bell, closed pipe or hull, slightly detuned. The bow is Smith's bowed-string model: friction that grips while string and bow move together and slips when they don't. A body rings 2.5 s at most and never bends pitch.
  4. Grit (generation 3). Russolo's, after Robert Heel's Noisferatu. Three parts: a small DAC (bits dropped, each sample held several times); XOR of the sample with a triangle at a ratio of the note (logic oscillators); and stutters, looping the last 5 to 120 ms 3 to 12 times before carrying on. Mixed with the clean sound; the hand moves both mix and stutter chance.
  5. Grains. Everything above is written continuously into the voice's own buffer: 12288 samples at 22.05 kHz, 8-bit mu-law, about 0.56 s. Up to four grains at once read it back, in one of two ways. CLOUD: grains of 2 to 400 ms at their own rate (1 to 400 per second), starting at a drifting point behind the write head; jittered in time and level, pitched by the sound's intervals, sometimes reversed, darkened by a low-pass, fed back into the buffer so the cloud smears on itself. When the sound asks for it, the cloud is FROZEN: the buffer stops recording a moment after note-on and the cloud keeps turning over what it holds. PULSARS (after Curtis Roads): grains locked to the note's period, half a grain to four per period. One grain per period reads the sound back as a formant; a burst mask drops some grains, adding a sub-harmonic. From generation 5, a share of grains reads a found sound instead (see below). GRAIN macro changes the cloud's share and rate, and gives a sound without a cloud the cloud drawn with it.
  6. Hand pressure on level, last.

A voice ends when its note is released and it has been silent for a quarter of a second, or when operators, body and cloud have nothing left. Separately, generators fade a released voice out within three seconds.

Found sounds (generation 5)

Sixteen 0.6 s clips in flash, 8-bit like the grain buffers, each looping without a seam:

  • Ice and sea, from NOAA hydrophones: iceberg calving, its tremor, icequake, grounding, ship above the Challenger Deep.
  • Aurora radio emissions, from NASA's Polar spacecraft: auroral hiss (twice), kilometric radiation, chorus, "saucers".
  • Plant, rendered here: transformer, air duct, furnace, rain on tin, engine room, wind in wires.

A grain can start anywhere in its clip. Playback rate follows the keys only by a drawn share, so clips are barely transposed. DEPTHS, AURORA and PLANT take 70 to 100 % of their grains from a clip. Older sounds with a cloud get a clip one time in three, for 30 to 60 % of their grains. Sources and credits: found/CREDITS.md.

How sounds are drawn

A sound is drawn from four values: family, seed, path and generation. Same values, same sound, bit for bit. This is why sessions store seeds, not sounds. Order of the draw:

  1. Family. From the generator's scene and a harshness budget (HOME), or kept (SHIFT + HOME). Scene also sets the path: FIELD ambient, MATERIAL open, FEEDBACK and EROSION experimental.
  2. Body. One of eight FM bodies. Newer families each borrow one and build on it.
  3. Family features. Cloud, shattered grains, pulsars, freeze, grit and logic, exciter and body, or found sound.
  4. Path. AMBIENT: slower and darker (longer attacks and releases, modulators down, longer cloud, an octave down one time in three). EXPERIMENTAL: harsher (modulators and feedback up, mutated more often than not). Open path: one sound in three mutated. A mutation fixes a partial to a frequency, turns an envelope upside down, pushes feedback, moves an octave, replaces a sine with another wave, or bends one.
  5. Care. Modulators on high ratios turned down, index scaled down the keyboard, rate scaling on carriers.
  6. Generation 2 rule. Every sound swells in, holds and keeps moving: slow LFO (0.1 to 1 Hz) on modulator levels, no pitch envelope, cloud fading in.
  7. Later generations. Hand on most sounds (85 %). Grit on some older families on the experimental path. Body for one older sound in five; found sound for one older cloud in three.
  8. Sanitiser. Every value forced into range.
  9. Measurement. Sound rendered for 2.5 s at middle C, outside the audio path; its loudest 46 ms brought to a fixed level. Boost limited to +15.6 dB, so a slow swell stays a swell.

Engine generations

A sound keeps the generation it was drawn under, and a generation never changes what it draws. Tests check this with a hash of hundreds of sounds per generation. In practice, a session from an older build sounds exactly as it did. New sounds are always drawn on the newest generation.

GenerationAdded
0FM with waves in the operators, grains, twelve families
1No pitch bends in bodies (no zaps, no bleeps), tonal ones roughened; no freeze before the body has sounded
2Textures and drones only: IMPACT and PULSE no longer drawn; every sound swells in, holds and keeps moving
3Hand, grit, eight families
4Exciter and body, five families
5Found sounds, three families
6Eight families; one older sound in four gets other waves (harmonic sets, bells, bent)
7Struck: eight families of industrial percussion, drawn only on the MACHINE path. Older families as in 6
8ANVIL, STAMP, RIVET and SHEET strike again while held, on an unstable clock. The rest as in 7

Families

FamilyGen.What it is
METAL0Risset's bells and gongs: many carriers on inharmonic ratios, high partials dying first
DRONE0Slow pairs, near-harmonic, detuned to beat, wandering index
BRUIT0Noise from feedback and high ratios, scattered by a sample-and-hold LFO
IMPACT0Struck body, modulators dying first (not drawn from generation 2)
PULSE0Sound pulsed by its own LFO (not drawn from generation 2)
GLASS0Carriers on bell waves, morphed, barely modulated
FORMANT0CZ approach: carriers bent by their envelopes under a modulator at the fundamental
REED0Saw or square whose width follows its envelope, under a feedback operator
CLOUD0Body under a slow cloud: long grains, pitched, dark, smeared
SHATTER0Body broken into short grains: fast, jittered, reversed, scattered
PULSAR0Sustained body read back one grain per period: formants, sub-harmonics
FREEZE0Body frozen into a cloud a moment after it starts
FURNACE3Low and roaring, crushed, dark cloud over it
HUM3Machine room: carriers fixed near 50 and 100 Hz, beating, XOR'd
STATIC3Feedback noise, crushed hard, stuttering, shattered
HOWL3Formants an octave down under long, dark grains
SCRAPE3Scraping metal: high inharmonic partials, bent grains, held samples
DATA3Glass through bitwise logic, crushed, stuttering, bent pulsars
ASH3Dark drone under sparse, dusty crackle
TUNNEL3Huge dark cloud, fed back, sometimes frozen
WIRE4Stiff wire bowed by friction, operators as the bow arm
STEAM4Noise in a pipe closed at one end, hiss beside it
CHIMNEY4Wind in a long open tube, an octave down
GIRDER4Noise in a bar's or plate's modes
HULL4Operators droning in a bell's or hull's modes
DEPTHS5Ice breaking and grinding, ship far above: slow, dark
AURORA5Hiss and radio from above the ice: airy, drifting
PLANT5Hum, ducts, furnace, rain on tin, engines, wires
ORGAN6Organ in a ruin: six carriers on drawbar ratios, held; sometimes sounding in a pipe
CHOIR6Wordless voices: formant-like waves bent by their envelopes, widely detuned, soft cloud
FOGHORN6Saws and squares an octave down, fed back hard, in a closed tube
SWARM6Many high carriers slightly apart, beating: buzzing mass
CORONA6Bell waves high up, cloud pitched an octave and a twelfth above
SUBSTRATE6Squares and saws an octave down, bent; sometimes a pipe's modes
GLASSHARP6Noise drawn around a bell's modes an octave up, long
OXIDE6Corroded metal: bent waves, crushed bits, plant grains
ANVIL7Hammer on an anvil: bright inharmonic partials, a bar or plate ringing a second or two. Scattered strikes while held (8)
STAMP7Press coming down: low thud into a closed tube, dark burst, short. Scattered strikes while held (8)
RIVET7Rivet gun: high, small, a plate, very short; clusters of shots. Scattered strikes while held (8)
SHEET7Metal sheet struck: crowded modes of a hull, wobbling, longer. Scattered strikes while held (8)
GEARS7Gears turning: quick ticks on a small plate in a pattern of teeth, pace wandering. Runs while held
PISTON7Slow thump into a closed tube, a hiss of steam between. Runs while held
RATCHET7Ratchet or chain: irregular clatter on a bar or bell, bounces. Runs while held
FORGE7Drop hammer: slow heavy anvil strikes, each bouncing, ringing long. Runs while held

Macros

Four macros, each -64 to 64. At 0 the sound is exactly as drawn. There is no page to set them by hand: the hand moves them, and so do modulation routes (MOD page) aimed at them. Response follows the square root of the knob's travel, so the first part of the turn does the most.

  • BRIGHTNESS: modulator index about 27 dB either way, higher carriers tilted up, feedback with it.
  • DETUNE: carriers pulled apart (up to 40 cents), modulators moved off their carriers. On metallic and noisy bodies it becomes INHARMONIC: every operator except the lowest carrier moved off its ratio.
  • GRAIN: cloud wetter and faster, or drier and slower. On a sound without a cloud, fades in the cloud drawn with it.
  • MOTION: LFO depths, a tremolo (1.5 to 6 Hz), grain drift.

Hand and modulation routes can move the macros at the same time.

Effect slots

Twenty-five effects, two or three per slot. SMEAR to DUST came in build 32, WAVESET, XMOD and CHAOS in build 45; their names are provisional. Delay and plate reverb belong to the master only (since build 30). A session saved with them in a slot loads them as TAPE and SPRING.

EffectWhat it is
FILTERDriven state-variable filter: low-pass, band-pass, high-pass or notch. Resonant to the edge of screaming, never piercing
FOLDWavefolder, with a second fold and a tone control
MULAWRate and bit reduction, filter open enough to alias, drive into it
SHIFTFrequency shifter: every partial moved by the same 40 to 900 Hz, tearing the harmony apart
MODALThree tuned resonators, spread inharmonically, ringing up to Q 325
STRINGThree Karplus-Strong strings on the scale's root, ringing up to 8 s
VOWELThree formants morphing through vowels, driven
TAPEEcho through a worn head: dropouts, saturation, age, hiss under the sound
REVERSEWindows of the sound played backwards, fed back
SPRINGSpring tank, with its chirps
GLITCHRussolo's bent buffers: jumps and stutters through the last 0.74 s, never at another pitch
CLOUDGranular cloud that can freeze what it holds
SCREAMShaped feedback howl
RINGDiode ring modulator modulating itself
STARVEStarved, gated fuzz (after the Fuzz Factory)
CHEBHarmonic re-voicer using Chebyshev polynomials (after Airwindows' Pafnuty)
BANKInharmonic resonator bank: bar, plate, bell, membrane (after Mutable Instruments' Rings)
SMEARSound through twenty random taps, each + or −, over 12 to 46 ms: grainy haze rather than a room (velvet-noise decorrelator)
DIFFUSEFour allpasses in series (lengths from Mutable Instruments' Clouds): blurred edges, no tail of its own
SLEWLimits how far the sound can move in one sample: highs turned into dark, grinding ramps (after Airwindows' Slew)
XORSound combined bit by bit (XOR, AND, OR) with itself a moment earlier: broken and digital, but following its shape
DUSTHiss and crackle where the sound moves, none where it is still (after Airwindows' TapeDust)
WAVESETSound cut at its zero crossings into its own small cycles, replayed a group at a time: repeated, reversed, shuffled or left out (after Trevor Wishart). Grain, never rhythm
XMODSound against its own copy 1 to 40 ms back: folded, diode ring or Warps' comparator (after Mutable Instruments' Warps)
CHAOSDouble-well oscillator pushed by the sound: light, a resonance at a fixed pitch; harder, rough; hardest, jumping between its wells

Last three follow what goes in more than their own values: same values on a drone, a cloud and a hiss give three different things.

Thirty-eight recipes decide which effects may stand at each place: SPACE, ECHO, METAL, STRINGS, EROSION, GHOST, SPECTRAL, RESONANT, FOLDS, TELEPHONE, HELL, FACTORY, GLITCH, BROADCAST, ABYSS, RUST, FREEZER, FEEDBACK, FOUNDRY, GONG, SPECTRE, SPUTTER, SMOG, STATIC; with the new effects, SHATTER, MOSAIC, CROSSFIRE, ATTRACTOR, TURBINE.

Twin recipes put one effect twice in a row: MIRRORS (SHIFT), FOLDOVER (FOLD), CLANGOUR (RING), CRUSH (MULAW), OVERTONE (CHEB), SHATTER (WAVESET), CROSSFIRE (XMOD). Second one's values are drawn from the first's and kept apart: shifter going the other way, ring and crusher at another rate, another shape, mode or algorithm. In SWARM (CLOUD), LOOPHOLE (GLITCH), CAVERN (SPRING) and FOG (SMEAR) the second also feeds back into the first. The feedback follows what comes into the lane: no sound in, it dies within about 2 s. Recipe names are provisional.

Every effect falls silent with nothing coming in. None sounds on by itself.

Lanes

Generator 1 plays through lane 1 only, generator 2 through lane 2, generator 3 through lane 3. Each generator is cabled into the head of its lane, with a small dry share. No cables between lanes. A lane has no pan of its own: it and every effect in it follow its generator's pan (centre, left and right at power-on).

HOME on a generator also draws its lane's chain, so the chain is part of the generator's patch (SHIFT + HOME keeps family and recipe). HOME on an effect slot redraws that lane and keeps its generator. REWIRE inside a lane redraws where the generator enters and which effects also send to the master. Holding HOME draws all three generators and their lanes.

From build 28 to 35 a session could also be MESH: any generator cabled into any effect, effects cabled across slots. In practice it mostly produced smear, so from build 36 there are only lanes. A MESH session loads rewired into lanes, snapshots included, nothing redrawn.

Paths

Three black keys bias everything HOME draws, and RAND PARAMS too:

  • ABRASIVE (2nd black key): gnarly, textural, torn. Favours experimental scenes; harsh families (BRUIT, SHATTER, FURNACE, STATIC, SCRAPE, DATA, METAL); more cables and cross-modulation; torn and crushed recipes; more drive, breakage and crushing in effects.
  • DARK (3rd black key): dark ambient, drones, introspection, along the lines of Lustmord and the Cold Meat Industry catalogue. Favours the FIELD scene; drones, hums, tunnels, ash and freezes, nothing harsh; spacious and ringing recipes (SPACE, GHOST, ABYSS, FREEZER, RESONANT, GONG and others); darker, less driven values, larger spaces. Also 3 dB quieter.
  • MACHINE (4th black key): industrial percussion. HOME on a generator draws only the struck families (ANVIL, STAMP, RIVET, SHEET, GEARS, PISTON, RATCHET, FORGE): metal against metal, presses, pistons, gears. No drums. The first four strike at the key, then again while it is held on a very unstable clock: intervals from 40 ms to 2.5 s, clusters, long pauses, each strike at its own level (softer ones darker) — a percussive texture, nothing to count. The other four are machines: they keep striking on their own while the key is held, each strike a little early or late, the pace wandering, no tempo. Let go, they stop and ring out. (Sounds saved in build 47, generation 7, keep their single strike.) HOME on an effect slot favours rooms, echoes, metal resonances and crushing; not frozen clouds or smoke, which would hold a strike into a drone. The struck families are never drawn on the other paths. SHIFT + HOME on a struck sound keeps its family on any path.

One path at a time. With none on, anything goes (nothing struck). Path is saved with the session and with each snapshot.

Modulation

Every slot, generator or effect slot, has two LFOs and eight routes, A to H.

  • LFO shapes: SINE, TRI, SAW UP, SAW DOWN, SQUARE, STEPS, DRIFT. Each LFO runs FREE, restarts on each NOTE, or runs ONCE, and has a fade-in.
  • A route goes from a source (LFO 1, LFO 2, VELOCITY, KEY, RANDOM) to a destination, by an amount.
  • Generator destinations: four macros, level, pan, sends, LFO rates.
  • Effect slot destinations: effect values by place, level, LFO rates (a lane's pan is its generator's). Routes point at a place, not at an effect, so after HOME draws new effects the LFO moves the new effect's value at that place.

SEQ's third page sets them; SHIFT + SEQ draws them at random.

Snapshots and sessions

A snapshot is the whole machine. Every slot's sound, effects, values and cables; levels, pans, mutes, mute fades and sends; DISINTEGRATORs; FX MIX; master delay and reverb; modulation; scale and root; octave; path. It also stores how the machine is being played: latched notes, whether each generator's loops are playing, which loops are taken out, their direction and speed, VARY, and moves along the scale. Loop recordings themselves belong to the session. Sixteen snapshots per session.

SAVE opens the SNAPSHOTS page. Release a white key to recall its snapshot. Hold it 0.8 s to store the current state in it. Hold SHIFT as well to empty it.

KNOB 1 on this page sets morph time, 0 to 30 s. A recalled snapshot moves into place over that time. Levels, pans, sends, values and LFOs glide. Sounds cross-fade on voices of their own; effect chains fade out and in, one after the other. Anything without an in-between value switches halfway. The target snapshot's square and key blink until the morph is done.

SHIFT + SAVE opens the SESSIONS list, as on Bigorna: four per page, PRESETS moves through 64 slots. Saved session white, empty slot grey, loaded one marked on its right. SAVE opens the slot's page:

  • BACK
  • LOAD, or NEW on an empty slot (clean slate)
  • SAVE (asks first before overwriting another session)
  • COPY to a slot chosen with PRESETS. First empty slot offered; copying over a session asks first
  • DELETE (asks first)

PRESETS moves through the rows, SAVE runs the selected one, SHIFT + SAVE goes back a level. While playing, holding SAVE saves straight into the loaded session. A session holds the machine, its sixteen snapshots, latched notes and every loop, in the FM-1's flash.

Presets

Hold SHIFT and hold ARP 0.8 s: the PRESETS page, for the generator being played (its number in its colour at the top right). 64 slots. A preset is one generator's patch: its sound, its lane (effects, values, outs, return), how it is cabled into the lane, its DISINTEGRATOR and its lane's FX MIX. Level, pan, delay and reverb sends, modulation and mute are not part of it: they belong to the mix.

A preset is named by its sound's family and numbered within that family, in slot order: ANVIL 1, ANVIL 2, DRONE 1. Empty slots are grey.

  • PRESETS chooses a slot.
  • ARP (or SAVE) loads it into the generator and goes back to playing. A preset saved from one generator loads into any other, in that generator's own lane.
  • ARP (or SAVE) held 0.8 s saves the generator into the slot. Over a full slot it asks OVERWRITE?, NO first.
  • SHIFT + ARP, SHIFT + SAVE or a slot button leaves.

Presets are kept in the flash apart from the sessions, like the global setup, and backed up with them.

Norilsk only writes to blank flash or to its own retired sessions, never over another firmware's data. Other firmware does not return the favour, however: back up your sessions before installing something else.

Looper

Each generator has Tonitor's looper: up to ten free-running loops, each on its own clock. No tempo, no grid.

Press REC to arm a loop; the first note starts it. Press REC again to end it; it plays at once. Press REC again while loops play to overdub. A note held across the end of a loop is tied over.

Hold PLAY to show loops on the white keys and take them out or bring them back. This also lights the 4th to 8th black keys: REVERSE, PENDULUM, RANDOM, HALF SPEED, DOUBLE SPEED. SHIFT + OCT moves all loops along the scale; SHIFT + REC turns on VARY.

Backing up sessions

The website's backup page saves every session on the FM-1 to a file, with the global setup and the presets, and writes them back, from desktop Chrome, Edge or Opera.

From a terminal: tools/fm1_sessions.py lists sessions, tools/fm1_sessions.py save N saves one, tools/fm1_sessions.py restore FILE writes one back. Page and script only talk to an FM-1 whose USB name is FM-1 Norilsk.

USB audio

Connected to a computer, the FM-1 is also a class-compliant USB audio interface: no driver needed. It sends 16 bits, 48 kHz (or 44.1 kHz), taken before the MASTER knob: recordings don't follow the headphone level. Code from Tonitor and Bigorna.

GLOBAL SETUP, AUDIO > USB chooses what it sends:

  • STEREO (default): the master, left and right.
  • TRACKS: three channels, one per generator, mono: the generator with its lane of effects, after its level, before its pan, the master delay and reverb, and the drive. For recording each generator apart.

Changing it, the FM-1 leaves USB for a moment and comes back as the new device.

Global setup and MIDI

Settings of the machine, not of a session. Hold SHIFT, hold SAVE 0.8 s. PRESETS moves through the list, SAVE chooses or sets, SHIFT + SAVE goes back a level (from the top: out). A slot's button also leaves. Changes are written to the flash on leaving. Sessions and snapshots never change them; the backup page saves them with the sessions.

SettingDefault
MIDI > IN CHAN: GEN 1, 2, 3; AUTO (the generator being played)1, 2, 3; 16
MIDI > OUT CHAN: GEN 1, 2, 31, 2, 3
MIDI > RECEIVE: NOTES, CCON, ON
MIDI > SEND: NOTES, CCOFF, OFF
MIDI > PORTS: USB IN, TRS IN (the 3.5 mm MIDI IN jack)ON, ON
AUDIO > USBSTEREO

MIDI in plays each generator on its channel, from USB or the TRS jack. CCs set the generator on that channel:

CCSets
7Level
10Pan
16DISINTEGRATOR
17FX MIX of its lane
91Reverb send
92Delay send

With SEND on, each generator's notes (keys, loops, MIDI) and those CCs go out on its OUT channel. A note sent on is always sent off on the same channel, even if the setting changes while it sounds. No clock, no transport.