Mod Archive Forums Mod Archive Forums
Advanced search  

News:

Please note: Your main modarchive.org account will not work here, you must create a forum account to post on the forums.

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - DZ-Jay

Pages: 1 2 3 4 [5]
41
Players / Re: Understanding effects processing
« on: December 31, 2023, 16:10:33 »
No worries, I was mostly rambling.  My apologies for that.

I guess my primary question can be boiled down to this:  when "note portamento" is read, does it start bending the pitch of the old (current) note on the second tick, or on the first tick?

Likewise for the "note delay": does the first tick count as part of the delay, or should the counter start on the second tick?

    -dZ.

42
Players / Re: Understanding effects processing
« on: December 30, 2023, 15:09:48 »
Hello,

Sorry for the bother, but I have yet another question on the "note portamento" effect, which may apply to other effects as well.

The docs I've read suggest that effects are applied on the second tick after they are read.  To me, this means that when a new row is read, the note will be played on the first tick, and the effect after that.

Except that "note portamento" does not seem to honour this.

Based on my understanding (and the hardware limitations on the platform), the algorithm I've followed for my player goes something like this:

On every tick ...
  • If new row:
    • Decode note and instrument data.
    • Decode effect data.
    • Reset channel counter
  • Process note & instrument
  • If channel counter > 0 (not a new row):
    • Process effect.
  • Update sound device with channel data

It appears that "note portamento" (and I think a few other effects as well), are processed before the new note is applied.

I have not had a chance to take a look at the source code of MilkyTracker or any other tracker, so I do not really know how these things are implemented there; but I have some severe physical constraints on my platform that force me to compromise certain aspects.

I thought that the "skip effect on first tick" was a very reasonable side-effect of a functional optimization: We either read/decode row event data or we process effects; which avoids incurring the processing cost of both on the same tick.

However, it appears that this is not really the case -- at least not all the time -- so now that feature appears arbitrary to me. :(

I think the same thing applies to the "Note Delay" effect:  I can't delay the note if I already played it on the first tick, before processing the delay effect.

Obviously I am way off in my understanding.

My apologies if this sounds confusing -- perhaps I should describe my technical design, choices, and compromises.

    -dZ.

43
Players / Re: Understanding effects processing
« on: December 29, 2023, 18:02:12 »
Hope this helps

Yes, it helps greatly!  Thank you so much for the help.

    -dZ.

44
Players / Re: Understanding effects processing
« on: December 29, 2023, 16:41:27 »
Hi again.
The note portamento works a little bit differently than portamento up or down effect. You've got the setup part correct, where you have to put that effect on the row where the note is present, so that it will start shifting pitch to that note. One important thing however is the speed. You have to also add 30x commands afterwards to keep pitching until it reaches your target note. You can also aet the speed to a high value, so it reaches the note in just one row, but generally, if you're going for a gradual portamento to a note, you need to do it like so:

Code: [Select]
C-5 01 v64 ---
D#6 01 v64 308
--- -- -- 308
--- -- -- 308
--- -- -- 308

And so on until it reaches the d#6 note

Thank you for responding.  I understand now, so the effect is applied only to the specific row on which it was set.  I believe this is the same for all (most?) other effects as well, right?

One other question on the note portamento:  What happens if it overshoots?  I mean, if I continue setting 3xx and the pitch reaches D#6 earlier?  Does it saturate at new note and stop pitching?  Or will it start pitching in the opposite direction to bend towards the note again?

I guess I'm still trying to grasp the key differences of the "port up/down" and "note port," to figure out how to implement them.

From a functional perspective, it seems that a key difference is that for regular portamento you tell it whether you want to bend up or down, along with the speed; while in note portamento you give it only the speed and the player pitches up or down depending on the relative direction of the note deltas.

What I am trying to determine now is if I need to also have the player keep track of how close it gets to the target note in order to stop when it reaches it; to start pitching in the opposite direction if it "misses" the target note; or if it is up to the musician to enter sensible speeds that "sound right."

Thanks again,

     -dZ.

45
Players / Re: Understanding effects processing
« on: December 29, 2023, 14:08:24 »
Hi again,

I have a question regarding the "Portamento To Note" effect.  I'm not quite clear on how it differs from the "Portamento Up/Down" effect.

From what I read on FT2's and MilkyTracker's docs, it appears that the main difference is that the regular portamento applies to the new note, while the "portamento to note" bends the pitch of the current note towards the new.

In my mind, this means that in the following example ("Portamento Up"):
Code: [Select]
  C-4 .1 .. ...
  E-4 .1 .. 103

the note E-4 is played, and starts bending upwards, while in the following ("Portamento To Note"):
Code: [Select]
  C-4 .1 .. ...
  E-4 .1 .. 304

the note E-4 is not played, but C-4 starts bending towards E-4.  I suppose this means that once E-4 is reached (if it gets there), the pitch stops bending and the E-4 note continues.

Is this correct?

     -dZ.

46
Players / Re: Understanding effects processing
« on: December 28, 2023, 19:10:34 »
Hi, Looper,

Thank you for responding, it helps a lot.  It is similar to what I've noticed by experimenting with MilkyTracker.

Let me see how far I get with this implementation ...

    Thanks again!
   -dZ.

47
Players / Understanding effects processing
« on: December 27, 2023, 16:49:02 »
Hello,

I'm a retro-game developer for the old Mattel Intellivision, and I maintain a music player software library that plays tracks in a bastardized version of XM format.

I'm currently working on adding support for some (most?) FT2 effects and I need some help understanding how they should work.

Most docs suggest that when a new note is read, the note is played on the first tick, and the effect start playing on the subsequent ticks.  This sounds reasonable.  However, I would like to know how does this affect the behaviour of effects such as "note delay," "pattern delay," "jump to order," and other such effects that affect the music player's behaviour and not just the note waveform/amplitude.

For "pattern delay," do we really wait until the second tick to start counting down?  And what happens during the delay -- do we play the new note, or do we continue stretching what is already playing on the channel (i.e., the previous note)?

For "note delay," what plays while we are delaying the note?  Do we continue playing the previous note, or do we start playing the first one and just stretch it during the delay period without advancing the player state?  (I can't imagine it would just be silence ...)

For "jump to order," do we jump immediately upon reading the note/effect, or do we play the note and jump when it finishes?  (Same for "pattern loop" and "pattern break": do we break/loop immediately when signaled, on second tick, or when the note plays out?)

I apologize if these questions seem silly, but my target platform is severely constrained in resources (it's a games console from 1980!), and I wish to understand how to implement the effects in the most efficient and optimized way.

Thanks in advance!
    -dZ.

Pages: 1 2 3 4 [5]