Praat AudioTools Live Lab

Capture a live gesture with a MIDI pedal. Transform it through nine Praat AudioTools chains. Introduce the result as a one-shot sound, layer or crossfade it in stereo or octophonic space. A performance-controlled analysis–resynthesis instrument with a temporary Result Bank and a dedicated isolated rendering worker.

Author: Shai CohenAffiliation: Department of Music, Bar-Ilan University, IsraelCategory: Vector Chain / Live PerformanceVersion: 1.1.1 (2026)License: MIT LicenseRepo: Praat AudioTools
Contents:

What this does

Praat AudioTools Live Lab turns a physical microphone or instrument input into a performance-controlled analysis–resynthesis instrument. Hold a momentary MIDI pedal or the keyboard capture key to record an acoustic gesture; release it to send the completed take through one of nine existing Praat AudioTools Live chains. The resulting sound enters a temporary Result Bank and can be played as a one-shot event or introduced through a controlled crossfade.

The system separates live capture, Praat rendering and playback. You can make another recording while an earlier take is being processed or played, and a slow rendering job does not block the audio callback. Unlike automatic phrase-detection systems, the musician defines the capture boundaries by holding and releasing a pedal.

Compositional principle: a performed gesture becomes a reusable sonic object. You decide when to capture it, which processing grammar transforms it, whether the result enters automatically, and when an earlier take should return, be replaced or be regenerated.

Key capabilities in v1.1.1:

Quick start

  1. Place Live_Lab.praat and live_lab.py in the AudioTools installation as described in Installation and requirements. Keep the nine original Live chains in Vector Chain/.
  2. Connect your microphone, instrument or external mixer to the physical audio interface. Configure input gain on the interface; use its direct monitoring rather than software-through monitoring in Live Lab.
  3. Run Live_Lab.praat from Praat. No Sound needs to be selected first. In Praat 7, allow the required trust permission if prompted.
  4. Open SETUP → Audio. Choose Host API (preferably ASIO on Windows), input and output devices, sample rate, block size, Mono or Stereo input, and the physical input-channel number(s). Click Apply & restart audio.
  5. Open SETUP → Routing. Select Stereo or Octophonic, confirm the actual physical outputs, and use Test (-30 dBFS) or Test all in turn at a safe monitoring level.
  6. Open SETUP → Praat. Verify the executable is detected and click Run worker self-test. The test result should become READY in the Result Bank; it tests the real worker path, not an arbitrary Live chain.
  7. Open SETUP → MIDI, select the correct MIDI input port, choose Learn (press & HOLD) for Hold to Record, press and hold the pedal, and verify DOWN/UP feedback. If no pedal is available, use the keyboard F key.
  8. In SETUP → Chains, choose MANUAL or AUTO for each chain. All nine start as MANUAL in a new configuration; crossfade defaults to 3.0 seconds if AUTO is enabled.
  9. Return to PERFORMANCE, check that AUDIO is OK and capture is ARMED, choose a chain with 1–9, then hold the pedal/F to record and release it to submit.
  10. When the result is READY, select it and use Space to play, or C to crossfade. Use Esc for Stop All. Close the Live Lab window when finished and check Praat's Info window for the shutdown report.
First sound-check: start with a short Mono recording through Live 1, a Stereo output profile and MANUAL playback. Verify the entire cycle before enabling AUTO, octophonic routing or longer recordings.

Core concept and signal flow

PHYSICAL MICROPHONE / INSTRUMENT / EXTERNAL MIXER | GLOBAL INPUT (Mono / Stereo) | HOLD MIDI PEDAL or F pressed = capture released = finalise | SESSION TAKE (original WAV) | FIFO PRAAT PROCESSING QUEUE one isolated worker | LIVE 1–6 / LIVE 1–3 RANDOM (processing-only adapter) | VALIDATED RESULT | TEMPORARY RESULT BANK / \ MANUAL READY AUTO ELIGIBLE | | Play / Crossfade Latest Capture Priority | | +-----------+-----------+ | ONE-SHOT / MULTICHANNEL ROUTING | MIX / CROSSFADE / LOOKAHEAD LIMITER | PHYSICAL OUTPUTS Capture and playback stay independent while Praat renders.

Python owns the full-duplex audio stream and the performance interface. A capture writer serialises finished takes outside the audio callback. A processing manager runs one headless Praat process per job; its worker loads the take, runs the selected original composition through an adapter, validates the output and returns a complete WAV for playback.

The Praat launcher remains open and occupied while the Python window is running, but the worker does not use the user's interactive Praat Objects list. The nine original chains are not overwritten or modified.

Nine Live processing chains

The numbered buttons correspond to six existing compositions and three parameter-randomised variants. The table below describes the stage order present in the supplied Live scripts; it does not imply that every stage produces a predetermined result for every recording.

KeyChainStages in the original script
1Live 1Neural Ambient Drone Designer → Percussive Audio Groove Creator → Crystalline Cascade.
2Live 2Spiral Pitch Dance → Neural Ambient Drone Designer → 8-channel speed deviations.
3Live 3Whisper Morph → Bimodal Contour Grammar → Percussive Audio Groove Creator.
4Live 4Metamodulator (cubic-phase stage) → Adaptive Grain Cloud Synthesis → 8-Channel Comb Delay.
5Live 5Full-Wave Rectifier → Brownian Motion Texture Generator → 8-Channel Movements.
6Live 6Phase Shaper → Phase Modulation Matrix → BPM Panning.
7Live 1 RandomLive 1 stage order, with randomised parameter choices.
8Live 2 RandomLive 2 stage order, with randomised parameter choices.
9Live 3 RandomLive 3 stage order, with randomised parameter choices.

At startup, SETUP → Chains → Re-check chain files performs a structural compatibility check. The runtime builds the processing adapter from the installed chain: it replaces the built-in microphone recording with the captured WAV, retains the chain's preparation and transformations, and removes its final internal Play command. A preflight check also inspects child-script argument counts and visible Draw/Play switches.

Original chain integrity: these adapters are generated only inside temporary job folders. They do not rewrite the nine original files. If a source script's structure changes incompatibly, Live Lab marks the chain INCOMPATIBLE rather than silently approximating its processing.

Hold-to-record capture and pre-roll

Pedal DOWN begins a capture and freezes the selected chain, its MANUAL/AUTO policy, crossfade time and job decision number. Pedal UP ends it, sends the audio buffer to the writer and moves the take into finalisation. The capture becomes a processing job only after its WAV is completely written.

SettingDefaultWhat it changes
Global input modeMonoChoose Mono or Stereo in SETUP → Audio; the same selection feeds all nine chains.
Input channel(s)1 for Mono; 1 and 2 available for StereoOne-based physical interface channel numbers; selected by the user.
Minimum capture0.2 sTakes shorter than this (excluding pre-roll) are discarded.
Maximum capture60 sSafety timeout; a longer press ends and submits the capture automatically.
Pre-rollOn, 250 msAdds recently buffered audio from before the pedal press.
Capture statusARMED at startupUse the ARM control or F2 to allow/disallow new captures.
Stop All fade0.25 sFades the current playback on Stop All; it is not a capture cancel command.

Pre-roll is copied from the input ring into a preallocated capture buffer. The audio callback does not write WAV files to disk. A dedicated writer thread validates the captured samples and saves them within the private session workspace. FINALIZING prevents audio-device restart while a just-released take is still being written.

Stereo input is not stereo processing. The original Live scripts use a Mono recording and operate on a Mono Sound. Live Lab retains a Stereo original capture for export, but its processing adapter converts Stereo to Mono and resamples to the original chain's expected 44.1 kHz before running it. The processed result can still be Mono, Stereo or eight-channel, depending on the chain.

Live Lab does not route the incoming microphone signal back to the output stream. For onstage listening, use the interface's direct monitoring, an external monitor mixer or a suitable isolated signal path. Avoid allowing speaker playback to feed unintentionally into a microphone capture.

MIDI pedal, controller mapping and disconnection

In SETUP → MIDI, select an input port and optional MIDI channel (Omni or 1–16). Every performance action can be assigned via MIDI Learn to a suitable Note or CC message. The foot-pedal mapping uses Learn (press & HOLD).

ControlDefault / behaviorPractical meaning
Hold-to-record mappingUnmapped until learnedAccepts Note On/Off or a momentary CC. A held press captures sound; release finalises it.
Pedal polarityNormalInvert if a pedal reports low CC value when pressed.
CC ON threshold64After polarity adjustment, CC value ≥64 means pressed.
CC OFF threshold40CC value ≤40 means released; the gap helps reject jitter.
MIDI channelOmniListen on all 16 channels unless a specific channel is selected.
Other action mappingsLearn per actionChain 1–9, playback, bank navigation, regenerate, crossfade, suspend, arm, pin, stop all.
Port lossChecked periodicallyA disconnected, held pedal is logically released so capture cannot continue forever.

Repeated Note On messages and CC fluctuations are handled as edges rather than repeated start commands. The Setup display shows pedal state, last incoming MIDI event and whether an event was filtered or unmapped. MIDI is optional: keyboard-only capture is supported when python-rtmidi is not installed.

Pedal learning: in Learn mode, press and hold the pedal once, then release it. If the displayed state seems reversed, inspect Polarity; if a CC pedal is noisy, adjust the press/release thresholds and test both edges before performing.

Keyboard shortcuts and performance actions

These are the default key assignments, visible and editable under SETUP → Keyboard. Keyboard controls are suppressed while typing into setup text fields, and a focus-loss safeguard releases a keyboard-held recording key.

KeyActionEffect
1–9Select Live chainChanges the chain for the next capture; an in-progress capture keeps its original choice.
F (hold)Hold to RecordPress to capture; release to finalise and enqueue.
SpacePlay / RetriggerStarts the selected READY result from its beginning; may layer with other results.
CCrossfade selectedFades the currently playing voices out while introducing the selected READY result.
RRegenerateRenders a new result from the selected take’s original capture through the currently selected chain.
[ / ]Previous / NextMoves selection through the Result Bank.
LLatest ReadySelects the most recently completed READY result.
PPin / UnpinProtects or releases the selected result from automatic eviction.
AAuto SuspendTemporarily prevents newly completed AUTO jobs from beginning playback.
F2ARM / DISARMAllows or prevents new recordings; disarming while recording ends that capture.
EscStop AllFades all sounding computer results using the configured Stop All fade.
Play and Crossfade are different operations. Space adds a one-shot voice (retriggering the same result fades its prior instance). C replaces the currently sounding result(s) through a fade. Both are manual performance decisions that can supersede an older job's pending Auto Play.

One-shot playback, layering and crossfades

Every processed result is a One-Shot. There is no looping in v1.1.1. A result ends naturally after its stored samples have played. It can be replayed on demand without invoking Praat again.

OperationWhat the playback engine does
Play / RetriggerStarts a new instance from sample zero. A previous instance of the same result receives a brief retrigger fade; different results may coexist.
Manual CrossfadeIntroduces the selected READY result and fades out currently sounding voices. Reads the current per-chain crossfade setting.
AUTO CrossfadeWhen an eligible job becomes READY, uses the crossfade duration saved with that processing job.
Fade-in from silenceIf nothing is already sounding, a crossfade command acts as a fade-in.
Natural endA previously sounding result can end before the entire crossfade finishes; it is never looped or stretched to fill the interval.
Stop AllInitiates a short output fade and prevents an older pending automatic job from taking over via the decision-priority rule.

The default crossfade is 3.0 seconds per chain, adjustable under SETUP → Chains. The actual fade is capped at approximately half the incoming result's duration, so a very short clip does not spend its entire length fading in. Crossfade envelopes are equal-power for different results; transitioning a result into itself uses a constant-amplitude curve to avoid a correlated-signal boost.

The output engine applies a brief anti-click fade at the beginning and natural end of each voice. Result routing occurs before the shared output mix and limiter, so Mono, Stereo and eight-channel sounds can be combined in a single selected physical output space.

Auto Play, Manual Play and Latest Capture Priority

Each of the nine chains has an independent policy, configured in SETUP → Chains. A new installation starts with every chain in MANUAL. In MANUAL, the completed result remains READY. In AUTO, the result can enter through Crossfade only when it still represents the performer's latest relevant decision.

AUTO PLAY is permitted only when: 1. That job was captured/regenerated with policy AUTO; 2. Auto Suspend is OFF when the result finishes; 3. The job's decision number is still the latest. Otherwise → keep the completed result READY in the bank.

The decision counter advances when you begin a new capture, Regenerate, manually Play/Retrigger, manually Crossfade or issue Stop All. For example, if Take T008 is still processing when you start T009, T008 will not interrupt the newer performance decision when it finally completes. Instead, it becomes READY for manual use.

Auto Suspend is a separate global control. Turning it ON does not cancel processing or delete audio; it makes newly finished AUTO results wait in the bank. It can be toggled from the Playback panel or with A.

Musical consequence: AUTO does not mean every result is guaranteed to sound. It means the result is eligible to sound when ready, provided no more recent performance action has superseded it.

Result Bank, PIN and regeneration

The Result Bank stores completed and pending processing results together with references to their original captured takes. The default capacity is 16 results and the default memory budget for processed audio is 1,500 MB; both are configurable under SETUP → Capture.

Bank column / controlMeaning
IDA take/result identifier such as T008.1; subsequent regenerations from the same take use later suffixes.
ChainWhich of the nine Live chains created the result.
StatusQUEUED, PROCESSING, READY, FAILED or CANCELLED; PLAYING appears while a result is voiced.
Dur / ChProcessed-result duration and channel count, or capture information while pending.
PolicyAUTO or MANUAL as stored when the job was created.
PinPrevents eviction by normal bank housekeeping.
SeedStored seed; a check mark indicates chains flagged reproducible in the source.
NoteAutoplay eligibility reason, errors and selected processing metadata.
Play / RetriggerPlay the selected READY audio without recomputing it.
RegenerateSend the selected take’s original recording through the chain currently selected with keys 1–9.
Latest ReadySelect the most recently completed playable result.
Export selectedWrite the original capture (if available), result audio (if available), and a JSON metadata file to the export folder.

Eviction avoids PINNED, QUEUED, PROCESSING, currently PLAYING and not-yet-started scheduled voices. When the Bank is full and every entry is protected, new captures are refused rather than silently deleting protected material. When the final result referencing a take is evicted, its temporary original WAV may also be released.

Retrigger ≠ Regenerate. Retrigger plays the same samples. Regenerate starts a new Praat job and may produce a distinct sound. In particular, the chosen chain at the moment you press Regenerate can differ from the chain that produced the selected result.

Output routing: Stereo and Octophonic

Routing is explicit: no hidden channel wraparound and no unapproved eight-to-stereo fold-down. Live Lab supports output profiles named Stereo and Octophonic; physical channel numbering is one-based in the settings.

Processed resultStereo profileOctophonic profile
1 channel (Mono)Feed both configured physical stereo outputs using the selected mono gain law.Use Front Stereo Pair (default), a selected single speaker, or all eight at a defined gain.
2 channels (Stereo)L/R map to the configured physical stereo pair.L/R map only to the selected Front Stereo Pair (speakers 1/2 by default).
8 channelsRejected by default. Enable one of the explicit 8→2 downmix presets before playing.Each result channel goes to its corresponding logical speaker, then through the saved physical speaker map.
Other channel countsRejected: no routing definition.Rejected: no routing definition.

Available Mono gain laws are −3 dB equal-power (default), −6 dB linear and 0 dB dual mono. Octophonic mono placement can use Front Stereo Pair, one speaker or an eight-speaker distribution. Defined eight-to-two presets are a ring/azimuth equal-power map and an odd/even grouping, both labelled −6 dB in the interface; None (reject) is the default.

In SETUP → Routing, specify output profile, stream channel count, physical L/R channels, speaker 1–8 mapping, Front Stereo Pair, mono mapping, downmix preset, ring starting azimuth and per-channel trim. Validate & apply checks the configuration. Test (-30 dBFS) sends a short 1 kHz test tone to an individual physical output; Test all in turn steps through every open output.

Do not equate eight internal processing voices with eight-channel playback unless the exported result actually has eight channels. The Router examines the number of channels in each completed Sound. A Stereo result will remain on the selected pair even when the output stream has eight channels.

Dynamics, output metering and limiter

After routing and mixing, the output is scaled by per-channel trims and the Master gain. The default output protection is ON, with a ceiling of −0.3 dBFS. The v1.1.1 engine uses a 2 ms lookahead peak limiter with a 1 ms attack and approximately 250 ms release; the code retains a numerical safety clamp as a backstop rather than its normal limiting mechanism.

SETUP → Routing provides a limiter enable control and an adjustable ceiling. The PERFORMANCE view shows input/output meters plus status for limiter activity and audio callback overloads. The master slider ranges from −40 to +6 dB. Raising gain or using aggressive speaker trims increases the load on output protection.

Interpretation: the limiter reduces peaks in the combined playback stream, not the dry microphone input. It introduces a small fixed delay when enabled and is not a substitute for setting safe interface gain, amplifier level and speaker trims.

Performance View: main display

Live Lab opens in PERFORMANCE view. The dark application window is designed for a stage-readable overview, while this documentation page uses the light, print-friendly Praat AudioTools reference style.

AreaOn-screen information / action
Top barAudio and MIDI status, ARMED/DISARMED button, and SETUP / PERFORMANCE view selection.
GLOBAL INPUTChosen Mono/Stereo input and real-time capture-level meters.
PROCESSING CHAINSNine selectable chain buttons, key labels, MANUAL/AUTO indication, active selection and incompatibility warning.
CAPTUREHold-to-record headline, large timer, Take ID, selected chain and capture/finalisation status.
PROCESSINGActive Praat job, elapsed time, queue size, completed/failed counts and recent error.
PLAYBACKNOW PLAYING, progress, fade/crossfade state, NEXT / READY, Master, Auto Suspend and Stop All.
OUTPUTChannel meters, limiter activity, detected overs and callback warning status.
RESULT BANKSelectable result list plus Play, Crossfade, Regenerate, Pin, Latest Ready and Export selected.
Illustrative stage state (not live telemetry)
PRAAT AUDIOTOOLS  ·  LIVE LAB 1.1.1
AUDIO: OK    MIDI: connected    ARMED

GLOBAL INPUT       Stereo · IN 1+2
PROCESSING CHAINS  [1] Live 1 MANUAL  [8] Live 2 Random AUTO · xf 3.0s
CAPTURE            HOLD TO RECORD | next take T009
PROCESSING         T008.1 · Live 2 Random · 6 s | queued 1
PLAYBACK           NOW PLAYING T007.1 | ONE-SHOT
                   NEXT / READY T006.1 · Live 4 · READY
RESULT BANK        T006.1 READY | T007.1 PLAYING | T008.1 PROCESSING
OUTPUT             Octophonic · Front Stereo Pair 1/2

READY means a result can be triggered; PROCESSING is not a playback instruction. You may continue to perform acoustically while either state is shown. During keyboard-controlled capture, keep the application window focused.

Setup View: nine tabs

SETUP groups detailed options into nine tabs. Most device and routing settings are normally prepared during sound-check rather than changed mid-performance.

TabWhat it contains
AudioHost API, input/output device selection, sample rate (44.1/48/88.2/96 kHz), block size (128–2048), capture on/off, Mono/Stereo, input channels, apply/restart and rescan.
RoutingStereo/Octophonic profile, physical speaker map, Front Stereo Pair, mono gain laws, approved downmix, trims, limiter and speaker tests.
CaptureMinimum/maximum duration, pre-roll, Stop All fade, Result Bank capacity/memory and export directory.
MIDIPort, channel, pedal polarity, CC thresholds, MIDI Learn and live event diagnostics for each action.
KeyboardEdit key names, apply mappings and restore defaults.
ChainsSet MANUAL/AUTO and Crossfade seconds for each chain; re-check installed chain files.
PraatPraat executable discovery/browse, worker timeout and actual Worker Self-Test.
PresetsSave, load and delete named performance configurations.
DiagnosticsInspect active workspace, review in-memory log and cancel current/queued processing.
Changing the audio stream: Live Lab refuses restart while capture is in progress or still FINALIZING. Its v1.1.1 audio/capture/routing apply path attempts a transactional restart, retaining the previous settings if the proposed stream fails. Reconfiguration can still interrupt sounding voices, so carry it out between musical sections when possible.

Performance presets and persistent configuration

Open SETUP → Presets to Save, Load or Delete a named setup. Presets store routing, chain MANUAL/AUTO policies and crossfade durations, Master gain, capture settings, keyboard maps and MIDI mappings/thresholds. Audio device choices are intentionally not part of a performance preset: a setup can be moved to another venue and then associated with its local hardware.

The application also maintains a general configuration file, plugin_AudioTools/live_lab_config.json. This persistent file is distinct from the temporary audio session and is not deleted when the application closes.

Venue workflow: prepare a preset named for the musical setup, then configure the actual ASIO interface and speaker outputs at the venue. A stored octophonic speaker map still needs a physical speaker test before use.

Praat rendering, compatibility and self-test

Live Lab does not ask the nine source scripts to record another microphone input. For each job it generates a temporary adapter from the installed original chain. It reads the captured WAV, converts the processing input to Mono/44.1 kHz as needed, executes the original chain stages without the chain's final Play command, and saves a validated 24-bit WAV result.

The manager launches a separate headless Praat process and runs one job at a time (FIFO). Each job has its own temporary folder containing an adapter, worker status, captured handoff/result and diagnostic text while needed. The result is loaded into Python only after Praat exits and the audio file passes sample rate/channel/frame validation.

In SETUP → Praat, leave the executable field empty for automatic detection, or browse to the correct executable. The default worker timeout is 300 seconds. Run worker self-test makes a short synthetic audio example and verifies the worker's file handoff, rendering, resampling and return path. It does not exercise all nine transformation chains.

The source code contains a report of headless runtime testing of all nine chains on Linux with Praat 6.4.63 and 7.0. Treat this as a development test report; repeat the actual chain and audio-driver tests on the performance computer before relying on the system in a concert.

Praat versions and trust: the entry script requests the required permission for Praat 7. The worker may need a full-trust launch flag to write local WAV files. Supported flags are probed for the installed Praat executable rather than hard-coded without inspection.

Randomised chains and repeatability

The Result Bank stores a numeric random seed with each processing job. In the source implementation, Live 4, 5 and 6 are marked reproducible because their processing chains can follow the worker's seed; repeated runs on the same Praat build are reported to match at sample level. Live 1–3 and the three Random variants include internally re-randomising stages and are not promised to reproduce identically from the recorded seed.

Regenerate intentionally creates a new processing job with a new seed. The stored seed is useful metadata, but does not make every script or every version of Praat deterministically equivalent.

Different builds: even for reproducible chains, numerical audio results may vary slightly between Praat versions. Do not assume cross-version, bit-for-bit identity.

Exporting recordings and results

Select an entry in the Result Bank and click Export selected. Live Lab writes available audio and a metadata record into the configured export folder, which defaults to Documents/Live Lab Exports/ (or a corresponding home-directory location if Documents is unavailable).

Exported itemContents
..._capture.wavThe original take as captured; a Stereo source remains Stereo even though the processing adapter uses Mono.
..._result.wavThe processed output as loaded for playback, with its actual resulting channel count.
...jsonResult/Take ID, chain, capture and result metadata, playback policy, crossfade time, seed and processing details.

An export may contain only the WAV files currently available, but still writes a metadata JSON file. Export is the deliberate preservation mechanism. Ordinary capture WAVs, adapters and processing outputs within the session folder are disposable and are not intended to become a permanent library automatically.

Temporary files, process safety and session cleanup

Temporary file management is a central part of the design. Each Live Lab run creates an application-owned folder similar to:

<system temp>/PraatAudioToolsLiveLab/
  session_YYYYMMDD_HHMMSS_PID_RANDOM/
    owner.json
    session.lock
    captures/
    jobs/
    Live_Lab_Worker.praat

The Python process holds an OS-level lock while the session is active. Each Praat worker writes its own temporary files inside its job folder (the worker's TEMP, TMP and TMPDIR are redirected there). The manager removes an individual job folder after success or failure; the session folder is removed on clean shutdown.

On Windows, the implementation protects workers with a Job Object configured to terminate assigned processes when it closes. On other supported environments it uses a process group. On ordinary closure it disarms capture, stops and closes audio/MIDI resources, cancels and reaps processing workers, waits for the capture writer, clears the Bank and removes the session workspace.

What persists by design? The installed scripts, live_lab_config.json, saved presets inside the configuration, and audio/metadata explicitly exported by the user. These are not temporary residue.
If shutdown is incomplete: the application reports the problem rather than claiming a clean exit. If the capture writer is still active beyond its shutdown wait, the workspace is marked CLEANUP_PENDING instead of being deleted unsafely. At a future launch, recovery checks whether a matching app-owned session is inactive before deleting it. A forced process kill or system crash cannot guarantee immediate cleanup.

The Praat entry point also creates short-lived, app-prefixed launch-handshake files in the operating system's temporary directory. They are removed on normal completion; stale matching files are subject to later recovery. Do not manually delete an active session folder, as its files may still be in use.

Diagnostics and troubleshooting

SymptomCheck / remedy
AUDIO: ERROR or no streamSETUP → Audio: correct Host API/device, compatible channel count and sample rate; ASIO input and output must use the same supported device. Close other applications holding it.
MIDI does not trigger captureSelect the correct MIDI port; inspect last event and pedal DOWN/UP; use Learn (press & HOLD); verify polarity, thresholds and MIDI channel.
Captures are silently absentCheck ARMED, input level, capture enabled and channel choice. Very short captures below the minimum are rejected.
Chain is INCOMPATIBLEOpen SETUP → Chains and Re-check chain files. Verify module paths, function signatures and NoDraw-compatible versions.
Praat jobs fail or stay queuedCheck SETUP → Praat executable, 300 s timeout, and Run worker self-test. Read the bank status and Diagnostics log.
Result is READY but not playing automaticallyConfirm its frozen AUTO policy, Auto Suspend state and whether a newer capture/manual action superseded the job. Use Play or C manually.
An eight-channel result is silent in Stereo profileAn approved eight-to-two downmix is required; None (reject) is the default.
Speaker map sounds incorrectUse the physical output test and validate speaker 1–8 map and Front Stereo Pair selection.
Audio click, clipping or dropoutsCheck gain and output meters, limiter setting, sample rate/block size, ASIO driver and CPU use during processing. Increase block size if needed.
Bank cannot accept a takeAll entries may be PINNED, playing or processing, or memory may be exhausted; unpin or finish work before continuing.
Cleanup incompleteRead Praat Info / Diagnostics reports, allow worker/write operations to stop, then use safe stale-session recovery on the next launch.

The Diagnostics tab shows the active workspace path, a temporary in-memory activity log, the running Praat worker PID when available, Inspect workspace and Cancel all processing. Cancellation does not mean that audio already playing must stop.

Compositional performance workflows

WorkflowSuggested exploration
A — One gesture, one transformationSet Live 1 to MANUAL, record with the pedal, audition with Space and compare retriggers. The timing of response is entirely performer-controlled.
B — Automatic successionEnable AUTO for two chains, capture successive gestures, and listen to how completed results enter through crossfades while playing continues.
C — Superseded memoriesRecord T001, then capture T002 before T001 finishes processing. Observe the older completed result remain READY under Latest Capture Priority.
D — Recombination from one takeSelect an earlier take, choose a different chain and press R. Compare a new composition of the original input without another microphone take.
E — Controlled spatial expansionRun in Octophonic mode; compare a Stereo result on Front Stereo Pair with an eight-channel result routed to the full speaker map.
F — Manual layered counterpointUse Space on different READY results to create simultaneous one-shot layers, then use C to replace the mix through a crossfade.
G — Captures as a temporary archivePin significant moments and export them with WAV/JSON metadata for later composition, without retaining every temporary take.
H — Safe concert endingActivate Auto Suspend, stop sound with Esc, DISARM capture and close the application normally; verify the clean shutdown report.

Performance study: capture, transform, spatialise

Begin with a single short acoustic gesture and a MANUAL chain. Retrigger its exact result, then Regenerate the same original through a different Live chain. Finally switch to AUTO and explore crossfaded introductions while continuing to play. The contrast distinguishes recording time, processing time and musical entrance time as three independently controllable compositional dimensions.

Installation and requirements

ComponentRequirement
PraatAn installed Praat executable capable of running the original AudioTools chains in headless script mode. Praat 7 may require a trust approval for subprocess/file access.
Praat AudioToolsThe nine Live script files and their referenced processing modules in their existing plugin folders.
PythonPython 3.8+ with numpy, sounddevice, soundfile and tkinter available.
MIDI (optional)python-rtmidi for foot pedals and other MIDI controllers; keyboard mode works without it.
Physical audioWorking microphone/instrument input and sound-card outputs; ASIO is preferred on Windows, especially for multichannel/full-duplex work.
Operating contextLocal computer. No Ableton Live, Max/MSP, online service or virtual audio cable is needed.

Recommended file placement:

plugin_AudioTools/
  py/
    Live_Lab.praat
    live_lab.py
  Vector Chain/
    Live_1.praat
    Live_2.praat
    Live_3.praat
    Live_4.praat
    Live_5.praat
    Live_6.praat
    Live_1_Random.praat
    Live_2_Random.praat
    Live_3_Random.praat
  ... (the existing processing modules)

The Praat entry script may alternatively reside in Vector Chain/; it searches for live_lab.py beside itself and then in py/. The preferred layout above keeps the application and launcher side by side, as in the existing Performance Launcher.

Install missing packages in the same interpreter selected by the launcher:

python -m pip install numpy sounddevice soundfile
python -m pip install python-rtmidi  # optional MIDI input

tkinter is ordinarily supplied with common Python distributions but may need separate installation on some systems. The launcher first probes the user-home virtual environment named praat_ddsp_env, then alternative Python executables. If your environment uses a different name, edit pyVenvName$ near the start of Live_Lab.praat. The launcher reports missing dependencies and does not install them silently.

Limitations and performance considerations

Practical recommendation: begin with one short manually triggered take, validate capture and routing, then activate AUTO one chain at a time. Use Diagnostics after any failed job, and keep Auto Suspend and Stop All accessible on stage.