The only known tracker for PCE is by DamageX and is very limited (no audio output either until you compile it). I started working on a MOD to PCE converter. Why? Because the MOD structure fits perfectly for PCE. The Amiga period system is the exact same, both use PCM to playback tones, etc. PCE of course, uses tiny PCM samples in comparison. So I took on the task of writing a MOD to PCE converter and player (ROM). 6 channels with 1 channel for static sample playback (fixed at 7khz). After about a week, the player was up to speed and half the FX were working.
But I wasn’t happy. There are a few draw backs to the MOD format. One of them is the total number of PCM waveforms/samples is limited to 31. The second part was the FX column. And third, was that it had no volume envelopes.
In comes the XM format. After doing a lot of research, I found out that XM supports the Amiga period based system (a little flag in the file) and supports up to 128 samples. It also supports separate FX column for volume manipulation and addition FX. And finally, it supports volume envelopes. Not just ADSR, but anything you have define with 12 points. There’s sustain, and even “looping” with the option of fade out. Fade out is nice in that you can fade out at any point of the envelope phase, including “attack” (if you set it up as such) – on key release.
The other thing I like about MOD/XM is fine tune. This is a real time scale system. Sometimes, a pcm sample has different harmonics than what you would normally map it to on the note frequency scale. Fine tune allows you to adjust the note between 1/16 of a note (1/8 up from base note or 1/8 down from base note). With MOD/XM, this scales with the note frequency and octave range. This means a note will stay in tune as it goes up and down the scale. For normal long sample stuff on MOD/XM, you could just slightly resample the wave at a high or lower frequency to get it in tune. But for PCE waveforms, they are stuck at 32bytes. On no-finetune engines, your only option is restrict yourself to simplistic waveforms that “fit” or deal with the fact that it’s out of tune (which can sound horrible). I’ve traced through a few PCE sound engines and have yet to see any with scaling finetune. Detune, sure, but detune is used to set a channel slightly out of phase and it doesn’t “scale”. PCE, being a sample based synth system – finetune is an expected function. This might explain why most PCE games really limit themselves to simplistic waveforms (lots of square, triangle, saw, sine). Waveforms that have evenly divided frequencies and harmonics relative to known note frequencies.
XM isn’t the perfect match for PCE, but it does provide an instant audio experience in real time. A real PCE tracker with FX that more accommodate the PCE’s limited sample size, where as such effects might not be really necessary for sample based synth songs that already have long samples with pre-rendered audio effects.
A list of things that would benefit the PCE on the tracker side:
1) Sample phasing. You replace the channel’s waveform buffer with a new 32byte sample every 1/60 or slower as the note plays out. You’d have to pre-render a series of stages between on 32byte waveform, to another 32byte waveform. The effect can simulate a few types of sound, but one of them is “filter” bending. This concept isn’t new. Bloody Wolf does this to get a better “trumpet” sound out of the PCE, among other things. But it’s the only game that I know of that does this and on a very small scale. There’s a side effect of doing this. Turning the DAC on/off causes a spike in the out on that channel. Usually not noticeable, but you start do updating the channel waveform at a fast enough rate, you’ll get this “clicking” noise. Sad too, because if not for that – you could do 32khz sample play back on a simple 1khz TIMER setting. Fun fact: The SGX fixed this bug (or rather, the spike is tiny), so you can do this. But the PCE before *and* after the SGX still have this bug. The bug happens regardless of *any* volume levels, or channel setting.
2) Frequency envelopes. Specifically with key on/off system. This not vibrato, but works in conjunction with vibrato. Given enough points, it’s like a programmable portamento. Much more powerful than a simple pitch slide mechanism. Could also be used in conjunction with “porta to note”.
3) Vibrato modulation. A modulator that effects the speed and/or depth of a current vibrato effect.
4) Tremolo envelopes. Control the depth and speed via a series of “points”.
5) Key on off trigger for both vibrato and tremolo.
6) Waveform update with offset. Normally, you reset the channel’s waveform pointer with #$40, then #$00 to $806 – but one could reset it, write a series of bytes to offset the pointer, then update the full waveform. The channel buffer pointer wraps at 32bytes, so whatever you wrote in to offset the waveform starting point will be erased. This has the side effect of playing to channels with one waveform slightly out of phase along with detune. You could even scale the offset with the note frequency, if you’re using two channels as a single instrument channel – your instrument sound changes as you go up or down the note scale.
And other effects like this. Reasonable effects. Stuff that doesn’t take up too much cpu resource. If you didn’t care about cpu resource, there are a lot of other effects you could do.
But for now, XM will have to do unless I finish my WIP tracker or someone else makes one. BTW – here’s a XM that I converted into 100% PCE legal specs (5bit waveforms and all)-> Satellite One PCE version (right click and “save as”). If you play this (*highly* recommend milkytracker as other standalone plays get it wrong) please turn off *ALL* filtering in the config and if applicable (in case the player ignores the flag in the file), set the frequency to Amiga period system or else the notes and slides will sound off/weird. PCE has no such filtering, so any MOD/XM will sound very soft or just different because of the filtering.
If you want to start using milkytracker to make PCE music, you’ll need to follow these rules:
1) Reserve 1 channel for “long” samples. Doesn’t matter what channel, as long as it’s the same channel through out the song. You can play short samples on it too, if you wish. But only play “long” samples on this channel. Set relative note to C-4, no finetune, and play all samples at A-3. If they sound too slow/fast, you’ll have to resample them in a wave editor.
2) *ALL* samples, long or short, must be 5bit resolution but padded to 8bit. CoolEdit 2000 will do this under “edit” -> “convert sample type”. Make sure you set “adjust sample rate” under “edit” to the correct frequency. That will be the frequency to down sample from. Cool Edit was bought out by Adobe IIRC, so it has a different name. But try to track down the older 2000 version. It’s perfect and has a nice range of useful PCE related features.
3) all other channels must have waves that are 32bytes in length (20 hex) and *only* use forward repeating. You can finetune on short samples like these, but use steps of “16”.You can also use relative note offsetting under instrument edit.
4) Go into config and set frequency to Amiga period (not Linear), and change “resampling” to “no interpolation”. Your very high notes might sound a tiny bit crunchy, but the rest will sound relatively appropriate.
5) You can use any of the envelope and FX parameters (including stereo pan adjust). For envelopes, you might want to stay withing steps of whole lines (see the grid in the envelope window, there are 8 lines plus the bottom. Use those as volume points for now until I get a chart up online).
8 ) You can use whatever speed or BPM setting, but be reasonable. Most people stick with speed of 6 and use BPM to change the speed of the song. The reason why you don’t want to mess with speed, is that it effects how all of the FXs work. It’s best to keep it as default unless you understand the inner workings of the system.
7) And finally, create a module that uses 6 channels. Even if you don’t use all of the channels. 🙂
Meantime, I’ll be working changing the MOD converter I almost finished, over to XM.