Skip to content

v0.2.8 — Hide Source Audio File picker + Audio Analyze fix

Choose a tag to compare

@hthillman hthillman released this 02 Jun 18:24
· 50 commits to main since this release

Two changes, each verified live before shipping.

1. Source Audio File picker hidden from the op UI

The Source Audio File picker confused users into thinking it was the audio input — but the real source is the CHOP you wire into the COMP. TouchDesigner can't programmatically hide a custom parameter (Par.hidden is read-only), so the build now simply doesn't create it.

New ui_hidden flag on the parameter schema: the entry stays in params.py (so internal lookups and _has_source_audio() still resolve to its "" default), it just isn't rendered. Runtime behavior is byte-identical — the build already reset this par to empty on every rebuild, so the pre-flight was already passing via wired-CHOP detection, not via this picker. Connection is unaffected.

2. Audio Analyze now receives an audio-rate stream

User report: "audio analyze chop isn't getting anything." Diagnosed in two stages from live logs:

Why it was silent: Python Audio Out plays the generated audio by reading the internal loop buffer directly via PortAudio, so nothing in TouchDesigner pulls audio_out. And critically — even with an Audio Analyze CHOP wired to the COMP's out, the pull does not propagate across the Base COMP boundary (telemetry showed audio_out_cooks=0). So audio_out wasn't cooking at all.

The fix (two pieces):

  1. Force-cook audio_out every frame from frame_exec's onFrameStart — guarantees it cooks regardless of the broken cross-COMP pull.
  2. audio_clock Wave CHOP carrier (Time Slice, 48 kHz) wired as audio_out's input. The earlier (long-reverted) force-cook produced frame-rate cooks (numSamples=1) because audio_out had no audio-rate input. With a Wave CHOP feeding it, each forced cook now spans one frame's worth of audio samples (~800 at 48k/60fps). OnCookRecv reads the carrier's sample count as the authoritative block size, ignores its values, and fills that many samples from the loop buffer.

A Debug-gated diagnostic in OnCookRecv reports the cook rate (out.numSamples / carrier.numSamples → AUDIO-rate / FRAME-rate) so this is verifiable from the textport.

Wire the COMP's out → an Audio Analyze CHOP and your audio-reactive material now responds to the generated audio.

Verification

  • Source Audio File picker is gone from the Session page; Connect works exactly as v0.2.7.
  • Build log: audio_out inputs=1 (waveCHOP audio-rate carrier).
  • Telemetry audio_out_cooks= > 0; Debug shows OnCookRecv ... → AUDIO-rate.
  • Audio Analyze populates — confirmed live.

Tests: 71 passed. Drift: clean against demon-public-demo @ f2be73b. BUILD_MARKER = v0.2.8-hide-sourcefile-forcecook-wave-clock