Login:
Menu:
Post: Author:
FamiTracker > General > Bug Reports & Feature Requests > Effect Idea: Uxy Owner: Alexander283 New post
Page 3 of 3 Sort: Goto Page: << Previous [1] [2] [3]
Posted: 2014-09-11 21:43  (Last Edited: 2014-09-11 21:44) Reply | Quote
ipi

Avatar

Member for: 4931 days
Location: United Kingdom
Status: Offline

#61791
This is now being implemented by HertzDevil.

When both 0xy and an instrument with an arpeggio macro is used, the parameters as defined in the effect are used in the macro.

Notice that both positive and negative modifiers can be used.

This is a work in progress. The current version only works with the square 2A03 channels and can only be defined in the MML field. The final version will support all channels that can have an arpeggio macro defined, and will include a graphical interface for selecting which parameter to use (not unlike the 5B duty/noise editor).

There are no plans to support any other type of macro yet.

Posted: 2014-09-11 22:41 Reply | Quote
Alexander283

Avatar

Member for: 4320 days
Location: Germany
Status: Offline

#61792


Posted: 2014-09-12 00:00  (Last Edited: 2014-09-12 00:02) Reply | Quote
Im_a_Track_Man

Avatar

Member for: 5546 days
Location: Plantation, Florida
Status: Offline

#61794
Alexander283 wrote:
Am I going to be in the credits

No one else who suggests anything has been. And it's not even part of the main Tracker. Nicetas's hack it just another fork until jsr decides to officially implement it.

Posted: 2014-09-12 01:26 Reply | Quote
VinylScratch

Avatar

Member for: 4963 days
Location: Nebraska
Status: Offline

#61795
Alexander283 wrote:
Am I going to be in the credits or has anyone else proposed this before I did? Just asking ^.^
He did acknowledge your thread in this post.

_______________________
Soundcloud | Youtube
Posted: 2014-09-12 19:37 Reply | Quote
ipi

Avatar

Member for: 4931 days
Location: United Kingdom
Status: Offline

#61825
HertzDevil wrote:
The current implementation of my arpeggio scheme is that, when the arpeggio sequence is in Scheme mode, the 6 low bits represent the signed root transposition from -27 to +36 semitones, the range of which is specially decided to allow 3 octaves above. The 2 high bits determine how the 0xy parameters affect the arpeggio sequence's terms. There are 4 possibilities here, three of which are "root", "+x", and "+y" using the 0xy effect's parameters respectively; the last option is undecided yet and has a few candidates:
- Subtract Y;
- Add X+Y;
- Add XY (7-bit signed) when MSB of XY is off, fix to XY (7-bit unsigned) when MSB of XY is on.
I would most likely go with "-y", though the functions of schemes that use both "+y" and "-y" like {| 0 -y y} would be quite limited. To ensure that non-looping arpeggio schemes always produce the same result as it transitions from the arpeggio scheme to the ordinary 0xy effect, the 0xy's internal counter will reset every time the pattern encounters an instrument using an arpeggio scheme. The sequence editor will resemble the Sunsoft 5B Duty / Noise interface and the MML field will display "x" and "y" properly instead of 8-bit signed integers as in the YouTube preview.

#59509, #59514, #59539: The ASM hack is fully working. I have used the ASM hack to reduce half of the instruments in the Extends Levant FTM, and the NSF exported by FamiTracker produces the same sound as FamiTracker itself, although only those experienced with manipulating FamiTracker NSFs directly from the binary data could see the arpeggio schemes in action. This should clear any doubts that the NES APU or the 6502 ASM is incapable of performing such feats as redefining the 0xy effect per instrument during run-time of the sound engine.

#59507, #59520, #59570: Some of the posts in this thread mentioned LSDj tables. This is not the purpose of arpeggio schemes (or Uxy); they allow the 0xy effect to update the arpeggio parameters shared by both arpeggio schemes and 0xy itself, whereas sequence call, as in the Axx Run Table effect, simply invokes another sequence in the memory and resets the sequence position. This is not impossible, as the sequence calls can simply be parsed into 16-bit pointers to the respective sequences during NSF compile-time; however, sequences are separated by regions of action (volume, pitch, duty etc.) in FamiTracker, and at least 5 different effects are required to access all kinds of sequences as the original post suggests, but in reality there are not that many effect slots remaining (KLMNO?). Alternatively it could be as suggested in another post that X and Y represent type and sequence ID respectively, or the 2 high bits represent type and the 6 low bits represent sequence ID. Unfortunately, this would lead to the same bad design FDS instruments have w.r.t. sequence instruments, namely that sequences of an instrument do not all have the same operations as Hi-Pitch could not be accessed. Furthermore, each channel (times 2 if you count the work-in-progress sound effect channels) then requires 5 generic parameters for each type, independent from each other, which may cause a large increase in the RAM space needed by the NSF engine.

#59520, #59530, #59553, #59566: LSDj tables do not carry variables that can be passed from pattern effects. The transpose column of LSDj tables can be globally transposed once more in the phrase editor but their entries cannot, meaning triadic chords still require 3 tables to realize all inversions of any given arpeggio scheme. LSDj tables do not mix either; each new table is already initialized with zeroes and will cancel out parts of the current table if these zeroes remain. Sequence calls are therefore more powerful than invoking entire tables which are practically same as instruments in FamiTracker; tables are not aggregates of independent command sequences.

#59530: FYI the Software Creations sound engine (as in Silver Surfer) uses note sequences - like fixed arpeggio sequences, but with zero information of each note's duration. The entire note sequence is referenced by an address pointer, no other variables are passed. A separate command sets the note duration and another specific arpeggio command generates such arpeggio sequences:
{0..0 | X..X 0.....0}
repeating 0 for A times, setting the loop point, repeating X for A times, then repeating 0 for B times; here A and B vary to generate all arpeggios you hear in Silver surfer. There is one more command that transposes the entire channel, so that those fixed values can behave like movable values. Thus these arpeggios are not more complex than those in FamiTracker.

#59528, #59536, #59608: Arpeggio schemes need not have any default parameters other than the trivial xy = 00 in the same way Ixx and Jxx on the FDS channel do not carry any default values, though such a default parameter can indeed be added to each instrument akin to each FDS instrument's individual FM rate when Ixx and Jxx are not used. That default parameter would be useful only while previewing the instrument and should not export to the NSF. (If you press Ctrl+Enter to preview one row, the 0xy on the same row will affect the instrument's arpeggio already; the same goes for FDS FM and arpeggio schemes)

#60058, #60059, #60064: Upon entering effects which share the same name, FamiTracker will automatically apply different effects to the pattern depending on the channel it belongs to; thus, Hxy on 2A03 and Hxx on FDS are two distinct effects on the enumerated effect list. There isn't one H effect that acts differently across 2A03 and FDS channels. One bug of the text importer is that it might not check the expansion chip and put the hardware sweep Hxy on the FDS channel instead.

#59562: I have not seen a single FTM with an engine speed of hundreds hertz that tries to use this E0x effect to maintain arpeggios of the same pace as those at 60 Hz.


Posted: 2014-09-12 22:49  (Last Edited: 2014-09-15 22:14) Reply | Quote
ipi

Avatar

Member for: 4931 days
Location: United Kingdom
Status: Offline

#61836
The discussion about the implementation of the discussed mechanic has been moved into a separate thread, which can be found here.

Page 3 of 3 Sort: Goto Page: << Previous [1] [2] [3]