@maccesar/titools 5.2.3 → 5.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -87
- package/docs/examples.md +10 -3
- package/package.json +2 -2
- package/skills/ti-synthengine/SKILL.md +50 -18
- package/skills/ti-synthengine/assets/example/README.md +19 -6
- package/skills/ti-synthengine/assets/example/app.js +69 -12
- package/skills/ti-synthengine/assets/index.d.ts +106 -0
- package/skills/ti-synthengine/references/advanced-examples.md +34 -9
- package/skills/ti-synthengine/references/api.md +327 -246
- package/skills/ti-synthengine/references/audio-engine.md +28 -14
- package/skills/ti-synthengine/references/audio-pipeline-validation.md +1 -1
- package/skills/ti-synthengine/references/examples.md +5 -5
- package/skills/ti-synthengine/references/guide.md +40 -21
- package/skills/ti-synthengine/references/instruments-and-effects.md +164 -0
- package/skills/ti-synthengine/references/native-tone-repetition-validation.md +59 -0
- package/skills/ti-synthengine/references/native-variation-proposal.md +182 -0
- package/skills/ti-synthengine/references/native-variation-validation.md +63 -0
- package/skills/ti-synthengine/references/native-variation.md +285 -0
- package/skills/ti-synthengine/references/recipes-interaction.md +3 -1
- package/skills/ti-synthengine/references/recipes.md +3 -2
- package/skills/ti-synthengine/references/recommendations.md +5 -5
- package/skills/ti-synthengine/references/sound-design.md +18 -16
- package/skills/ti-synthengine/references/source-notes.md +54 -37
- package/skills/ti-synthengine/references/source-snapshot.json +188 -144
- package/skills/ti-synthengine/references/stats-performance.md +1 -1
- package/skills/ti-synthengine/references/troubleshooting.md +43 -35
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
> Source snapshot: official TiSynthEngine
|
|
1
|
+
> Source snapshot: official TiSynthEngine documentation at commit `ec04f4e634075c41b55f66279eabcd78b9652d58` (2026-11-02). Published module 1.1.0; public API 1.1.0. Upstream `documentation/recommendations.md` SHA-256: `f72c3df9c36df0cbdb843bbe2c6799ae537324ece499fe6d1a2de80e43df5261`.
|
|
2
2
|
|
|
3
3
|
# Recommendations
|
|
4
4
|
|
|
5
|
-
The defaults work for ordinary tones and chords.
|
|
5
|
+
The defaults work for ordinary tones and chords. Use the guidance below when an app has dense overlap, user-controlled values, demanding speakers or several audio systems sharing one lifecycle.
|
|
6
6
|
|
|
7
7
|
## Group simultaneous notes
|
|
8
8
|
|
|
@@ -87,7 +87,7 @@ Do not copy the frequency maximum into application code. It depends on the activ
|
|
|
87
87
|
|
|
88
88
|
The same rule applies to `noiseRate`, `lowPassHz` and `filterHz`. Validate a custom `waveTable` as 2 to 64 finite values from -1 to 1, and remember that `bitDepth` accepts zero or an integer from 2 to 16. For `detune`, check the resulting pitch too: a shifted pitch that leaves the frequency range is rejected even when the cents value is in range.
|
|
89
89
|
|
|
90
|
-
Check
|
|
90
|
+
Check each method's documented return value during development: Boolean publication acceptance or a positive sequence ID, with 0 rejecting a sequence. Methods that emit structured validation warnings include the method, key and reason in the native log, but some sequence/control rejection paths do not log. Logging the return at the caller helps identify a stale preset or misspelled field without treating silence in the native log as acceptance.
|
|
91
91
|
|
|
92
92
|
## Test the intended sound
|
|
93
93
|
|
|
@@ -103,7 +103,7 @@ Exercise the real worst case:
|
|
|
103
103
|
- a route change while a note is playing;
|
|
104
104
|
- screen off, interruption and background transitions if the product depends on them.
|
|
105
105
|
|
|
106
|
-
An underrun counter
|
|
106
|
+
An underrun counter describes transport; it cannot tell you whether a waveform, pitch or mix is pleasant.
|
|
107
107
|
|
|
108
108
|
## Binaural placement
|
|
109
109
|
|
|
@@ -128,7 +128,7 @@ Use a sample player or a dedicated music engine when a product needs streaming,
|
|
|
128
128
|
|
|
129
129
|
## Use effects and held voices deliberately
|
|
130
130
|
|
|
131
|
-
Use `noteOn` for a sound whose duration follows interaction, such as a key, motor or beam; release its ID on touch end, cancellation, pause or scene teardown. Use `playSequence` for a finite musical cue or repeating grid. Neither needs JavaScript to keep an already accepted note alive. Both share the same 32-slot maximum with collision and interface tones; held notes can be stolen, and an accepted `
|
|
131
|
+
Use `noteOn` for a sound whose duration follows interaction, such as a key, motor or beam; release its ID on touch end, cancellation, pause or scene teardown. Use `playSequence` for a finite musical cue or repeating grid. Neither needs JavaScript to keep an already accepted note alive. Both share the same 32-slot maximum with collision and interface tones; held notes can be stolen, and an accepted `updateNote` on a stolen ID is a no-op. Optional priority 0-3 affects stealing; it reserves no voices. There is no voice-finished event.
|
|
132
132
|
|
|
133
133
|
Keep chorus/delay/reverb mixes modest when dialogue or short game feedback must remain distinct. By default they process all four categories, so enabling reverb for a victory chord also affects simultaneous shots and collisions. Select categories with `applyTo` and assign each voice a `bus`, or use explicit `effectSend` values to choose the processed share. All selected voices share one effects chain. Disabling effects lets tails drain for at most 30 seconds; use panic when immediate history invalidation is required. Start with saturation disabled and compare creative drive at matched levels. Do not use saturation as an automatic substitute for the final limiter.
|
|
134
134
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
> Source snapshot: official TiSynthEngine
|
|
1
|
+
> Source snapshot: official TiSynthEngine documentation at commit `ec04f4e634075c41b55f66279eabcd78b9652d58` (2026-11-02). Published module 1.1.0; public API 1.1.0. Upstream `documentation/sound-design.md` SHA-256: `ac3f4552065051bc5291d8838945ed256ad3b0da7857e1f1cb5f54f5962ebfae`.
|
|
2
2
|
|
|
3
3
|
# Sound design with TiSynthEngine
|
|
4
4
|
|
|
5
|
+
Additional [curated recipes](recipes.md) provide application sound and interaction variants.
|
|
6
|
+
|
|
5
7
|
TiSynthEngine generates sound with oscillators, without recorded samples. Pitch, waveform, envelope, movement and level define each sound, from interface feedback and musical cues to alarms, retro effects and simple percussion.
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
For the distinction between a playable timbre and a complete effect recipe, start with [instruments, sound effects and complete sequences](instruments-and-effects.md). It covers held keys, independent shots, native sequences, layered effects, demonstrations and shared output headroom.
|
|
8
10
|
|
|
9
11
|
The examples assume the engine is running and use these constants:
|
|
10
12
|
|
|
@@ -137,27 +139,27 @@ synth.playTone({
|
|
|
137
139
|
|
|
138
140
|
## Envelope and total duration
|
|
139
141
|
|
|
140
|
-
|
|
142
|
+
A timed tone or chord uses an attack, an implicit sustain section and a release (with an optional decay stage described below):
|
|
141
143
|
|
|
142
144
|
```text
|
|
143
145
|
silence -> attack -> full level -> release -> silence
|
|
144
146
|
|<---------- duration ---------->|
|
|
145
147
|
```
|
|
146
148
|
|
|
147
|
-
`duration` is the total time, not the sustain time. If duration is 500 ms, attack is 50 ms and release is 100 ms, the full-level middle lasts 350 ms.
|
|
149
|
+
`duration` on `playTone` and `playChord` is the total time, not the sustain time. If duration is 500 ms, attack is 50 ms and release is 100 ms, the full-level middle lasts 350 ms. Held voices instead release on `noteOff`; native sequence steps use `duration` for the next-attack interval and `length` or gate for the note deadline. Their release can overlap later attacks. See [the playback contracts](instruments-and-effects.md#3-complete-sound-sequences-and-layered-effects).
|
|
148
150
|
|
|
149
151
|
Short attacks feel immediate. A 0 or 1 ms attack can be useful for percussion, but an abrupt start at an unlucky phase can sound like a click. Values between 5 and 15 ms keep most game feedback crisp without a hard edge.
|
|
150
152
|
|
|
151
153
|
Long attacks soften the onset. Use 100 to 500 ms for pads and slow warnings. Release controls how the sound leaves: 20 to 80 ms feels tight, while several hundred milliseconds leaves a tail.
|
|
152
154
|
|
|
153
|
-
|
|
155
|
+
For timed tones and chords, explicit attack and release values must fit. These relationships are required:
|
|
154
156
|
|
|
155
157
|
```text
|
|
156
158
|
attack < duration
|
|
157
159
|
release <= duration - attack
|
|
158
160
|
```
|
|
159
161
|
|
|
160
|
-
|
|
162
|
+
Timed defaults are adjusted internally if a very short duration leaves no room; explicit values must pass validation. Native rendering has additional edge rules: held and sequence voices use at least 3 ms attack/release, while iOS timed conversion rounds an accepted zero attack/release to at least one sample and Android preserves zero. Validator acceptance does not establish identical sample envelopes.
|
|
161
163
|
|
|
162
164
|
## Decay and sustain
|
|
163
165
|
|
|
@@ -177,7 +179,7 @@ Practical starting regions:
|
|
|
177
179
|
|
|
178
180
|
`sustain` below 1 needs a nonzero `decay`. Without one the level would jump instantly, which clicks, so the call is rejected with `sustain_without_decay`.
|
|
179
181
|
|
|
180
|
-
The release scales the level the note has reached. If the release begins while the decay is still running, the note leaves smoothly from that point.
|
|
182
|
+
The release scales the level the note has reached. If the release begins while the decay is still running, the note leaves smoothly from that point. For timed tones and chords, the decay still has to fit: `attack` plus `decay` cannot exceed `duration`, and the 50 ms default attack counts. Set a short `attack` explicitly for a tight pluck.
|
|
181
183
|
|
|
182
184
|
## Pan and movement
|
|
183
185
|
|
|
@@ -241,7 +243,7 @@ Filters shape harmonics, so give them a source that has some: `SAWTOOTH`, `SQUAR
|
|
|
241
243
|
|
|
242
244
|
`filterQ` is the resonance. The default 0.7071 is flat. Values from 2 to 4 add character, and above about 6 the filter whistles around the cutoff. A low-pass or high-pass boosts the cutoff region by about `filterQ`, so Q 10 is roughly 20 dB. Lower the event `volume` as Q goes up. The limiter catches peaks, but a resonance that keeps hitting it makes the whole mix pump. The band-pass keeps unity gain at its center for every Q and only narrows.
|
|
243
245
|
|
|
244
|
-
`filterHzEnd` moves the cutoff over the whole event. The motion is exponential, so each second covers the same musical distance. Set it above `filterHz` to open the filter and below to close it. Zero disables the sweep.
|
|
246
|
+
For timed tones and chords, `filterHzEnd` moves the cutoff over the whole event. A native sequence sweep instead uses the note length and holds its endpoint during release. The motion is exponential, so each second covers the same musical distance. Set it above `filterHz` to open the filter and below to close it. Zero disables the sweep.
|
|
245
247
|
|
|
246
248
|
```javascript
|
|
247
249
|
synth.playTone({
|
|
@@ -628,7 +630,7 @@ See [Examples](examples.md) for complete code and [Recommendations](recommendati
|
|
|
628
630
|
|
|
629
631
|
## Holding a sound and adding movement
|
|
630
632
|
|
|
631
|
-
Choose a held voice when the ending follows a player action instead of a fixed duration: motor, charge beam, pad or the last chord of a ceremony. `noteOn` starts a positive app-owned ID; `noteOff` begins release from the current level, and compatible `
|
|
633
|
+
Choose a held voice when the ending follows a player action instead of a fixed duration: motor, charge beam, pad or the last chord of a ceremony. `noteOn` starts a positive app-owned ID; `noteOff` begins release from the current level, and compatible `updateNote` edits ramp over 10 ms. Distinct IDs remain independent events with fixed gain. Reserve enough capacity for their releases and unrelated effects, and release on cancellation as well as ordinary key up. See the [held motor recipe](advanced-examples.md#sustained-game-motor) for retry/cleanup handling.
|
|
632
634
|
|
|
633
635
|
A fanfare can use beat or millisecond sequences with native chords, rests, gate, independent length, swing and pitch-ordered arpeggios. A long release can ring over later steps. Use held voices when release follows presentation or interaction. See [transport usage](guide.md#choose-the-musical-transport).
|
|
634
636
|
|
|
@@ -636,13 +638,13 @@ The two additional voice LFOs move filter cutoff, square PWM or sine FM index us
|
|
|
636
638
|
|
|
637
639
|
## Native space and creative drive
|
|
638
640
|
|
|
639
|
-
| Processor
|
|
640
|
-
|
|
|
641
|
-
| Stereo chorus
|
|
642
|
-
| Ping-pong delay
|
|
643
|
-
| Stereo reverb
|
|
644
|
-
| Optional saturation | Soft waveshaping adds harmonics and changes attack/timbre.
|
|
641
|
+
| Processor | What changes | Useful starting region |
|
|
642
|
+
| ------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
|
|
643
|
+
| Stereo chorus | A short interpolated delay with offset LFO phases adds width and movement. | Rate 0.3 to 0.8 Hz, depth 0.15 to 0.35, mix 0.08 to 0.2. |
|
|
644
|
+
| Ping-pong delay | Alternating echoes create rhythmic or spatial repeats. | 180 to 350 ms or synced eighths, feedback 0.15 to 0.35, mix 0.08 to 0.18. |
|
|
645
|
+
| Stereo reverb | Damped comb/allpass reflections create a diffuse decay. | Decay 0.8 to 1.8 seconds, damping 0.5 to 0.7, mix 0.08 to 0.18. |
|
|
646
|
+
| Optional saturation | Soft waveshaping adds harmonics and changes attack/timbre. | Drive 1.2 to 1.6 with a small blend; compare at matched levels. |
|
|
645
647
|
|
|
646
648
|
All processors are off initially, with input gain 1. Enable one shared chain through `setMasterProcessing`; select `applyTo` categories such as `music` and `ambience` to keep explosions dry. Per-voice `effectSend` overrides that category selection. [Configuration](advanced-examples.md#chorus-delay-reverb-and-creative-saturation) and [exact ranges](api.md#setmasterprocessingoptions) explain chorus, delay, reverb and optional saturation.
|
|
647
649
|
|
|
648
|
-
Disabling an effect closes its input gradually and drains the tail before exact bypass; it does not immediately erase its history. Panic invalidates histories. Saturation
|
|
650
|
+
Disabling an effect closes its input gradually and drains the tail before exact bypass; it does not immediately erase its history. Panic invalidates histories. Saturation changes the sound and provides no automatic gain protection; the final limiter stays in place. Match dry/wet comparison levels and watch accumulated limiter reduction so a louder version does not win an A/B comparison merely by level. None of these effects makes a small speaker reproduce missing bass.
|
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
# Maintaining the synthesis snapshot
|
|
2
2
|
|
|
3
|
-
These references
|
|
4
|
-
The corrected official documentation is a reviewed working tree based on
|
|
5
|
-
`4a45f21230ffc5a8838fbd5fc108dd3ab470362a`, recorded with its exact fingerprint in
|
|
6
|
-
[source-snapshot.json](source-snapshot.json). The documentation corrections are
|
|
7
|
-
not represented as committed by that base revision. Review date: 2026-10-29.
|
|
3
|
+
These references cover **published module 1.1.0 with public API 1.1.0**. Older 1.0.2 packages retain API 1.0.0 and lack attack variation and finite-tone repetition. All sixteen official Markdown documents were reviewed; fourteen are mirrored into fifteen parts, with explicit index/notices exclusions. The snapshot anchors committed official sources at `ec04f4e634075c41b55f66279eabcd78b9652d58`: official prose corrections remove a stale local-package label and statistics-method count and document the verified native interval edge. Those documentation corrections are committed and pushed to official main; the already published 1.1.0 ZIPs retain their original documentation. Exact source/mirror hashes are in [source-snapshot.json](source-snapshot.json). Review date: 2026-11-02.
|
|
8
4
|
|
|
9
5
|
## Public downloads and artifact provenance
|
|
10
6
|
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
Both public 1.1.0 platform releases target `7cd035409453b01df2736aef56f2316d94ca019c`. Their ZIPs were downloaded on 2026-11-02; SHA-256 matches the GitHub asset digests and full ZIP CRC checks pass. Manifests declare module 1.1.0, minimum Titanium 13.2.0.GA, four Android ABIs and Apple Mac Catalyst support. Packaged `index.d.ts` files match the official source and the bundled [declaration asset](../assets/index.d.ts) byte for byte. Native manifest `apiversion` is separate from JavaScript `apiVersion`. No binary was installed on a device during this update.
|
|
8
|
+
|
|
9
|
+
| Platform | Current public release | Package SHA-256 |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| Android | [android-1.1.0](https://github.com/macCesar/TiSynthEngine/releases/tag/android-1.1.0) | `69dea7daaa8b5dd77f7a3d4d6e6ad801e2a0bd48f9e2c79b9caf584dd56e36eb` |
|
|
12
|
+
| iOS / Mac Catalyst | [ios-1.1.0](https://github.com/macCesar/TiSynthEngine/releases/tag/ios-1.1.0) | `c426fed49d78926f8dd4e176addaebf0cb0fe4592c5eb48c842aef833ad798b4` |
|
|
13
|
+
|
|
14
|
+
### Historical 1.0.2 artifact verification
|
|
15
|
+
|
|
16
|
+
The following replacement packages were downloaded and verified on 2026-10-30 UTC (2026-10-29 locally). Their checks remain historical evidence; they are not the current 1.1.0 downloads.
|
|
13
17
|
|
|
14
18
|
| Platform | Published release | Replacement package SHA-256 |
|
|
15
19
|
| --- | --- | --- |
|
|
16
20
|
| Android | [android-1.0.2](https://github.com/macCesar/TiSynthEngine/releases/tag/android-1.0.2) | `8698104f188782a77699fbd6308a779ca0b190833ceebf398557b628af1b8bbe` |
|
|
17
21
|
| iOS / Mac Catalyst | [ios-1.0.2](https://github.com/macCesar/TiSynthEngine/releases/tag/ios-1.0.2) | `779e77d018d5b3f686d69cb1b4b0162281803ea12691487df565c1fd15175c58` |
|
|
18
22
|
|
|
19
|
-
Both ZIPs passed full CRC checks and
|
|
20
|
-
digests. These hashes replace the original 1.0.2 packages' hashes; filenames and
|
|
23
|
+
Both ZIPs passed full CRC checks and matched the GitHub asset SHA-256 digests at that verification. These hashes replace the original 1.0.2 packages' hashes; filenames and
|
|
21
24
|
release URLs did not change. Manifests report module `ti.synthengine`, version
|
|
22
25
|
`1.0.2`, minimum Titanium `13.2.0.GA`, four Android ABIs and Apple Mac Catalyst
|
|
23
26
|
support. The manifest's native `apiversion` field is distinct from the JavaScript
|
|
24
|
-
contract's `apiVersion: '1.0.0'
|
|
27
|
+
1.0.2 contract's `apiVersion: '1.0.0'`.
|
|
25
28
|
|
|
26
29
|
All eight Android native libraries (inside the AAR) and three Apple static
|
|
27
30
|
libraries match the preserved original 1.0.2 release packages byte for byte.
|
|
@@ -32,15 +35,14 @@ app-root ZIP installation and both `tiapp.xml` declarations.
|
|
|
32
35
|
|
|
33
36
|
## Sources and permitted transformations
|
|
34
37
|
|
|
35
|
-
|
|
36
|
-
ordered examples/advanced-examples split. The current snapshot inventories all
|
|
38
|
+
Fourteen official Markdown documents are mirrored into fifteen parts, including the ordered examples/advanced-examples split. New references preserve the complete [instruments/effects guide](instruments-and-effects.md), [implemented variation contract](native-variation.md), [historical proposal](native-variation-proposal.md) and [variation verification](native-variation-validation.md). The proposal is historical design context, not an outstanding implementation plan. The current snapshot inventories all
|
|
37
39
|
complete JSON reports, bundled example assets and linked raw-evidence archives.
|
|
38
|
-
The
|
|
40
|
+
The historical [performance review](performance-review.json) and its raw archive are
|
|
39
41
|
preserved alongside historical reports; none is replaced by a favorable summary.
|
|
40
42
|
Read snapshot records for exact counts and hashes. Example JavaScript and raw
|
|
41
43
|
reports/archives remain byte-identical to source.
|
|
42
44
|
|
|
43
|
-
Each Markdown part and the example README have a
|
|
45
|
+
Each Markdown part and the example README have a committed-source provenance header and recorded navigation transformations. Verified API, timing, spatial, panic, processing and diagnostic corrections were applied to the official module documentation before synchronization. They are shared source content, not mirror-only errata. Remaining `link_fixes` record navigation and curated entry points; the source hash identifies the exact reviewed official text, including the committed prose corrections. Reversible `link_fixes` rebase links into the split advanced examples, preserve [curated recipes](recipes.md), and resolve current example links to bundled assets. The example README points back to this skill's current API and guides. All three example JavaScript files remain byte-identical to source; none requires a historical GitHub snapshot.
|
|
44
46
|
|
|
45
47
|
The fidelity regression strips provenance/navigation, concatenates example parts, reverses declared transformations and compares the complete source hash. Raw records must remain byte-identical. Update transformations intentionally; never change hashes merely to hide unexplained source drift.
|
|
46
48
|
|
|
@@ -52,7 +54,7 @@ Focused executable recipe tests inspect submitted intervals, envelope lengths, p
|
|
|
52
54
|
|
|
53
55
|
## Current contract and acceptance boundaries
|
|
54
56
|
|
|
55
|
-
`start` configures one engine, up to 32 shared voices and one to four preallocated sequence slots. `playSequence`
|
|
57
|
+
`start` configures one engine, up to 32 shared voices and one to four preallocated sequence slots. `playSequence` schedules scores and returns a positive sequence ID or zero. `repeatTone` preserves the complete finite renderer for one repeating recipe and returns a positive tone ID or zero; its 32 slots are independent of the sequence slots, while admitted attacks share the voice pool. Sequence edits, state queries and cancellation name that ID. Global `setTempo` governs beat timing and synchronized modulation; millisecond sequences retain fixed times. Finite playback is the default, and circular patterns explicitly opt into looping.
|
|
56
58
|
|
|
57
59
|
Selective `music`, `effects`, `ui` and `ambience` categories feed one shared effect chain; an explicit per-voice send overrides category selection. Live spatial position, noise clock, low-pass cutoff and compatible continuous voice controls ramp over 10 ms while preserving history. Priorities protect higher-priority voices without reserved quotas. See the [API](api.md) for exact limits, source compatibility, return values and event delivery.
|
|
58
60
|
|
|
@@ -82,11 +84,10 @@ fixed-gain recommendations target the measured 1–8-voice configuration, with
|
|
|
82
84
|
underrun remains unresolved, including independent silent Oboe reproduction.
|
|
83
85
|
Route-wide latency, Bluetooth and extended maximum-load acceptance remain open.
|
|
84
86
|
|
|
85
|
-
Official corrections
|
|
87
|
+
Official documentation corrections preserve panic cancellation (`stopAll` stops every
|
|
86
88
|
sequence and invalidates effect histories), compatible live `updateVoice`
|
|
87
89
|
noise/low-pass/spatial/send edits, and category selection with `applyTo` plus
|
|
88
|
-
explicit `effectSend` overrides.
|
|
89
|
-
remaining native-backed errata and curated recipe navigation stay reversible.
|
|
90
|
+
explicit `effectSend` overrides. The matching mirror-only errata were removed from the transformation list; curated recipe navigation remains reversible.
|
|
90
91
|
Android and Apple production callback tests now run in CI; the historical Java
|
|
91
92
|
DSP model is not the production audio oracle. No native binaries were installed
|
|
92
93
|
or device/listening tests rerun during this skill update.
|
|
@@ -110,12 +111,10 @@ bypass, memory and strict Frontier presentation criteria. Current evidence and
|
|
|
110
111
|
rejected candidates must not be combined into a general pass. This skill update
|
|
111
112
|
did not rerun devices, install binaries or alter native source.
|
|
112
113
|
|
|
113
|
-
The
|
|
114
|
-
1.0.2 source on October 29. These current differences remain explicit;
|
|
115
|
-
hash fidelity alone cannot establish them:
|
|
114
|
+
The native differences below were rechecked against current sources on November 2 and are now documented accurately in the official API/engine guides as well as the mirrors. They describe implementation differences, not unresolved documentation contradictions:
|
|
116
115
|
|
|
117
|
-
- iOS timed tone/chord command construction
|
|
118
|
-
and release to
|
|
116
|
+
- iOS timed tone/chord command construction initially rounds accepted zero attack
|
|
117
|
+
and release to one sample before duration-budget trimming; Android preserves zero. Validator
|
|
119
118
|
acceptance does not establish identical sample envelopes.
|
|
120
119
|
- iOS early tempo/sequence/processing rejections and incompatible held spatial/
|
|
121
120
|
modulation edits can bypass rejection counters. Android also leaves some
|
|
@@ -124,21 +123,39 @@ hash fidelity alone cannot establish them:
|
|
|
124
123
|
- Sequence cutoff coefficients currently refresh every 16 samples on Android
|
|
125
124
|
and every 8 samples on Apple; both use note length but do not promise identical
|
|
126
125
|
sample output. See [engine details](audio-engine.md).
|
|
127
|
-
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
- Remaining stale official claims are corrected only where verified against
|
|
133
|
-
current native behavior, with exact reversible transformations. Corrections
|
|
134
|
-
already adopted upstream are removed from the transformation list.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
These findings are skill corrections and module implementation findings, not
|
|
138
|
-
native fixes. No module code, public range or hardware acceptance was changed.
|
|
126
|
+
- Published 1.1.0 returns `capabilities.variation: true` and `variationSchemaVersion: 1` on both platforms. Android also reports native sequence/master processing/modulation flags and `limits.stepDurationMs`; iOS omits those additional entries. Published 1.0.2 does not accept variation. Both platforms return sequence-capacity, priority and send limits; use the [API](api.md) for exact beat/millisecond ranges.
|
|
127
|
+
- Official examples now bind their waveform constants and document native sequence modulation, complete effect fidelity and publication ownership correctly. The mirrors preserve the same facts.
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
These are official-documentation and skill corrections, not native implementation fixes. No module code, public range or hardware acceptance was changed.
|
|
139
131
|
A validator corpus establishes accepted/rejected dictionaries, not sample-identical
|
|
140
|
-
rendering on a physical device.
|
|
141
|
-
|
|
132
|
+
rendering on a physical device. Current source-first coverage ledgers and native locators are recorded in the maintainer's November 2 audit evidence.
|
|
133
|
+
|
|
134
|
+
## Published 1.1.0 attack variation
|
|
135
|
+
|
|
136
|
+
Both platforms validate eight bounded parameter ranges and select once per admitted attack. Require the capability/schema pair and omit the property entirely on published 1.0.2, including amount zero. The [variation guide](native-variation.md) preserves exact bounds, linear amount, pitch ratio, source prerequisites, per-chord ordinals, held stability, whole-dictionary step replacement, revision merging and deterministic seed identity. `updateNote` and its deprecated `updateVoice` alias reject the attack dictionary. Preserve all of the authored envelope, cadence, routing and layer gains.
|
|
137
|
+
|
|
138
|
+
The [verification report](native-variation-validation.md) separates initial host/build checks from later consumer installations and scoped listening feedback. It records the 144-byte configuration and four-transport growth from 8,627,712 to 9,537,152 bytes, excluding other engine/bridge/process storage. Earlier 1.0.2 memory reports remain historical. Host callback timings do not prove device overhead or sustained acceptance.
|
|
139
|
+
|
|
140
|
+
The earlier variation audit reran the paired production validators (156 cases per platform). This repetition update ran the focused shared scheduler, Android production renderer, Java bridge, Apple exact-render host and Android tone contract checks, plus official documentation/example and TiTools mirror/recipe checks. New source inspection verified sampling/admission and sequence seed identity. Historical renderer PCM, native build, consumer install and listening results were read with their original boundaries; they were not repeated or expanded into general device acceptance. No native source or binary was changed.
|
|
141
|
+
|
|
142
|
+
All thirteen raw JSON/ZIP records moved upstream from `documentation/` to `docs/validation/` without changing bytes. Their distributed skill paths are preserved; the snapshot now records their actual upstream locations. All five ZIPs passed CRC checks. The three example JavaScript assets remain byte-identical; `app.js` now includes the capability-gated attack-variation action.
|
|
143
|
+
|
|
144
|
+
## Finite-tone repetition and compatibility
|
|
145
|
+
|
|
146
|
+
Read the complete [API](api.md#finite-tone-repetition), [effect fidelity guide](instruments-and-effects.md) and [repetition verification](native-tone-repetition-validation.md). Require `capabilities.toneRepetition === true` and the three repetition methods before enabling controls. `playTone` remains Boolean standalone playback and rejects `intervalMs`; independent event-driven calls and deliberate finite JavaScript bursts are supported, with application-owned timer cleanup. Native repetition provides a sample-clock cadence independent of tempo.
|
|
147
|
+
|
|
148
|
+
`repeatTone` requires integer `intervalMs` 1–60,000. `updateTone` validates partial changes merged with the latest accepted recipe, keeps the next deadline and applies the new interval after that attack. Active voices retain their admitted recipe. `stopTone` cancels future attacks at the next render block, even under ordinary queue saturation, and lets admitted finite voices finish. There is no `toneend`; IDs are never reused over shutdown/start. Global stop and shutdown invalidate repetitions. A positive ID does not guarantee every future attack is admitted; reserve for overlapping finite lifetimes and other sounds.
|
|
149
|
+
|
|
150
|
+
Each repetition retains its own admitted-attack variation stream. A replacement variation dictionary replaces the whole prior dictionary; amount zero disables future variation, seed changes restart the stream, and rejected attacks do not consume a selection. The new report separately records 617,744 Android and 620,048 Apple transport bytes and scoped host measurements; earlier sequence/variation storage and device evidence do not measure repetition overhead.
|
|
151
|
+
|
|
152
|
+
Use `updateNote` for current held-voice edits and `enableStats`/`disableStats` for current diagnostics. `updateVoice` and `setStatsEnabled` remain deprecated compatibility aliases, without scheduled removal or repeated runtime warnings. Older 1.0.2 binaries need method detection and their original aliases; never send new closed-dictionary fields speculatively.
|
|
153
|
+
|
|
154
|
+
### Known native interval edge
|
|
155
|
+
|
|
156
|
+
The documented interval contract requires an integer. Android rejects `intervalMs: 1.0000000001`; the reviewed Apple validator accepts it within its 1e-9 integer tolerance and command conversion truncates it to 1. This was independently reproduced against the production validators. Always submit exact integer milliseconds; do not rely on Apple's acceptance. This native edge remains unresolved: no native source or published binary was changed by the skill update. It is separate from the existing platform zero-envelope and diagnostic differences above.
|
|
157
|
+
|
|
158
|
+
The declaration asset is a byte-identical official aid, not a runtime validator: TypeScript `number` cannot prove finite/integer/range constraints or native state/capacity. Its original candidate comment is preserved as source text, while current release provenance is recorded above. Preserve historical API 1.0.0 wording inside dated variation reports/proposals rather than relabeling their evidence as current acceptance.
|
|
142
159
|
|
|
143
160
|
## Upstream documents outside the mirror set
|
|
144
161
|
|