Hmmm...
I'm actually really happy, that you did start with
Hmmm... instead of a
This is fat BS. I wasn't quite sure that my opinion will be appreciated.
But I think that if it's more or less feasible then the tracker should allow to use it. But I don't know yet what are the good configurations of channels/digi etc.
I like the sound-interrupt-based pulse modulation as it uses just one channel, sound good - no high frequency noise like with sample based waveforms. And it shouldn't be that cpu-intensive at low frequency sounds.
I don't say that you shouldn't do it no matter what. I tried to say that digital instruments only songs are characterless, thousand times heard things. However, if you can do it somewhat similarly to what the C64 guys did, like, let's say, as one independent track that plays instruments that are hard to do, go for it. It depends only on the amount of resources you are willing allocate to this purpose. But digi only is not really something you should pursue in my view.
What can you do with sync?
Sync is very handy when you want to do stable superposition effects. I don't know what your plans are for your player, but, I guess, you wouldn't really want to write a constant runtime cycle-exact routine. But without that properly synchronizing the channels is a hard thing to do. And I'm fairly sure that sooner or later the musician(s) you hope to entice to make music for the EP will request it. They can hear the tiniest anomalies, which you and I couldn't perceive even if our life hangs on it.
I was trying to do something like the waveform-emulation with the samples but I guess It won't ever sound very good and takes too much cpu I guess.
As for the tracker, how would you solve the problem of channel dependancy for filter and ring modulation? Some sequence tables with pitch shifts taht should be added to the base channel's frequency and then set as the dependent channel frequency?
Another thing that I would appreciate an advice on is the tone control sequence in relation to the envelope sequences. For now I think I will be making the left envelope an indepoendant sequence of volumes - its own length, loop start/end, speed. The right envelope sequence and tone control sequence (distortion/filter/rm options values 0-f) will be dependant - that is they'll be sharing length and loop. There's also the noise channel control which is shared on all channels... I think I'll be doing this as part of the right envelope/tone control sequence and each channel instrument will be allowed to change it but the priority of channels within the player routine will decide on the outcome... The same woulg go for filter and rm if the dependant channel would be changing its frequence independantly...
Yes, waveform emulation is a solution isn't worth to experiment with in my view, too.
Actually, there is no perfect solution for the filter and ring problem. Maybe there is not even a half right thing to do. But it is not necessarily a show stopper. For example the SID has only one filter, so the only solution is using it exclusively. The problem here must be tackled the same way. You have to construct a priority scheme. It could be static or dynamic, it depends on how much resources you want to allocate to it. The static priority could be something like all filter and ring modulation effects has priority, they are free to interrupt the necessary channels (the interrupted channel, after the "intruding" effect, should stay empty until the next played note), but they, let's say, must be originating from track 0 and only played in channel 1. Dynamic priority means that you allocate the channels as necessary, but already allocated channels can't be interrupted, unless the interrupting note has higher priority. This note priority could be based on e.g. the track order: e.g. track 0 has highest priority, track 2 (or 3 – depending on your design) has lowest priority. This means that complex instruments should be used with extreme care, or maybe only in parts where they are the only one playing, but I think this is not such a big problem that it would be impossible to live with it.
AFAIK, modern players are table based. There are tables for waveforms, fine pitch control, arpeggio, filters, you name it and instruments are iterating through them. I don't know how it goes on different platforms, but C64 and Plus/4 players mostly work on this basis. Any such player has usually three entry points: initialization, main play call, effects play call. Initialization is obvious, it resets all internal variables and initializes them to play the selected sub-song, if any. The play call iterates through the stored notes, selects instruments, sets note length, do transpositions and any such things as necessary. The effects play call is advancing through the above said tables and builds up the voice of the instrument. Now, this latter is called at least once per main play call, but not necessarily. If you ever met expressions like "it's a 4x tune" regarding a SID song, it was very probably talking about exactly this thing. I think, you know by now what I'll suggest. You should build such tables into the player. There should be at least a waveform table, some pitch control table, and envelope table. Try to find descriptions of such routines and study them. Or try to talk to the guy I mentioned earlier, he could give detailed advise based on his experiences.
However, I wouldn't design the envelope control like you are planning to do it. You should do instead a dynamic design based on global volume, track local volume, stereo position and envelope. The basic design could be something like all four has the range 0 to 15, and the left and right volume is calculated by multiplying them, then normalizing to the 0 to 63 range. Of course, the position is a bit different, because the actual values to use should be stored in two tables. And it should be driven by the effect play routine. I don't know how much resources this design needs. You should make some test cases and adjust it according the results, or reject some parts or even the whole concept. Obviously, the length, looping and speed parameters should be done as you see it fitting best.
If I were you, I'd go for a 50 Hz or 1 kHz interrupt based, obviously not digi playing, design that can utilize all channels. Of course, the 1 kHz interrupt should be scaled back to the sub 250-200 Hz range (no more than four or five music calls per frame).