For example, demanding the use of certain instrument names in Famitracker, so that upon conversion, certain Famitracker instruments can be interpreted as instruments or attack settings.
- Project moved to GitHub
- pentlyas.py: proper argument parsing
- pentlyas.py: options to read input from stdin, write output to file
- pentlyas.py: option to generate period table (requested by dougeff)
- pentlyas.py: writes data sizes in bytes as comments in output (requested by NovaSquirrel)
- pentlyas.py: turned some internal exceptions into informative error messages (reported by NovaSquirrel).
- pentlyas.py: treats r and w the same in drum patterns (requested by NovaSquirrel)
- pentlyas.py: parentheses for slur for LilyPond parity
- Legato note overwrites uninjected attack's pitch (reported by NovaSquirrel)
The legato problem made grace notes more difficult to use with instruments that have longer attack phases, which are more likely to occur in automated conversions. Early versions of Pently (through 0.03) did not support FamiTracker-style envelopes. Instead, notes either sustained at their starting volume or decayed linearly from their starting volume, just like instruments in NerdTracker II. Pently 0.04 added an attack envelope to all pitched instruments as well as a fifth track that inserted attacks into another channel. (The attack track concept was inspired by "Super Mario Land NES-Mix" by Phlumb-Dumb.)
Versions of Pently with attack envelopes also have an arpeggio effect, as well as a legato effect that changes the note on a channel to a different pitch without restarting its envelope. (Legato on a woodwind instrument corresponds to notes that are not tongued, and on a guitar, it represents hammer-ons and pull-offs. In NT2, a note is played legato by not giving it an instrument number. In FT, it's done with the most rapid portamento-to-note, like 3FF.) In previous versions of Pently supporting attack phase (0.04 through 0.05wip3), a note played legato would change the pitch only of the sustain phase. This didn't cause problems with the idiomatic Pently instrument type that has a relatively short attack and an NT2-style decay on the sustain. But because a converted FT instrument's sustain phase (the last step of its volume envelope) cannot decay the way an NT2 instrument can, the attack phase (all steps but the last) has to be made much longer. I originally had legato not overwrite the attack's pitch so as not to interfere with an attack injected by the attack track. But I found a way to distinguish attacks on the channel's own track from injected attacks and modify only the former's pitch, by taking advantage of a different hack I added to pause a channel's arpeggio while an injected attack is playing and restart it once the attack ends.
[This post put me over 2^14.]
- (77.1 KiB) Downloaded 454 times
Code: Select all
vibratoPattern: .byte 2, 3, 3, 3, 2, 0, -2, -3, -3, -3, -2, 0
Vibrato adds a sinusoid to the note period. FamiTracker's vibrato is typical of tracker vibrato, which makes the depth constant in period units. This means that for higher pitches, which have lower periods, a given amount of vibrato depth will sound stronger than it does for lower pitches, which have higher periods. But if the change in period for a given vibrato depth setting is proportional to the note's own period, it'll sound the same for low and high pitches.
I've also found that looping the vibrato once every 12 frames (roughly equivalent to FamiTracker effect 45y for depth y) is within normal limits of vibrato on a string or wind instrument.
This, however, leaves portamento as an excuse.
- (3.06 KiB) Downloaded 447 times
I came to the obvious-in-retrospect observation that you get one extra bit of period (be it in its simple play-this-note or the amount you need to sweep to get to the next note in N steps) each octave.
- Vibrato effect
- Simplified zeroing of channel state during song start
- Pattern effects use RTS dispatch
- Corrected namespacing of some APIs
- Standardized names of feature defines (PENTLY_USE_*) and moved them to pentlyconfig.inc
- Feature defines to disable vibrato and arpeggio effects, counting rows per beat, attack track, and the attack envelope entirely
- Split manual into separate documents for concept overview and bytecode description because with pentlyas and ft2pently, few need to deal directly with bytecode
- Applied MIT License (Expat variant) throughout
- (90.41 KiB) Downloaded 471 times
This just killed support for romhacks, But whatever, Not my problem.tepples wrote:Applied MIT License (Expat variant) throughout
Though it makes things harder for anyone using this for anything but homebrew!
How so? MIT is not a copyleft. Though Nintendo is known to be anti-copyleft, I seem to remember that some of the Wii system software has notices for BSD and MIT licenses. If you want, I can go try to dig it up for you.Hamtaro126 wrote:This just killed support for romhackstepples wrote:Applied MIT License (Expat variant) throughout
Licenses like that only allow you to go so far before you get sued,tepples wrote:How so? MIT is not a copyleft. Though Nintendo is known to be anti-copyleft, I seem to remember that some of the Wii system software has notices for BSD and MIT licenses. If you want, I can go try to dig it up for you.Hamtaro126 wrote:This just killed support for romhackstepples wrote:Applied MIT License (Expat variant) throughout
I was planning to try to use in a SMB2 hack to enhance music, but since the MIT licence says this:
Code: Select all
The MIT License (MIT) Copyright (c) <year> <copyright holders> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions
Code: Select all
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
Also, Fair use don't apply here.
If you're referring to the practical problem of including the license text in a sub-megabyte executable, I'll have to think about a good way to clarify that including the notice in the manual is acceptable.
- Portamento to note
- Detune channel
- Channel volume (reuse one instrument for forte and piano sections)
- Master volume (fade out)
- Envelope looping instead of sustain phase
The problem with just adding them all is RAM use. On average, each effect takes 2 bytes for each channel that it affects: one for the parameter and one for the current state. So that's 8 bytes if an effect affects only actual channels or 10 bytes if it affects a track (including the attack track). If I added all the effects, RAM use would climb back into the range of heavyweight engines even for soundtracks that aren't using a particular effect. I can't just use .res controlled by .ifdef because I'm storing the channels' state somewhat interleaved: four bytes for pulse 1, then four for pulse 2, etc. for correlation with the offsets in APU MMIO space ($4000-$400F).
So I might have to think of a more clever way to pack state variables needed by those features that are enabled, using ca65 macros if I can or Python if I can't.
Also, down the road, ot would be nice if we had a library of instruments, so every musician doesn't have to reinvent the wheel (or piano-ish volume envelope, for example).