Getting closer. I'm not sure how consistently the feedback will work because the main oscillator has such and such properties but the wavetable item of course can have any length. Maybe I'll just leave it as is.

Yeah sorry, I tried to compile it on a work Mac here in the office but I didn't get it to compile. I'm too timid to bug the Mac guy who did the builds, after all he has to clean the mess that is my code. sad

Turns out the cleanliness comes from too fine grained envelopes and other stuff. The Adlib almost has these pops when the modulator jumps between two adjacent values (I think a lot of stuff is logarithmic in the chip so you might have very little change in the timbre between modulation values of 0-30 but then 35-3F make very rapid changes). Feedback was easy to add, and I assumed that was the source of the trademark sound as well! Nonetheless it's an interesting feature in a chip since it easily overflows and causes terrible noise.

Argh, I have something almost ready but trying to make it sound like an Adlib is maddening. It just sounds too clean and unquirky.

Actually, I'm just using the main oscillator as the carrier so carrier parameters won't need any more room. Also, triangle as the modulator and carrier sounds great, it's even more plasticy than normal sinewave FM.

But indeed, more generators are needed for the wavetable to create all OPL-1-2-3 waveforms. It would be nice to have something like a stack of operations you do for a wavetable item and then save those in the song. So in the song you would just have data like:

1. generate sine
2. silence the last half of the wavetable
3. reduce to 1024 samples

or

1. generate sine
2. apply 5th harmonic
3. apply octave harmonic
4. drop lots of bits

And then when the song is loaded it would generate the wavetable items according to that and there would be no need to save the same waveform data over and over for each song. Though it's not like the waveform is gigabytes worth of data...

I think it locks the synth while showing the help so it repeats the audio buffer over and over until the synth is unlocked.

FM report: this will be ready over the weekend, at least very basic OPL-1 style modulation. You can use the wavetable as a modulator so you are not limited to the few basic waveforms. The biggest problem is to find room for the parameters in the instrument editor. smile

Wow, that's a very interesting link. It almost says Atari ST could have had an FM chip but Yamaha didn't allow it (that's what I want it to read I guess.)

The differences in the actual FM synthesis happening seems pretty small.

Maybe technology went forward at such speed that there was no point exploring (cheap) FM synthesis when there were already some sampler chips available. Maybe they thought it's better to use PCM for drums and other FM-unfriendly sounds and FM for rest, so just increasing operator count was enough. Maybe the sine wave is quite enough for all FM uses considering you can also modulate the modulator, I would guess a complex waveform creates way too messy sounds to be useful.

Damn it, I want to go home already to try some stuff.

Maybe a lot of chips simply are versions of the OPL family?

The only thing that worries me is like you say: if klystrack starts doing too much, it'll start being less oldschool/chippy and more of a DAW-ish thing.

I am mostly thinking of Adlibtracker/Screamtracker when I think of OPL-2 or so which definitively is super oldschool/nostalgic (to me at least). I see the talk on the FX busses more worrying in that aspect than the talk on FM because there is no obvious analogue to them in the oldschool world (there was just a single reverb originally which of course comes from the SNES).

Will look into those bugs during the weekend, doesn't seem very complex. Related to that arp thing, I was also thinking there could be something like a "chord bank" that allows you to set all EXT0 etc. arp notes with a single command. C001 = set major, C002 = set minor, C003 = set super jazzy 9th etc. I have been reading about FM chips and often they seem to have quite musical parameters, like "set predefined harmonic" instead of just a frequency parameter, which I found cute compared to e.g. some unmusical Atari chip.

I'm thinking something like OPL-1 which was available for the C64 so it would make sense to include with a fake SID-like synth. Not sure which features to include, though! Probably just something like the main oscillator features (waveforms + wavetable + envelope + detune).

Can you define the things that are important in a FM synth?

I need to make the help screen more organized and maybe add more descriptive text. Now it's just the command/shortcut data dumped in one place. Nice that it already helps a bit!

FM is 50/50 I think, it interests me but I need to think how and if it fits in the "sound chip" model. I don't want everything to start looking and sounding like any crap VSTi out there.

Look what I added in the nightly!

Clicky

They do! The global effects still need to be separated so the layout is logical. I am thinking there also could be an option to set one of the buses to process the master output from all channels.

Well, I'm just adding a name field for the FX's so I might add one for the patterns as well.

Oh yeah, forgot to answer to your question: I am planning something like a full optimization feature that allows you to select which data to erase/minimize instead of simply doing it when saving the song. It would be really nice to be able to automatically detect repeating sequences in long patterns and then just split that big pattern into smaller ones. So, e.g. when importing .org files would create a more traditional song instead of one long pattern per channel.

Well, it tries to find the theme files from that path as you noticed.

If you change lines 44 and 45 (inside the else clause) to what they are just two lines above, it will try to load the resources as it does on Windows, i.e. where the klystrack binary is. I am not 100 % sure if it works on Linux (on Windows it easy to just ask where the current program lives in but on Linux it is not).

Ok, I think it's fixed. In case some old files crash or won't load properly, you can try loading the file in an earlier version and then saving it and then it should work in the latest version.