an.sound_anchors#
Sound cues timed by the picture (an#317): at: {when: <node>, reaches: {y: px}} and until:.
A record scratch has to land when the last line of a crawl becomes readable.
Writing that second into the scene means solving the crawl’s geometry outside
an, and every layout change moves the picture away from the sound. Here the
cue names the event instead, and resolve_cue_anchors() finds the second
when the film is laid out:
at: {when: crawl/line_7, reaches: {y: 840}}— the first instant the node’s on-screen centre crosses that frame row (orxcolumn), from the very document the stage renders (compiled_document), through the camera, parallax and a crawl’s tilt (an.stage.timeline.screen_position()), sampled at every film frame and interpolated between the two that straddle it; plusoffset;until: {cue: scratch, offset: 0.12}— the cue ends at that cue’s start plusoffset(itsdurationis derived).
It runs on the in-memory settled copy of the scene (as the measured shot
lengths do, an.measurements): scene.md keeps the anchor, never the
second. Each resolved cue is reported as an info finding — “scratch at
33.03 s (crawl/line_7 reached y=840)” — which the render report records. An
anchor that cannot be resolved (no such node, never reached, a shot no stage
draws) refuses before any browser launches.
Functions
|
|
Exceptions
A cue's anchor cannot be resolved: the message says which and why. |
- exception an.sound_anchors.SoundAnchorError[source]#
Bases:
ValueErrorA cue’s anchor cannot be resolved: the message says which and why.
- an.sound_anchors.resolve_cue_anchors(scene, ctx, renderers, *, film_starts)[source]#
scene(a copy) with every anchoredatresolved to seconds and everyuntilto a duration.ctx: the render context the shots are compiled under renderers: each shot’s renderer, in timeline order film_starts: each shot’s start in film time (a
meta.soundsanchor’sshot-local second is moved there)