Command Modifier

Post about feature requests here.
User avatar
Reactinator304
Posts: 6
Joined: Sun Jun 05, 2016 9:32 pm
Contact:

Command Modifier

Postby Reactinator304 » Mon Jun 27, 2016 8:30 pm

Alright, so some of the most time consuming gripes I've seen and heard of in Famitracker involve having to repeat a process several times, whether it's to copy-paste a frame or wave column, or to retry an effect's timing to get it just right. I think a handy way of handling that could be to add another command to modulate an effect so it happens exactly the number of times you want it to. For example, the BXX command will loop the song, but by using it to loop back, nothing whatsoever that comes after BXX can be used. if you were to add another column like the volume column after each effects column, or add another effect entirely, to operate on the effect in the row and have it repeat only a set number of times, you could establish a first/second/etc. ending ability. that'd cut back on a lot of copy-paste. This could also be done for commands like 4XX to only oscillate for a set number of rows before levelling out, or 1XX or 2XX to stop the pitch modulation on a specific beat, rather than the unspecific art of guessing and playing around with where 100 or 200 would be. there are probably some other places you could use it, but I'm pretty sure you get the idea. If the note column is the noun, and the effects column is the verb, then the new function or column would be a quantitative adverb. Coding-wise, this should be as simple as allowing to set the outside index of a nested for loop where the inner part of the loop would be the initial effect. Hardware-wise, on the other hand, I have no idea. it would probably drop performance a little bit, but that's all I can think of unless the Famicom hardware can't support it. which is also possible.

User avatar
HertzDevil
Posts: 467
Joined: Thu Apr 23, 2015 7:39 pm
Location: Hong Kong SAR
Contact:

Re: Command Modifier

Postby HertzDevil » Tue Jun 28, 2016 1:00 am

Reactinator304 wrote:Alright, so some of the most time consuming gripes I've seen and heard of in Famitracker involve having to repeat a process several times, whether it's to copy-paste a frame or wave column, or to retry an effect's timing to get it just right.

The most time consuming gripe is the 0.5.0 stable release itself.

Reactinator304 wrote:Coding-wise, this should be as simple as allowing to set the outside index of a nested for loop where the inner part of the loop would be the initial effect.
It is not. Have you ever read the FamiTracker source code? What do you think you are talking about?

It makes no difference between guessing where to place a corresponding cancel command and what value to place for the repetition column, viz.:

Code: Select all

       # Pulse 1
ROW 00 : ... .. . 462
ROW 01 : ... .. . ...
ROW 02 : ... .. . ...
ROW 03 : ... .. . 400 ?
ROW 04 : ... .. . 400 ?
ROW 05 : ... .. . 400 ?

Code: Select all

       # Pulse 1
ROW 00 : ... .. . 462 03 ?

ROW 00 : ... .. . 462 04 ?

ROW 00 : ... .. . 462 05 ?
The second form cannot expand to the first during NSF compile-time, since the cancel command may possibly end up to a different pattern on every invocation. Trying to implement it as is would require at least one row counter for every type of stateful effect, and that takes away way too much RAM space in the NSF driver assembly when there are features more practical than this.

It does not save copy/paste actions either, since all you do is shift the burden of placing the cancel commands to an extra data column; in fact it wastes more time as your cancel commands are very often next to new note triggers, and every time you move a pattern selection you have to alter the repetition counts of the nearby effect commands again. This pseudo-note length is contrary to the tracker notion of toggling a note event on/off.

And by the way, repeating a Bxx command several times is not the same as repeating other local commands on several consecutive rows.
Constructing Chiptune; Construing 8-Bit. Makes 0CC-FamiTracker and MEGA ZUN.

Join my forum for 0CC-FamiTracker discussion and more

User avatar
Stratelier
Posts: 378
Joined: Sun Apr 26, 2015 7:46 pm

Re: Command Modifier

Postby Stratelier » Tue Jun 28, 2016 1:38 am

If you want a pitchbend to stop on a specific note (as in pitch), use the portamento (3xx) for that. If you want it to stop at a specific timing (as measured by engine ticks), just place a 100/200 command and use Gxx to fine-tune it.

I would love the ability to tune a vibrato - by which I mean a combined starting phase control + pitch shift. So if I want a given vibrato to start at phase 0x10 (high point), it will look up that offset in the vibrato's pitch table and detune the entire vibrato by that amount while it's in effect (resulting in an 'old-style' i.e. down-only vibrato). It would really make trilling easier to do.

It would also be nice if you could combine a 3xx to the right of a pitch shift (Q/R) to specify a fine/exact speed for the note slide (without actually engaging the portamento). Because at high octaves the difference between, say, a Q0x and Q1x is very noticeable, while at low octaves a slide speed of QFx can sometimes be still too slow.

Yeah, I know these would be basically adding quirks to existing effects, not a principle you typically want to do. But if they have tactile uses and don't interfere with the pre-existing (non quirk) behavior, I don't see a problem.


Return to “Feature Requests”

Who is online

Users browsing this forum: No registered users and 2 guests