xD1 is an FM synth

xD1

xD1 is an FM synth with filters

This is an attempt at making a synthesizer without writing a UGen.
It’s based on FM7,
and uses the 32 FM algorithms from the DX7.
I haven’t striven for feature-parity with the DX7,
and in fact xD1 has filters, where the DX7 has none.
Nonetheless, the control setup is very similar.
Each operator has an envelope, a ratio and an index.

Requirements

Norns, MIDI input, grid (optional).

Documentation

Attach a MIDI controller, launch the script, make sure yr MIDI controller is selected in the Params menu, and you’re golden.

Grid control: think Earthsea. There’s one pattern recorder arranged along the left edge of the grid.
The buttons are, in order, rec, play, loop, clear.
As of 0.2 you shouldn’t really need it, but if you find yourself unable to clear stuck notes,
press the bottom key on the left edge of the grid to send a killall message.

Install

v0.2 Github link

;install https://github.com/ryleelyman/xD1
87 Likes

this is amazing. It sounds absolutely wonderful and I love the interface!

3 Likes

hell yeah! :smiley:

congrats on the script, it sounds awesome. Love FM synthesis

1 Like

Hi so is this finally the update on FM7 (Norns) with a functional UI? Sweet.

@hallmar the best! =}

6 Likes

I will admit I was inspired by FM7, but not enough to fork it haha

10 Likes

This sounds gorgeous - thank you very much!

1 Like

20 Characters of Piano Phase! :smiley:

2 Likes

I belatedly realized that I could use that as my sequence while showing off choukanzu to @WilliamHazard a few weeks ago as a chance to look cool haha, so consider this making up for a missed opportunity :smiley:

4 Likes

Thanks for this! Been wanting to use these sounds.

Having had a very quick go so far I’ve noticed that the default amp value seems a bit too loud maybe, it clips easily if you play a few high velocity notes at once

5 Likes

thanks for the feedback! I lowered the amplitude by about 6dB.

6 Likes

Cool :slight_smile: I can still get it to clip fairly easily but anyway I usually map a controller slider to amp anyway

Another hopefully useful piece of feedback: I set some long release values and get CPU-overload-sounding distortion if I play a load of notes quickly

that tracks: xD1 generates 10 envelopes, an LFO and an instance of the FM7 UGen on each note; it’s not the cheapest synth.

5 Likes

Still version 0.1 changelog

I enabled Grid integration. Think earthsea: there is one (clocked) pattern recorder which listens to Grid and to Midi input. Enable it for the first time with either the REC key: (1,1) (top left corner) or PLAY key: (1,2) (just below that). this will record until REC is turned off, and the “tape length” is set when PLAY is turned off for the first time. Playback is with the PLAY key; looping may be toggled with the LOOP key (1,3). Patterns can be cleared with (1,4).

For some reason while using grid stuck notes may develop. I added a killall command to the engine (so this update requires a SYSTEM > RESTART) which gets rid of them. Trigger it with key (1,8) if need be.

5 Likes

Oh wow. @alanza thanks so much for this. Sounds incredible!

2 Likes

Squashed a few bugs:

  • the pattern recorder properly accepts and interprets MIDI input
  • the pattern recorder now no longer causes stuck notes
  • dead synths should hopefully no longer hang around when new notes are played on top of them—this should mitigate @Cementimental’s issue significantly :). This last one was a SuperCollider fix, so do the good old SYSTEM > RESTART to catch the latest.
8 Likes

v0.2 changelog

Added a tanh on the output to gracefully avoid clipping and distort instead.
(Thanks very much to @sixolet for talking through how to do Busses in SuperCollider.)
I therefore reverted the amplitude changes from earlier—I already find my norns kind of quiet,
so I prefer to have my synths loud by default, since you can always turn them down.
(Again, this is a SuperCollider change, so needs SYSTEM > RESTART)

(Okay that’s not a lot, but cumulatively I think we’ve earned 0.2)

13 Likes

v0.3 changelog

Discovered that FM7 does not mix together parallel outputs by default,
resulting in nearly every algorithm missing at least half of its utility;
so fixed that—and tweaked the levels down a bit,
although perceptually they should be about the same.
(This is a SuperCollider change, so needs SYSTEM > RESTART)
Also tweaked reflection, my pattern recorder
so that it should hopefully no longer cause dead notes and crackles.
Potential “gotcha”: while overdubbing,
newly recorded notes will not play back until recording is stopped,
either with the rec button or the play button;
for this reason it might be best to record one “pass” each time around the loop.

17 Likes

v0.4 changelog

xD1 is now multitimbral.
Well, the engine is; the script is still monotimbral.
If there’s significant interest in—and ideas for—implementing multitimbrality in this script,
I’ll happily do it or accept a PR.
Strictly speaking this update should be basically equivalent to v0.3,
but lays the groundwork for other possible uses for xD1.

18 Likes

v0.4.1

no functional changes, but this update ensures that xD1 plays nicely when used inside of faeng

2 Likes

FYI the load screen still has version string 0.2, which might be confusing for users who’d expect it to match what’s being announced and discussed here.

[On legacy version control systems such as CVS this was done so that a preprocessor would converts special tags in source code files to version numbers in source files, but this isn’t the case with git]

2 Likes