From 6a7ef670d989a004771b9fed48e773c925615eff Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sat, 2 May 2026 23:43:07 +0900 Subject: [PATCH] fix: tracker mixer flags not setup properly on fresh boot --- .idea/markdown.xml | 9 +++++++++ assets/disk0/tvdos/bin/taut.js | 2 ++ it2taud.py | 2 +- mod2taud.py | 2 +- s3m2taud.py | 2 +- terranmon.txt | 1 + tsvm_core/src/net/torvald/tsvm/AudioJSR223Delegate.kt | 9 ++++++++- 7 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 .idea/markdown.xml diff --git a/.idea/markdown.xml b/.idea/markdown.xml new file mode 100644 index 0000000..c199a6e --- /dev/null +++ b/.idea/markdown.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/assets/disk0/tvdos/bin/taut.js b/assets/disk0/tvdos/bin/taut.js index 0e22918..c8bfa3b 100644 --- a/assets/disk0/tvdos/bin/taut.js +++ b/assets/disk0/tvdos/bin/taut.js @@ -1933,6 +1933,8 @@ function drawProjectContents(wo) { Cues: `${song.lastActiveCue}/1024 ($${song.lastActiveCue.hex03()})`, Notation: pitchTablePresets[PITCH_PRESET_IDX].name, Flags: `${flagstrbuf} ($${mixerflag.hex02()})`, + GlobalVol: initialGlobalVolume, + MixingVol: initialMixingVolume } Object.entries(projMeta).forEach(([key, value], index) => { diff --git a/it2taud.py b/it2taud.py index 5c28757..6726e18 100644 --- a/it2taud.py +++ b/it2taud.py @@ -1209,7 +1209,7 @@ def build_sample_inst_bin_it(samples_or_proxy: list, struct.pack_into(' bytes: pat_bin_comp_size=len(pat_comp), cue_sheet_comp_size=len(cue_comp), global_vol=0xFF, - mixing_vol=0xFF, + mixing_vol=0x7F, ) assert len(song_table) == TAUD_SONG_ENTRY diff --git a/s3m2taud.py b/s3m2taud.py index ea647a5..54042b9 100644 --- a/s3m2taud.py +++ b/s3m2taud.py @@ -846,7 +846,7 @@ def assemble_taud(h: S3MHeader, instruments: list, patterns: list) -> bytes: pat_bin_comp_size=len(pat_comp), cue_sheet_comp_size=len(cue_comp), global_vol=0xFF, - mixing_vol=0xFF, + mixing_vol=0x7F, ) assert len(song_table) == TAUD_SONG_ENTRY diff --git a/terranmon.txt b/terranmon.txt index ca687ad..faea031 100644 --- a/terranmon.txt +++ b/terranmon.txt @@ -2106,6 +2106,7 @@ TODO: "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) [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 + [x] Pitchbend on Amiga frequency mode sometimes works right, sometimes works wrong. (effect underdelivers) Affects every song with Amiga picth mode, AND ON THE fresh taut.js session only [ ] implement bitcrusher (eff sym '8') diff --git a/tsvm_core/src/net/torvald/tsvm/AudioJSR223Delegate.kt b/tsvm_core/src/net/torvald/tsvm/AudioJSR223Delegate.kt index dfabbea..ff58666 100644 --- a/tsvm_core/src/net/torvald/tsvm/AudioJSR223Delegate.kt +++ b/tsvm_core/src/net/torvald/tsvm/AudioJSR223Delegate.kt @@ -132,7 +132,14 @@ class AudioJSR223Delegate(private val vm: VM) { } fun setTrackerMixerFlags(playhead: Int, flags: Int) { - getFirstSnd()?.playheads?.get(playhead)?.initialGlobalFlags = flags + getFirstSnd()?.playheads?.get(playhead)?.let { ph -> + ph.initialGlobalFlags = flags + ph.trackerState?.let { ts -> + ts.panLaw = flags and 1 + ts.amigaMode = (flags and 2) != 0 + ts.fadeoutCutOnZero = (flags and 4) != 0 + } + } } fun getTrackerMixerFlags(playhead: Int): Int? {