Development profile compiled from project source and retained records in October 2026. Dates and test results describe those records; they do not imply a new build, live acceptance test or public release.
Biography
Actors rehearse alone most of the time, reading the other parts in their heads or against a flat recording that never waits. Actor Rehearsal Studio exists to give a solo performer a partner that behaves like one: it listens, it holds through a deliberate pause, it comes in on cue, and it occupies a place in an acoustic space rather than sitting in the centre of the headphones. The module grew inside AssistantApp during 2026 from an earlier "Actor/Script Studio" narration panel and was rebuilt around a connected pipeline on 12 and 13 October 2026.
The pipeline begins with a typed script parser. A screenplay convention (INT. CATHEDRAL - NIGHT., [Character Morgan: female, 53, Scottish, calm authority.], Alex: …, bracketed sound cues) is parsed once into scenes, cast, dialogue, movements and sound cues, each keeping its source line. Mixed brackets are split sentence by sentence, so a movement reaches the blocking model while a bark reaches the effects bus. Anything unrecognised is reported with a line number; the parser is rule-based and says so. A separate screenplay reader added on 13 October accepts conventional dialogue blocks and the studio's inline directive syntax losslessly.
Casting is next. Each digital character selects an independently saved Neural Voice Creator profile, with Voice Designer variations as alternatives. Partner lines are rendered ahead of time through the local high-fidelity neural backend; a measured ten-word novel render took 22 seconds, which is why preparation happens before the scene starts. Since 13 October a "source expression hierarchy" compiles a score for each line (intent, focus words, phrase arcs, energy nuclei) from a clean reference recording of the same voice. After a listening regression, the default renderer applies only a bounded gain envelope: it preserves the neural take's pitch, timing and consonants byte for byte and archives the dry audio beside the score.
The stage is a room model. Sluglines choose acoustic presets; stage directions place cast and sound sources on a normalised stage map; AVAudioEnvironmentNode with HRTF spatialises each voice and effect as a mono point source, with continuous beds (rain, wind, river, generator) kept separate from one-shot cues. Thirty of thirty-one showcase cues resolved to recorded CC0 or licensed assets on the author's Mac; the remainder are labelled procedural stand-ins. Recorded wooden-door knocks and a ventilation bed are bundled with provenance.
Turn-taking is the module's core claim. During the actor's line, on-device speech recognition and a streaming prosody adapter accumulate evidence; a script-conditioned tracker aligns heard words to expected words with an ordered alignment that tolerates substitutions, and completes the turn only when the final words were heard and a rate-scaled silence follows. Protected lines refuse interruption; scripted early entrances can cue a partner within an estimated 450 ms when coverage, pace and remaining words justify it. In energy-only mode, when recognition is unavailable, it needs accumulated voiced time, never wall-clock silence after a transient. Measured human handoffs scheduled about 1.3 s after the last voice event; a scripted cut-in estimated 0.29 s to first sample. The module explicitly disclaims a 200 ms natural-conversation figure and any emotional interpretation of the actor.
A concrete journey: open the Creative Apps gallery, choose Actor Rehearsal Studio, pick "The Last Light" from Demo Scenes. Set Your character to Alex. Under Character voice, assign Morgan and Casey to two saved neural profiles. Enable scene sound effects and full neural artifacts, put on headphones, press Analyze Rehearsal, then Start Scene. Morgan speaks from far left; you answer; the studio follows your words and hands off to Casey crossing from the right while rain sits overhead. Press Stop at any time; drafts, casts and learned timing persist between launches.
The audience is performers rehearsing alone, drama students and, in the documented roadmap, casting houses who would send sealed audition packages to candidates' devices. That roadmap (session document, video capture, iOS, encrypted packages under NDA, live remote audition) is a design proposal only; none of it is built.
What a visitor can hear is the strongest part: finished scene bounces with cast tables, cue timelines and audio-verification receipts. A usable native interface capture is not yet available.
Features a visitor can hear or try
- Script import (UTF-8 text, 2 MB) and paste, with diagnostics for unresolved lines. (Authored.)
- Delivery grammar in braces before a line:
{pace=0.85x; intensity=0.35; feel=reflective; entry=overlap; interrupt=hold}and{pause=450ms}inside a line; invalid instructions block analysis. Hierarchy directivesintent,arc,focus,hold. (Authored.) - Six showcase scenes with cast and listening notes (
Tools/ActorRehearsalShowcase/). (Authored, original scripts.) - Spatial stage with inferred room, blocking between beats, positioned SFX, continuous beds. (Authored; AVAudioEnvironmentNode dependency.)
- Live turn-taking with on-device speech following; manual "Actor Line Delivered" fallback. (Authored; Speech framework.)
- Per-character saved neural voices, Voice Designer variations, learned live-actor timing. (Authored; neural renderer is the external NeuralVoiceTrainer runtime.)
- Offline bounce recipes producing 48 kHz/24-bit stereo scenes. (Authored.)
Technical foundations
Swift 6 / SwiftUI; AVFoundation (AVAudioEnvironmentNode, HRTF), Speech, Combine; ExpressiveNeuralVoiceKit (context conditioner, timeline builder, creator modeler); SemanticCompute streaming prosody (pinned consumer, provenance JSON and licence in Tools/ActorRehearsalChecks/SCStreamingProsody/); local Python worker for Whisper alignment (the project archive, cached large-v3-turbo); NeuralVoiceTrainer hifi renderer (external, not packaged). 24 source files, about 12,000 lines, in AssistantApp/Sources/Creative/ActorRehearsal*.swift; the studio panel alone is 5,696 lines and holds the session model.
Maturity
| Feature | State | Evidence (date) |
|---|---|---|
| Parser, room model, turn tracker, renderer | Source + component checks: 281 checks passed 12 Oct; 279 with audio 13 Oct; 197 showcase checks | Tools/ActorRehearsalChecks/, /tmp/ActorRehearsal-Commit-01a12fb8/candidate-checks.log, Tools/ActorRehearsalShowcase/checks.log |
| Full macOS build + signed install | Built exit 0, installed: Ready 12 Oct, Showcase 12 Oct, Audio 13 Oct, Screenplay 13 Oct | the project archive; StudioAudioFixes-20261013/verification.json |
| Installed acceptance with controlled input | 18 checks passed (12 Oct, two builds); 25 controlled installed checks | Tools/ActorRehearsalChecks/Evidence/2026-10-12/host-acceptance-ready-final.json, Tools/ActorRehearsalShowcase/Validation/host-acceptance.json |
| Human whole-scene completion | Not accepted. Two real mic lines recognised with automatic handoffs; the whole-scene receipt failed and the cause is unidentified | the project archive |
| Expression hierarchy | Source + 14 deterministic checks; default renderer is gain-only after a listening regression | Tools/ActorRehearsalHierarchy/README.md; …/The Last Light - Clean Source Expression/Listening Notes.md |
| Release | None. Tests: 2 XCTest files exist (ActorRehearsalStageSpatialModelTests, ActorRehearsalDemoSceneTests); run status unknown | Tests/AssistantAppTests/ |
Roadmap, limits, FAQs
Roadmap (documented, unbuilt): Docs/Architecture/ActorAuditionPlatform-Architecture-2026-10-12.md (Codable session document and take ledger, script import for PDF sides/Fountain/FDX, video self-tape capture, iOS actor app, encrypted NDA audition packages, live SFU auditions); plan sections "Delivery order and acceptance" in ActorRehearsalIntegrationPlan-2026-10-12.md. Limits: macOS only; partner lines are pre-rendered, not live-synthesised; actors are placed at beats, not moved continuously while speaking; room reverb is an Apple preset approximation, not a simulated room; speech following needs permission and English on-device recognition; neural voice resemblance is not certified; the neural generator does not consume fine prosody controls; synthetic pitch/ASR checks did not predict perceived voice quality; human whole-scene acceptance is open; voice dataset speaker labelling needs a fix before any voice leaves the machine. FAQ: Does the partner understand my acting? No; it measures words, pace and energy and says so. Can it interrupt me? Only on lines marked interrupt=allow, and only when you speak decisively after its phrase has begun. Whose voices are these? Saved local profiles; consent-gated enrolment is the only path, and the pipeline refuses to substitute system speech silently. Can I use my own script? Yes, pasted or imported as text in the documented convention; PDF and Final Draft import are roadmap. Is it a casting tool? Not yet; that is the published architecture proposal.