mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-06 05:28:31 +09:00
instrument volume fadeout
This commit is contained in:
@@ -2008,13 +2008,12 @@ Instrument bin: Registry for 256 instruments, formatted as:
|
||||
- IT: look for sample's SusLoop flag
|
||||
Bit16 Volume envelope sustain/loops and flags
|
||||
* Sustain is implemented by enabling 't' flag. FastTracker has no 'Sus Loop' but only 'Sus Point'; use same value for start and end index
|
||||
0b 0ut sssss pcb eeeee
|
||||
0b 0ut sssss 0cb eeeee
|
||||
s: sustain/loop start index
|
||||
e: sustain/loop end index
|
||||
|
||||
b: use envelope
|
||||
c: envelope carry
|
||||
p: (IT) fadeout is zero; (XM) fadeout is cut
|
||||
|
||||
t: the loop must sustain (key-off escapes the loop)
|
||||
u: set to enable the sustain/loop
|
||||
@@ -2055,10 +2054,18 @@ Instrument bin: Registry for 256 instruments, formatted as:
|
||||
* ImpulseTracker has range of 0..128; multiply by (255/128) then round to int
|
||||
- ImpulseTracker also has samplewise default volume (0..64) and samplewise global volume (0..64), and they must be taken into account because Taud has no samplewise config, following the ImpulseTracker spec
|
||||
* FastTracker2 has range of 0..64; multiply by (255/64) then round to int
|
||||
Uint8 Volume Fadeout low bits (IT: 1..256; XM: 0..255)
|
||||
Uint8 Volume Fadeout low bits
|
||||
Bit8 Fadeout and vibrato
|
||||
0b 0000 ffff
|
||||
f: Volume Fadeout high bits
|
||||
* Combined 12-bit fadeout value is the engine's per-tick decrement, in 1/65536 units
|
||||
(a unity-volume voice silenced over (65536 / fadeout) ticks after key-off).
|
||||
* Stored 0: behaviour depends on Global Behaviour bit 'm' (see Song Table) —
|
||||
IT mode (m=0) leaves the voice unfaded; FT2 mode (m=1) cuts on key-off.
|
||||
* Source-format mapping:
|
||||
- IT: stored fadeout (0..1024) MUST be doubled on import (taud = it × 2);
|
||||
Taud's per-tick scale matches FT2 natively, so IT values are scaled to match.
|
||||
- FT2: stored fadeout (0..0xFFF) is passed through unchanged.
|
||||
Uint8 Volume swing (0..255 full range)
|
||||
Uint8 Vibrato speed
|
||||
* ImpulseTracker has samplewise vibrato speed (0..64), and they must be taken into account because Taud has no samplewise config
|
||||
@@ -2073,7 +2080,7 @@ Instrument bin: Registry for 256 instruments, formatted as:
|
||||
Uint8 Pan swing (0..255 full range)
|
||||
Uint8 Default cutoff (0..254 full range, 255 to off (-1 on IT). Effect range equals to that of ImpulseTracker -- 127 in IT is equal to 254 in Taud)
|
||||
Uint8 Default resonance (0..254 full range, 255 to off (-1 on IT). Effect range equals to that of ImpulseTracker -- 127 in IT is equal to 254 in Taud)
|
||||
Uint16 Sample detune (in 4096-TET unit) (XM finetune scale need to be rescaled accordingly)
|
||||
Uint16 Sample detune (in 4096-TET unit) (FT2 finetune scale need to be rescaled accordingly)
|
||||
Bit8 Instrument Flag
|
||||
0b 000 www nn
|
||||
n: New note action. 00: note off, 01: note cut, 10: continue, 11: note fade (arranged differently to IT)
|
||||
@@ -2098,7 +2105,7 @@ TODO:
|
||||
[x] implement sample loop sustain
|
||||
"Caveat: on a foreground voice, key-off (row.note == 0x0000) currently sets voice.active = false at AudioAdapter.kt:1713, which silences the channel immediately. Sustain-loop escape therefore only takes effect on background voices spawned by NNA "Note Off" — which matches the IT idiom of layering a new note over a sustained one. Let me know if you also want the foreground key-off to keep the voice playing through fadeout."
|
||||
[x] cue and pattern compression of the Taud format (taud_common.py, taud.mjs)
|
||||
[ ] figure out how IT (8 bits) and FT2 (12 bits) handles volume fadeout numbers, and come up with a compatible Taud spec, then implement
|
||||
[x] figure out how IT (0..256) and FT2 (0..FFF + cut) handles volume fadeout numbers, and come up with a compatible Taud spec, then implement
|
||||
[ ] implement bitcrusher (eff sym '8')
|
||||
|
||||
|
||||
@@ -2314,6 +2321,11 @@ Endianness: Little
|
||||
Uint16 Current Tuning base note (1..65533). A4 (western default) is 0x5C00. C9 (tracker default) is 0xA000. If zero, assume the tracker default value
|
||||
Float32 Frequency at the base note. Tracker default is 8363.0. If zero, assume the tracker default
|
||||
Uint8 Flags for Global Behaviour (effect symbol '1')
|
||||
0b 0000 0mfp
|
||||
p: panning law (0=linear, 1=equal-power)
|
||||
f: tone mode (0=linear pitch slides, 1=Amiga period slides)
|
||||
m: fadeout-zero policy (0=IT — stored fadeout 0 means no fadeout;
|
||||
1=FT2 — stored fadeout 0 means cut on key-off)
|
||||
Uint8 Song global volume
|
||||
* ImpulseTracker has range of 0..128; multiply by (255/128) then round to int
|
||||
Uint8 Song mixing volume
|
||||
|
||||
Reference in New Issue
Block a user