pinobatch / pently

Scalable music engine for NES games
zlib License
72 stars 4 forks source link

Slow arpeggios #19

Closed pinobatch closed 6 years ago

pinobatch commented 6 years ago

I propose to add an effect that changes a channel's arpeggio to be updated only every second frame instead of every frame.

Currently, only three bits of arpPhase are used: 1-0 for phase and 7 for whether an attack is injected. This feature would need two more bits of arpPhase, one for the rate setting and one more for phase, as well as two new effects FASTARP and SLOWARP to change the rate.

Rationale

A voter in Famicompo Pico 3 didn't like the instrumentation of one of the entries in part because its arpeggios used the 0xy effect, which in FamiTracker 0.4.6 changes the pitch every frame. He would have preferred an arpeggio that spends 2 frames at each pitch.

In the 0CC-FamiTracker fork, the arpeggio effect is separated into the intervals, set with the 0xy effect, and the scheme, a generalization of arpeggio envelopes to specify which frames get the arpeggio intervals added to them. Ordinary FT 0.4.6 arpeggio is the | 0 x y scheme, and 2-frame arpeggio is | 0 0 x x y y. On non-Microsoft operating systems, which have serious problems running 0CC-FT 0.3.14.5 (including crashes and hangs in registry handling, configuration, and instrument editing), he recommended to make a separate FT instrument for each combination of instrument and chord instead of the 0xy effect. That has two drawbacks:

  1. Eats up the instrument limit (64 in FT, 51 in Pently).
  2. Unlike arpeggio envelopes in FT, arpeggio envelopes in Pently do not continue looping in the sustain portion of the volume envelope.

So I propose to add a choice for behavior similar to | 0 0 x x y y.