mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-15 00:44:05 +09:00
taut: crash when viewing metainst on tab 2+
This commit is contained in:
@@ -5349,8 +5349,12 @@ function resolveHairlineHits(hits) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Pull the envelope object + JSR223 getter pair for the active inst sub-tab. Returns null
|
// Pull the envelope object + JSR223 getter pair for the active inst sub-tab. Returns null
|
||||||
// for tabs without a graph (Gen.1 / Gen.2).
|
// for tabs without a graph (Gen.1 / Gen.2) AND for Metainstruments, whose decoded record has
|
||||||
|
// no vol/pan/pf envelopes (it carries a layer table instead) — drawInstTabMeta renders every
|
||||||
|
// sub-tab for them, so without this guard the VOL/PAN/PIT branches return { env: undefined }
|
||||||
|
// and the cursor walker dereferences env.terminatorIdx on undefined.
|
||||||
function envBundleForCurrentTab(e) {
|
function envBundleForCurrentTab(e) {
|
||||||
|
if (e.decoded.isMeta) return null
|
||||||
if (instSubTab === INST_TAB_VOL) return { env: e.decoded.volEnv,
|
if (instSubTab === INST_TAB_VOL) return { env: e.decoded.volEnv,
|
||||||
idxFn: 'getVoiceEnvVolIndex', timeFn: 'getVoiceEnvVolTime' }
|
idxFn: 'getVoiceEnvVolIndex', timeFn: 'getVoiceEnvVolTime' }
|
||||||
if (instSubTab === INST_TAB_PAN) return { env: e.decoded.panEnv,
|
if (instSubTab === INST_TAB_PAN) return { env: e.decoded.panEnv,
|
||||||
@@ -5429,8 +5433,9 @@ function drawEnvelopeCursor() {
|
|||||||
const e = instrumentsCache[instListCursor]
|
const e = instrumentsCache[instListCursor]
|
||||||
if (!e) { eraseEnvCursorIfAny(); return }
|
if (!e) { eraseEnvCursorIfAny(); return }
|
||||||
const bundle = envBundleForCurrentTab(e)
|
const bundle = envBundleForCurrentTab(e)
|
||||||
// Gen.1 / Gen.2 have no envelope graph — wipe any stale hairline and bail.
|
// Gen.1 / Gen.2 (and Metainstruments) have no envelope graph — wipe any stale hairline and
|
||||||
if (!bundle) { eraseEnvCursorIfAny(); return }
|
// bail. The !bundle.env check also covers a malformed record whose env slot is missing.
|
||||||
|
if (!bundle || !bundle.env) { eraseEnvCursorIfAny(); return }
|
||||||
const env = bundle.env
|
const env = bundle.env
|
||||||
const lastIdx = (env.terminatorIdx >= 0) ? env.terminatorIdx : (env.nodes.length - 1)
|
const lastIdx = (env.terminatorIdx >= 0) ? env.terminatorIdx : (env.nodes.length - 1)
|
||||||
if (lastIdx < 0) { eraseEnvCursorIfAny(); return }
|
if (lastIdx < 0) { eraseEnvCursorIfAny(); return }
|
||||||
|
|||||||
@@ -2833,7 +2833,7 @@ TODO:
|
|||||||
- Samples playblobs: only active for actually playing samples
|
- Samples playblobs: only active for actually playing samples
|
||||||
- Samples playcursor: true cursors for actually playing samples
|
- Samples playcursor: true cursors for actually playing samples
|
||||||
[ ] implement note-fade (0x0003) and wire it to it2taud
|
[ ] implement note-fade (0x0003) and wire it to it2taud
|
||||||
[ ] taut.js quit with TypeError: Cannot read property 'terminatorIdx' of undefined:
|
[x] taut.js quit with TypeError: Cannot read property 'terminatorIdx' of undefined:
|
||||||
TypeError: Cannot read property 'terminatorIdx' of undefined
|
TypeError: Cannot read property 'terminatorIdx' of undefined
|
||||||
at drawEnvelopeCursor (<eval>:5312:22)
|
at drawEnvelopeCursor (<eval>:5312:22)
|
||||||
at drawInstrumentsContents (<eval>:4919:41)
|
at drawInstrumentsContents (<eval>:4919:41)
|
||||||
|
|||||||
Reference in New Issue
Block a user