@maccesar/titools 5.2.2 → 5.2.4
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 +87 -83
- package/docs/examples.md +3 -1
- package/package.json +1 -1
- package/skills/ti-game/SKILL.md +2 -0
- package/skills/ti-game/references/source-notes.md +20 -4
- package/skills/ti-synthengine/SKILL.md +26 -7
- package/skills/ti-synthengine/assets/example/README.md +14 -7
- package/skills/ti-synthengine/assets/example/app.js +20 -0
- package/skills/ti-synthengine/references/advanced-examples.md +27 -2
- package/skills/ti-synthengine/references/api.md +238 -227
- package/skills/ti-synthengine/references/audio-engine.md +44 -20
- package/skills/ti-synthengine/references/audio-pipeline-validation.md +19 -0
- package/skills/ti-synthengine/references/examples.md +1 -1
- package/skills/ti-synthengine/references/guide.md +30 -13
- package/skills/ti-synthengine/references/instruments-and-effects.md +157 -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 +283 -0
- package/skills/ti-synthengine/references/recipes.md +1 -2
- package/skills/ti-synthengine/references/recommendations.md +3 -3
- package/skills/ti-synthengine/references/sound-design.md +16 -14
- package/skills/ti-synthengine/references/source-notes.md +75 -37
- package/skills/ti-synthengine/references/source-snapshot.json +203 -192
- package/skills/ti-synthengine/references/stats-performance.md +1 -1
- package/skills/ti-synthengine/references/troubleshooting.md +36 -28
package/README.md
CHANGED
|
@@ -83,15 +83,15 @@ Why NPM?
|
|
|
83
83
|
|
|
84
84
|
### Which option should I use?
|
|
85
85
|
|
|
86
|
-
| | Plugin (Option A)
|
|
87
|
-
| ------------------- |
|
|
88
|
-
| **Claude Code** | Recommended
|
|
89
|
-
| **Gemini CLI** | Not available
|
|
90
|
-
| **Codex CLI** | Not available
|
|
91
|
-
| **Knowledge Index** | Not included
|
|
92
|
-
| **Auto-updates** | Marketplace (opt-in, enable in `/plugin`)
|
|
93
|
-
| **Slash commands** | `/ti-check`, `/ti-new-screen`, `/ti-audit`
|
|
94
|
-
| **Session hook** | Auto-detects Titanium projects (Alloy/Classic, PurgeTSS, `ti.game`, `ti.synthengine`) | Auto-update only
|
|
86
|
+
| | Plugin (Option A) | CLI (Option B) |
|
|
87
|
+
| ------------------- | ------------------------------------------------------------------------------------- | ---------------------------------- |
|
|
88
|
+
| **Claude Code** | Recommended | Supported |
|
|
89
|
+
| **Gemini CLI** | Not available | Supported |
|
|
90
|
+
| **Codex CLI** | Not available | Supported |
|
|
91
|
+
| **Knowledge Index** | Not included | Included (`titools sync`) |
|
|
92
|
+
| **Auto-updates** | Marketplace (opt-in, enable in `/plugin`) | SessionStart hook (daily) |
|
|
93
|
+
| **Slash commands** | `/ti-check`, `/ti-new-screen`, `/ti-audit` | Same three (`~/.claude/commands/`) |
|
|
94
|
+
| **Session hook** | Auto-detects Titanium projects (Alloy/Classic, PurgeTSS, `ti.game`, `ti.synthengine`) | Auto-update only |
|
|
95
95
|
|
|
96
96
|
Having both installed is fine: the CLI detects an enabled marketplace plugin and skips its own skill symlinks and command copies, so nothing shows up twice. `titools doctor` reports which channel is serving Claude Code.
|
|
97
97
|
|
|
@@ -148,11 +148,11 @@ The knowledge index provides always-available context (the documentation map). S
|
|
|
148
148
|
|
|
149
149
|
Together they work like this:
|
|
150
150
|
|
|
151
|
-
| Your Question | Knowledge Index Provides | Skills Activate
|
|
152
|
-
| ------------------------------- | ------------------------------- |
|
|
153
|
-
| "Create a login screen" | Context about project structure | `ti-expert`, `ti-ui`
|
|
154
|
-
| "Optimize ListView performance" | Points to docs location | `ti-ui` reads specific files
|
|
155
|
-
| "Implement push notifications" | API reference paths | `ti-expert`, `ti-howtos`
|
|
151
|
+
| Your Question | Knowledge Index Provides | Skills Activate |
|
|
152
|
+
| ------------------------------- | ------------------------------- | ---------------------------- |
|
|
153
|
+
| "Create a login screen" | Context about project structure | `ti-expert`, `ti-ui` |
|
|
154
|
+
| "Optimize ListView performance" | Points to docs location | `ti-ui` reads specific files |
|
|
155
|
+
| "Implement push notifications" | API reference paths | `ti-expert`, `ti-howtos` |
|
|
156
156
|
|
|
157
157
|
You do not need to explicitly invoke skills. The AI detects when to use them based on your question.
|
|
158
158
|
|
|
@@ -164,27 +164,27 @@ The knowledge index is based on the latest Titanium SDK documentation. If your p
|
|
|
164
164
|
|
|
165
165
|
## Skills overview
|
|
166
166
|
|
|
167
|
-
| Skill
|
|
168
|
-
|
|
|
169
|
-
| ti-reuse-first
|
|
170
|
-
| ti-expert
|
|
171
|
-
| purgetss
|
|
172
|
-
| ti-ui
|
|
173
|
-
| ti-game
|
|
174
|
-
| ti-game-assets
|
|
175
|
-
| ti-synthengine
|
|
176
|
-
| ti-admob-unified | Advertising, privacy and mediation
|
|
177
|
-
| ti-api
|
|
178
|
-
| ti-guides
|
|
179
|
-
| ti-howtos
|
|
180
|
-
| alloy-guides
|
|
181
|
-
| alloy-howtos
|
|
167
|
+
| Skill | Purpose | Best For |
|
|
168
|
+
| ---------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
169
|
+
| ti-reuse-first | Reuse before writing new code | Whether it should exist and what already does it; duplication sweeps |
|
|
170
|
+
| ti-expert | Architecture and implementation | Starting point for most tasks |
|
|
171
|
+
| purgetss | Alloy styling + asset automation | Utility classes; Alloy/Classic branding, images, colors, fonts and modules |
|
|
172
|
+
| ti-ui | UI/UX patterns | Complex layouts, ListViews, platform UI |
|
|
173
|
+
| ti-game | 2D games with the `ti.game` module | Sprites, physics, tile maps, HUDs, camera, focused keyboard/mouse/gamepad actions, Apple Metal/Catalyst |
|
|
174
|
+
| ti-game-assets | Visual and sound assets | Image generation/editing, synthesis variants, stereo placement, alpha cleanup, manifests, parallax and complete exports |
|
|
175
|
+
| ti-synthengine | Sound design with `ti.synthengine` | Tones, chords, retro/UI effects, alarms, sweeps, patterns, ADSR envelopes, resonant filters, FM, detune, binaural positioning, held voices, native sequences, master effects, voice LFOs, engine statistics, bounded attack variation, seeds, instrument/effect fidelity, mixing and troubleshooting |
|
|
176
|
+
| ti-admob-unified | Advertising, privacy and mediation | Official `ti.admob.unified` guides, copy-ready library, banners/fullscreen, UMP/ATT and selected-provider configuration |
|
|
177
|
+
| ti-api | Complete Titanium API reference | Looking up properties, methods, events |
|
|
178
|
+
| ti-guides | SDK fundamentals | tiapp.xml, Hyperloop, distribution, JDK/Xcode compatibility, release notes |
|
|
179
|
+
| ti-howtos | Native feature integration | Location, push, media, platform APIs |
|
|
180
|
+
| alloy-guides | Alloy MVC framework reference | Controllers, models, views, widgets |
|
|
181
|
+
| alloy-howtos | Alloy CLI, configuration, debugging | alloy.jmk, config.json, custom XML tags |
|
|
182
182
|
|
|
183
183
|
Notes:
|
|
184
184
|
- The first eight (`ti-reuse-first`, `ti-expert`, `purgetss`, `ti-ui`, `ti-game`, `ti-game-assets`, `ti-synthengine`, `ti-admob-unified`) are specialist workflow skills reflecting TiTools' Titanium conventions and native-module contracts.
|
|
185
185
|
- `ti-reuse-first` runs before the others. It asks whether a thing needs to exist and what already does it — a search order that stops at the first rung that holds — and sweeps an existing `app/` for near-identical controllers, single-listener events, wrappers around one call, and layout recomputed in JavaScript. It is deliberately two-sided: it says when adding a module or a Widget is the right answer, so the bias does not simply invert.
|
|
186
186
|
- `ti-game` documents the `ti.game` native module (2D sprite engine using OpenGL ES 2.0 on Android and Metal on iPhone, iPad and Mac Catalyst). Its API reference was verified against the module source and records the reviewed upstream commit and fork documentation snapshot; it applies to Alloy and Classic projects alike and does not depend on PurgeTSS.
|
|
187
|
-
- `ti-synthengine` translates sound requests into checked JavaScript for
|
|
187
|
+
- `ti-synthengine` translates sound requests into checked JavaScript for published Android/iOS `ti.synthengine` 1.0.2 and local 1.1.0 candidates (public API 1.0.0). Its nineteen-method contract covers timed/held voices, identified native sequences, global tempo, selective categories/sends, master effects, live spatial/noise/filter controls and diagnostics. Two curated recipe guides cover retro cues and interactive instruments. Complete official-source mirrors, validation reports, bundled examples and raw evidence retain provenance; verified corrections are applied to official source prose before mirroring. The reviewed source commit/worktree, platform differences and scoped listening/performance acceptance are explicit in source notes.
|
|
188
188
|
- `ti-game-assets` treats images and sounds as essential game assets. It coordinates integrated `image_gen` artwork with `ti-synthengine` sound design, variants and stereo placement, and ships Pillow helpers for conservative alpha cleanup and per-world visual/audio manifests.
|
|
189
189
|
- The latter five are documentation-mirror skills, audited against official sources via the internal `titools-skill-auditor`. See [Where the references come from](#where-the-references-come-from).
|
|
190
190
|
- `purgetss` reference files are audited against the official PurgeTSS documentation and against the package source (the CLI and the generated `utilities.tss`), but its workflow conventions are opinionated.
|
|
@@ -195,12 +195,12 @@ Notes:
|
|
|
195
195
|
|
|
196
196
|
The Titanium documentation was rewritten during 2026, and v5.0.0 moved TiTools onto the new sources. No skill, command or flag was renamed and the references answer the same questions. What changed is what they are checked against.
|
|
197
197
|
|
|
198
|
-
| Source
|
|
199
|
-
|
|
200
|
-
| [`tidev/titanium-sdk`](https://github.com/tidev/titanium-sdk) → `apidoc/*.yml`
|
|
201
|
-
| [`tidev/titaniumsdk.com`](https://github.com/tidev/titaniumsdk.com) → `content/docs/` | `ti-guides`, `ti-howtos`, `alloy-guides`, `alloy-howtos` | The rewritten guides, and what [titaniumsdk.com](https://titaniumsdk.com) serves.
|
|
202
|
-
| `tidev/titaniumsdk.com` → `registry/sdk/<version>/`
|
|
203
|
-
| [`tidev/titanium-docs`](https://github.com/tidev/titanium-docs)
|
|
198
|
+
| Source | Feeds | Why it is the one |
|
|
199
|
+
| ------------------------------------------------------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
200
|
+
| [`tidev/titanium-sdk`](https://github.com/tidev/titanium-sdk) → `apidoc/*.yml` | `ti-api` | The API definitions the SDK team edits. Every other copy of the API is compiled from these. |
|
|
201
|
+
| [`tidev/titaniumsdk.com`](https://github.com/tidev/titaniumsdk.com) → `content/docs/` | `ti-guides`, `ti-howtos`, `alloy-guides`, `alloy-howtos` | The rewritten guides, and what [titaniumsdk.com](https://titaniumsdk.com) serves. |
|
|
202
|
+
| `tidev/titaniumsdk.com` → `registry/sdk/<version>/` | `ti-api`, as a cross-check | The API compiled per published release. It answers which version actually shipped an API, which the YAML alone cannot. |
|
|
203
|
+
| [`tidev/titanium-docs`](https://github.com/tidev/titanium-docs) | all five, as an archive | The previous corpus, now frozen. Kept for what the rewrite left out. |
|
|
204
204
|
|
|
205
205
|
### Why the API comes from the SDK
|
|
206
206
|
|
|
@@ -222,12 +222,12 @@ In addition to skills, this repository includes sub-agents for Claude Code. Sub-
|
|
|
222
222
|
|
|
223
223
|
Deep-dive research specialist that can combine the complete 13-skill TiTools catalog.
|
|
224
224
|
|
|
225
|
-
| Aspect | Details
|
|
226
|
-
| ---------------- |
|
|
227
|
-
| Location | `~/.claude/agents/ti-pro.md`
|
|
228
|
-
| Model | Sonnet (comprehensive analysis)
|
|
229
|
-
| Tools | Read, Grep, Glob, Bash
|
|
230
|
-
| Preloaded Skills | All 13 skills registered in `lib/config.js`
|
|
225
|
+
| Aspect | Details |
|
|
226
|
+
| ---------------- | ------------------------------------------- |
|
|
227
|
+
| Location | `~/.claude/agents/ti-pro.md` |
|
|
228
|
+
| Model | Sonnet (comprehensive analysis) |
|
|
229
|
+
| Tools | Read, Grep, Glob, Bash |
|
|
230
|
+
| Preloaded Skills | All 13 skills registered in `lib/config.js` |
|
|
231
231
|
|
|
232
232
|
When to use the agent vs skills:
|
|
233
233
|
|
|
@@ -306,16 +306,16 @@ You do not need to call skills explicitly. The AI reads skill descriptions and l
|
|
|
306
306
|
|
|
307
307
|
All skills include automatic project detection to ensure compatibility:
|
|
308
308
|
|
|
309
|
-
| Skill
|
|
310
|
-
|
|
|
311
|
-
| purgetss
|
|
312
|
-
| ti-reuse-first
|
|
313
|
-
| ti-expert
|
|
314
|
-
| ti-ui
|
|
315
|
-
| ti-game
|
|
316
|
-
| ti-game-assets
|
|
317
|
-
| ti-admob-unified | ti.admob.unified and mediation | Declared core/complement modules or requested ad/privacy/provider integration
|
|
318
|
-
| ti-synthengine
|
|
309
|
+
| Skill | What It Detects | How It Works |
|
|
310
|
+
| ---------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
|
|
311
|
+
| purgetss | PurgeTSS mode and project type | Checks PurgeTSS markers, then separates Alloy utilities from Classic standalone commands |
|
|
312
|
+
| ti-reuse-first | Existing app structure | Searches `app/lib/`, `app/controllers/`, `app/widgets/`, `purgetss/config.cjs` before proposing anything new |
|
|
313
|
+
| ti-expert | Alloy vs Classic | Checks for `app/` (Alloy) vs `Resources/` (Classic) structure |
|
|
314
|
+
| ti-ui | Titanium projects | Checks for `tiapp.xml` (both Alloy and Classic) |
|
|
315
|
+
| ti-game | ti.game module | Checks for `<module>ti.game</module>` in `tiapp.xml` or `require('ti.game')` |
|
|
316
|
+
| ti-game-assets | Game art/sound workflows | Reads asset inventories, generation/export workflows and requested visual or sound assets; no module install required for drawings |
|
|
317
|
+
| ti-admob-unified | ti.admob.unified and mediation | Declared core/complement modules or requested ad/privacy/provider integration |
|
|
318
|
+
| ti-synthengine | ti.synthengine module | Checks for `<module>ti.synthengine</module>` in `tiapp.xml` or `require('ti.synthengine')` |
|
|
319
319
|
|
|
320
320
|
Why this matters:
|
|
321
321
|
- PurgeTSS suggestions are provided when its project markers are detected or the user explicitly requests a standalone command
|
|
@@ -326,14 +326,14 @@ Why this matters:
|
|
|
326
326
|
|
|
327
327
|
`ti-reuse-first` runs first — it decides whether there is anything to build — and `ti-expert` is the architectural starting point for what survives that question. Together they coordinate the rest of the bundled catalog:
|
|
328
328
|
|
|
329
|
-
| Scope
|
|
330
|
-
|
|
|
331
|
-
| Whether to build it at all | `ti-reuse-first`, first
|
|
332
|
-
| Architecture and UI
|
|
333
|
-
| Game assets
|
|
334
|
-
| Native modules
|
|
335
|
-
| Exact SDK/API guidance
|
|
336
|
-
| Alloy MVC and tooling
|
|
329
|
+
| Scope | Skills |
|
|
330
|
+
| -------------------------- | --------------------------------------------------------------------------- |
|
|
331
|
+
| Whether to build it at all | `ti-reuse-first`, first |
|
|
332
|
+
| Architecture and UI | `ti-expert`, `ti-ui`, `purgetss` when configured |
|
|
333
|
+
| Game assets | `ti-game-assets` for visual and sound creation, preparation and integration |
|
|
334
|
+
| Native modules | `ti-game`, `ti-synthengine`, `ti-admob-unified` when declared or requested |
|
|
335
|
+
| Exact SDK/API guidance | `ti-api`, `ti-guides`, `ti-howtos` |
|
|
336
|
+
| Alloy MVC and tooling | `alloy-guides`, `alloy-howtos` for Alloy projects |
|
|
337
337
|
|
|
338
338
|
All thirteen ship with TiTools; no second skill package is required.
|
|
339
339
|
|
|
@@ -546,11 +546,11 @@ frequency and pause/audio/input ownership remain application policies.
|
|
|
546
546
|
|
|
547
547
|
### ti-synthengine
|
|
548
548
|
|
|
549
|
-
Sound design and synthesis with the public native `ti.synthengine` 1.0.
|
|
549
|
+
Sound design and synthesis with the public native `ti.synthengine` 1.0.2 release (public API 1.0.0) for Android and iOS. Local 1.1.0 candidates add capability-gated native per-attack variation while keeping API 1.0.0; they have not been published as releases. Read the [skill entry point](skills/ti-synthengine/SKILL.md) for task routing, exact API references and current source provenance.
|
|
550
550
|
|
|
551
551
|
Public repository: [macCesar/TiSynthEngine](https://github.com/macCesar/TiSynthEngine).
|
|
552
|
-
Download [Android 1.0.
|
|
553
|
-
and [iOS 1.0.
|
|
552
|
+
Download [Android 1.0.2](https://github.com/macCesar/TiSynthEngine/releases/tag/android-1.0.2)
|
|
553
|
+
and [iOS 1.0.2](https://github.com/macCesar/TiSynthEngine/releases/tag/ios-1.0.2),
|
|
554
554
|
copy the ZIPs into the Titanium app root and follow the [installation guide](skills/ti-synthengine/references/guide.md).
|
|
555
555
|
Requires Titanium SDK 13.2.0.GA+, Android compile API35+, and iOS 15+; the Apple package also supports Mac Catalyst.
|
|
556
556
|
|
|
@@ -558,6 +558,7 @@ When it activates:
|
|
|
558
558
|
- `tiapp.xml` declares `ti.synthengine`, or code calls `require('ti.synthengine')`
|
|
559
559
|
- Generated UI/game cues, instruments, alarms, chords, percussion, sweeps or binaural headphone placement
|
|
560
560
|
- Sustained voices, simultaneous native sequences, shared tempo, selective effects/sends, priorities or live voice controls
|
|
561
|
+
- Bounded native attack variation, deterministic seeds, complete effect playback or playable instrument adaptations
|
|
561
562
|
- Rejected calls, startup glitches, voice/queue diagnostics, render-load measurements or source/artifact compatibility questions
|
|
562
563
|
|
|
563
564
|
Example prompts:
|
|
@@ -568,9 +569,12 @@ Example prompts:
|
|
|
568
569
|
"Run music and a victory cue as independent native sequences, then cancel only the cue."
|
|
569
570
|
"Apply reverb to music while keeping UI dry, and change the global tempo."
|
|
570
571
|
"Explain what the Android Sim80 headphone result proves about performance."
|
|
572
|
+
"Vary repeated impacts natively on local 1.1.0 and retain a clean fallback on published 1.0.2."
|
|
571
573
|
```
|
|
572
574
|
|
|
573
575
|
Key rules:
|
|
576
|
+
- Native variation requires both capability and schema announcements; [ranges, seeds and loop behavior](skills/ti-synthengine/references/native-variation.md) are distinct from live edits
|
|
577
|
+
- Preserve complete effects and layer gains when adapting or repeating them; read [instruments and effects](skills/ti-synthengine/references/instruments-and-effects.md)
|
|
574
578
|
- Read constants and exact ranges from the API; strict option dictionaries reject invalid fields or conflicting pitch sources
|
|
575
579
|
- Timed tone/chord `duration` includes release. Native sequence intervals and note lengths are separate; held voices release through their IDs
|
|
576
580
|
- Schedule successive sounds with `playSequence`, retain positive accepted IDs and cancel the owner's sequence. `stopAll()` is global panic
|
|
@@ -736,11 +740,11 @@ Checks: skill directories exist, symlinks are valid (not broken), agent is insta
|
|
|
736
740
|
|
|
737
741
|
It also reports the marketplace plugin's state, which changes what "healthy" means:
|
|
738
742
|
|
|
739
|
-
| Plugin state
|
|
740
|
-
|
|
|
741
|
-
| Enabled
|
|
742
|
-
| Not installed
|
|
743
|
-
| Uninstalled, cache directory left
|
|
743
|
+
| Plugin state | What doctor reports |
|
|
744
|
+
| --------------------------------- | ---------------------------------------------------------------------- |
|
|
745
|
+
| Enabled | Claude Code is served by the plugin — missing mirrors are correct |
|
|
746
|
+
| Not installed | Skills reach Claude Code through npm mirrors — mirrors must be present |
|
|
747
|
+
| Uninstalled, cache directory left | Warns and prints the `rm -rf` that clears the leftover |
|
|
744
748
|
|
|
745
749
|
### titools sync
|
|
746
750
|
|
|
@@ -885,21 +889,21 @@ This pattern is documented across four bundled TiTools skills: `ti-ui`, `ti-expe
|
|
|
885
889
|
|
|
886
890
|
## Skill contents summary
|
|
887
891
|
|
|
888
|
-
| Skill
|
|
889
|
-
|
|
|
890
|
-
| ti-reuse-first
|
|
891
|
-
| ti-expert
|
|
892
|
-
| purgetss
|
|
893
|
-
| ti-ui
|
|
894
|
-
| ti-game
|
|
895
|
-
| ti-game-assets
|
|
896
|
-
| ti-admob-unified | Unified Advertising
|
|
897
|
-
| ti-synthengine
|
|
898
|
-
| ti-api
|
|
899
|
-
| ti-guides
|
|
900
|
-
| ti-howtos
|
|
901
|
-
| alloy-guides
|
|
902
|
-
| alloy-howtos
|
|
892
|
+
| Skill | SKILL.md | References |
|
|
893
|
+
| ---------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
894
|
+
| ti-reuse-first | Reuse Before You Write | 5 files (the ladder, Alloy reuse, indirection, PurgeTSS reuse, diagnostics) |
|
|
895
|
+
| ti-expert | Architecture + Implementation | 27 files (patterns, feedback surfaces, file type association, sharing, testing, security, etc.) |
|
|
896
|
+
| purgetss | Setup + Critical Rules | 39 files (Classic compatibility, grid, animations, icons, class-index, SVG pipeline, etc.) |
|
|
897
|
+
| ti-ui | UI Rules + Platform Diffs | 14 files (layouts, lists, gestures, etc.) |
|
|
898
|
+
| ti-game | Native 2D Game Workflow | 12 files (API, input, source notes, setup, physics, patterns, recipes, tile maps, debugging, roadmap) |
|
|
899
|
+
| ti-game-assets | Visual and Sound Assets | 10 guides and a manifest example; alpha and contract validation scripts |
|
|
900
|
+
| ti-admob-unified | Unified Advertising | 20 Markdown references including production, rewarded interstitial, mediation parity, integration library guidance, provenance and game monetization; source/hash checks and official example assets |
|
|
901
|
+
| ti-synthengine | Native Sound Synthesis | 17 Markdown references (14 official parts, 2 curated recipe guides, maintenance notes), complete validation reports/evidence and a reversible source hash manifest |
|
|
902
|
+
| ti-api | Titanium API | 20 references for core/platform APIs and native modules |
|
|
903
|
+
| ti-guides | SDK Fundamentals | 16 references for setup, configuration, CLI and distribution |
|
|
904
|
+
| ti-howtos | Native Integrations | 18 references for platform features and integration workflows |
|
|
905
|
+
| alloy-guides | Alloy MVC | 11 references for controllers, views, models, styling and widgets |
|
|
906
|
+
| alloy-howtos | Alloy CLI and Debugging | 6 references for commands, configuration and practical workflows |
|
|
903
907
|
|
|
904
908
|
---
|
|
905
909
|
|
package/docs/examples.md
CHANGED
|
@@ -37,8 +37,10 @@ an audio or advertising module.
|
|
|
37
37
|
|
|
38
38
|
## Native synthesis — ti-synthengine
|
|
39
39
|
|
|
40
|
-
- "Install the public TiSynthEngine 1.0.
|
|
40
|
+
- "Install the public TiSynthEngine 1.0.2 Android/iOS packages and start audio after the window layout settles."
|
|
41
41
|
- "Move a held spatial motor, process only music with reverb, and stop one native sequence without cancelling unrelated sounds."
|
|
42
|
+
- "Use native attack variation with local 1.1.0: bounded noise/filter ranges, deterministic seeds and an old-package fallback."
|
|
43
|
+
- "Repeat this complete layered effect natively without changing its envelope, sweep timing or gains."
|
|
42
44
|
|
|
43
45
|
Use the [synthesis skill](../skills/ti-synthengine/SKILL.md) for exact options,
|
|
44
46
|
public downloads and scoped performance evidence. Native sequence scheduling,
|
package/package.json
CHANGED
package/skills/ti-game/SKILL.md
CHANGED
|
@@ -13,6 +13,8 @@ upstream `m1ga/ti.game@88e181c`. Both manifests declare **`1.0.0`** and
|
|
|
13
13
|
minimum Titanium SDK **`13.4.0`**; documented builds use **`13.4.1.GA`**.
|
|
14
14
|
The fork's documentation/build adjustments and upstream engine are recorded
|
|
15
15
|
separately in [references/source-notes.md](references/source-notes.md).
|
|
16
|
+
Upstream PR #39 was merged on **2026-10-29**; current upstream `db11980`
|
|
17
|
+
has the same complete Git tree as the audited `2bf5f82` revision.
|
|
16
18
|
Identify installed artifacts by source commit and ZIP hash; the version alone
|
|
17
19
|
does not prove these capabilities or publication of the fork.
|
|
18
20
|
|
|
@@ -6,17 +6,18 @@ binary or an assertion that a fork build has been published.
|
|
|
6
6
|
## Reviewed sources
|
|
7
7
|
|
|
8
8
|
- Upstream: `m1ga/ti.game@88e181cb85526d8146d0be6e09b2b90c2551baad`.
|
|
9
|
-
|
|
9
|
+
This was the upstream baseline at the October 23 audit. Current upstream
|
|
10
|
+
`main` was rechecked on October 29; see the integration record below.
|
|
10
11
|
- Fork documentation snapshot: `macCesar/ti.game@2bf5f828a3bb8028eed20d6ba27b97dd3aa9a753`
|
|
11
|
-
(`docs/update-current-features`). Its source tree contains the
|
|
12
|
+
(`docs/update-current-features`). Its source tree contains the audited
|
|
12
13
|
upstream engine, not merely the older `3bea2f4` baseline.
|
|
13
|
-
- Fork delta from upstream: README/tutorial/TODO/Apple build documentation,
|
|
14
|
+
- Fork delta from the audited upstream baseline: README/tutorial/TODO/Apple build documentation,
|
|
14
15
|
Xcode SDK selection, Camera example key binding, demo generation and
|
|
15
16
|
example-input regression checks, plus maintainer instructions.
|
|
16
17
|
- The documentation snapshot is the exact head of
|
|
17
18
|
[upstream PR #39](https://github.com/m1ga/ti.game/pull/39), branch
|
|
18
19
|
`docs/update-current-features`. PR metadata and the remote branch both matched
|
|
19
|
-
`2bf5f82`
|
|
20
|
+
`2bf5f82` during the October 23 audit. Its Camera Z/X binding correction and diagnostic
|
|
20
21
|
launcher discovery/SDK/indirect-input fixes were included in this audit.
|
|
21
22
|
- Only `AGENTS.md` was dirty when the audit started; that instruction-file
|
|
22
23
|
edit is not a native/API modification. Audited module documentation and
|
|
@@ -31,6 +32,21 @@ input and renderer implementation where contracts require them. Maintainer
|
|
|
31
32
|
plans, personal project state and issue drafts are excluded from public API
|
|
32
33
|
requirements; they are not additional supported APIs.
|
|
33
34
|
|
|
35
|
+
## Upstream integration verified October 29
|
|
36
|
+
|
|
37
|
+
[PR #39](https://github.com/m1ga/ti.game/pull/39) was merged on
|
|
38
|
+
2026-10-29 at 08:31:11 UTC. Current `m1ga/ti.game` main is merge commit
|
|
39
|
+
`db11980af74b4ff5349df47ec25910486b39d2f4`. Its complete Git tree is identical
|
|
40
|
+
to the audited documentation head `2bf5f828a3bb8028eed20d6ba27b97dd3aa9a753`:
|
|
41
|
+
both resolve to `980fa0433019f31319d0e7cee5a51bdddd5576d3`.
|
|
42
|
+
|
|
43
|
+
The current upstream comparison contains only the merge commit and no file
|
|
44
|
+
differences. The audited Metal/Catalyst, configurable input and documentation
|
|
45
|
+
clarifications are therefore integrated upstream. Keep the original audit pins
|
|
46
|
+
and document fingerprints below; merging changes provenance, not their contents.
|
|
47
|
+
This check does not establish which release/nightly ZIP includes the merge or
|
|
48
|
+
extend any physical-device acceptance.
|
|
49
|
+
|
|
34
50
|
## Source fingerprints
|
|
35
51
|
|
|
36
52
|
SHA-256 of the reviewed committed documents/configuration:
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ti-synthengine
|
|
3
|
-
description: "Use when a Titanium app declares ti.synthengine in tiapp.xml, imports require('ti.synthengine'), or needs generated tones, chords, native sequences, sustained game motors, ADSR, sweeps, FM, resonant filters, noise, binaural spatialX/spatialY, held noteOn/noteOff/updateVoice, shared tempo, selective music/effects/ui/ambience processing, effectSend, priorities, chorus/delay/reverb/saturation, LFOs, sequenceend events, gain staging, statistics or render-load diagnosis. Covers
|
|
3
|
+
description: "Use when a Titanium app declares ti.synthengine in tiapp.xml, imports require('ti.synthengine'), or needs generated tones, chords, native sequences, sustained game motors, ADSR, sweeps, FM, resonant filters, noise, binaural spatialX/spatialY, held noteOn/noteOff/updateVoice, shared tempo, selective music/effects/ui/ambience processing, effectSend, priorities, chorus/delay/reverb/saturation, LFOs, sequenceend events, gain staging, statistics, bounded native per-attack variation, seeds or render-load diagnosis. Covers published Android/iOS 1.0.2 and local 1.1.0 candidates with public API 1.0.0. Not for audio-file decoding, sample streaming or unrelated synthesizers."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# ti.synthengine — native sound synthesis for Titanium
|
|
7
7
|
|
|
8
8
|
Act as an audio engineer and mobile sound designer. Translate the requested sound into acoustically reasoned JavaScript using the exact public contract.
|
|
9
9
|
|
|
10
|
-
These references
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
These references cover **published module 1.0.2 and local 1.1.0 candidates**,
|
|
11
|
+
both with public API 1.0.0. They mirror the corrected official documentation
|
|
12
|
+
at commit `b07c97c762be5905f132cecf33e9d60ea0c21316` (reviewed 2026-11-02).
|
|
13
|
+
Native attack variation requires the local 1.1.0 packages; it is unavailable in
|
|
14
|
+
the public 1.0.2 downloads. Read the [variation guide](references/native-variation.md)
|
|
15
|
+
for both platform declarations, rebuilding and feature detection.
|
|
16
|
+
Download matching [Android](https://github.com/macCesar/TiSynthEngine/releases/tag/android-1.0.2)
|
|
17
|
+
and [iOS](https://github.com/macCesar/TiSynthEngine/releases/tag/ios-1.0.2)
|
|
14
18
|
packages from the public [repository](https://github.com/macCesar/TiSynthEngine).
|
|
15
19
|
Source/mirror hashes are in [source-snapshot.json](references/source-snapshot.json);
|
|
16
20
|
artifact checksums and native findings are in [source notes](references/source-notes.md).
|
|
@@ -28,6 +32,10 @@ Read the relevant references before writing or reviewing code. When updating the
|
|
|
28
32
|
| Any public method, option, default, return value or limit | [API](references/api.md) |
|
|
29
33
|
| Download public releases, install, initialize, own or clean up an engine | [Guide](references/guide.md) |
|
|
30
34
|
| Design an effect, instrument, reward, alarm or game motor | [Sound design](references/sound-design.md), [recipes](references/recipes.md), [examples](references/examples.md) |
|
|
35
|
+
| Complete effect playback, playable adaptations, native repetition, importing layers and audition fidelity | [Instruments and effects](references/instruments-and-effects.md) |
|
|
36
|
+
| Native per-attack variation, ranges, amount, seeds, chords, held starts and loop/revision behavior | [Variation](references/native-variation.md), [API](references/api.md) |
|
|
37
|
+
| Variation memory/callback measurements, package scope and listening follow-up | [Variation verification](references/native-variation-validation.md) |
|
|
38
|
+
| Historical variation design, feasibility and deferred API questions | [Historical proposal](references/native-variation-proposal.md); current behavior comes from the implemented guide |
|
|
31
39
|
| Xylophone, memory pads, layered chords, FM instruments and interaction ownership | [Interaction recipes](references/recipes-interaction.md) |
|
|
32
40
|
| Hold, edit, release or position a sustained voice | [API](references/api.md#noteonoptions), [advanced examples](references/advanced-examples.md#sustained-game-motor) |
|
|
33
41
|
| Schedule simultaneous sequences, tempo, swing, edits and cancellation | [API transport](references/api.md#native-sequence-transport), [advanced examples](references/advanced-examples.md#native-sequence-with-chords-and-edits) |
|
|
@@ -35,6 +43,7 @@ Read the relevant references before writing or reviewing code. When updating the
|
|
|
35
43
|
| Map headphone coordinates and stereo bypass | [Guide](references/guide.md#integrate-binaural-in-a-2d-app), [API](references/api.md) |
|
|
36
44
|
| Interpret gain, clipping, statistics or render performance | [Recommendations](references/recommendations.md), [statistics](references/stats-performance.md), [engine](references/audio-engine.md) |
|
|
37
45
|
| Diagnose rejection, silence, interruptions or glitches | [Troubleshooting](references/troubleshooting.md), [source notes](references/source-notes.md) |
|
|
46
|
+
| Module 1.0.2 output, raw-profile migration, calibration, native CI and startup underrun limits | [Pipeline validation](references/audio-pipeline-validation.md), [engine](references/audio-engine.md), [source notes](references/source-notes.md) |
|
|
38
47
|
| Accepted optimizations, rejected Apple runtime and physical performance limits | [Current performance review](references/performance-review.json), [engine](references/audio-engine.md), [source notes](references/source-notes.md) |
|
|
39
48
|
| Android binaural performance correction and its listening/load limits | [Current Sim80 correction](references/android-sim80-correction.json), [source notes](references/source-notes.md), [unified host validation](references/unified-validation.json), [bypass comparison](references/unified-bypass-performance.json) |
|
|
40
49
|
| Audit provenance and acceptance boundaries | [Snapshot](references/source-snapshot.json), [source notes](references/source-notes.md), [historical Studio report](references/studio-validation.json), [physical evidence](references/physical-validation.json), [Frontier measurements](references/frontier-physical-validation.json) |
|
|
@@ -55,7 +64,7 @@ if (!synth.start({maxVoices: 32, maxSequences: 4,
|
|
|
55
64
|
}
|
|
56
65
|
```
|
|
57
66
|
|
|
58
|
-
|
|
67
|
+
Both local 1.1.0 platforms announce `capabilities.variation === true` and `variationSchemaVersion === 1`; require both before sending `variation`, even for amount zero. Published 1.0.2 does not accept that key. Android also announces native-sequence/processing/modulation flags and `limits.stepDurationMs`; iOS implements those operations without those Android-only metadata entries. Both return the sequence-capacity, priority and send limits. [source: references/api.md] [source: references/native-variation.md]
|
|
59
68
|
|
|
60
69
|
Choose the actual required sequence capacity, 1–4; the snippet's four slots suit games with simultaneous music, effects and cues. One engine and render callback share up to 32 voices. Start after screen layout settles; the owning service/window shuts down on teardown. On iOS, `ambient` respects silent mode and mixes with other apps; `playback` is the default and ignores silent mode. Profile, voice/sequence capacity and session require shutdown before changing them. [source: references/api.md]
|
|
61
70
|
|
|
@@ -73,9 +82,15 @@ Choose the actual required sequence capacity, 1–4; the snippet's four slots su
|
|
|
73
82
|
|
|
74
83
|
Preserve migrated score timing deliberately: a former total envelope of 150 ms with 25 ms release becomes `length:125` in a millisecond sequence, with `release:25`. Keep onset intervals separate. [source: references/api.md]
|
|
75
84
|
|
|
85
|
+
## Native attack variation
|
|
86
|
+
|
|
87
|
+
Variation samples compatible bounded parameters once per admitted attack, preserving authored envelopes, cadence, routes and voice counts. Read all eight source-dependent bounds before constructing ranges. Amount interpolates linearly from the authored value; pitch uses cents. Keep application gain consistent in authored volume and volume-range endpoints.
|
|
88
|
+
|
|
89
|
+
An explicit seed repeats standalone selections; native loops advance their stream across attacks. Chords sample independently by voice ordinal. Sustained voices retain their selection through release; `updateVoice` rejects `variation`. Step dictionaries replace the whole inherited dictionary. Sequence revisions affect future attacks; root omission retains variation, and disabling inherited and explicit-step variation requires appropriate amount-zero replacements. Never add a JavaScript random sampler or note timer. Seeds reproduce parameters, not cross-platform noise PCM. [source: references/native-variation.md]
|
|
90
|
+
|
|
76
91
|
## Voices, routes and continuous controls
|
|
77
92
|
|
|
78
|
-
`bus` selects `music`, `effects` (default), `ui` or `ambience`. `setMasterProcessing({applyTo:[...]})` selects processed categories, initially all four; an empty array selects none. An explicit `effectSend:0…1` overrides the category selection for that voice. There is one shared chorus/delay/reverb/saturation chain. Input gain and master volume remain global. Selected audio receives processing, rejoins dry audio, and passes one final
|
|
93
|
+
`bus` selects `music`, `effects` (default), `ui` or `ambience`. `setMasterProcessing({applyTo:[...]})` selects processed categories, initially all four; an empty array selects none. An explicit `effectSend:0…1` overrides the category selection for that voice. There is one shared chorus/delay/reverb/saturation chain. Input gain and master volume remain global. Selected audio receives processing, rejoins dry audio, and passes one final stereo sample-peak protector. Effects and saturation start disabled. Disable closes input and retains bounded tails up to 30 seconds; panic invalidates histories. [source: references/api.md]
|
|
79
94
|
|
|
80
95
|
Sustained IDs are positive app-owned integers. Release on key up, touch cancellation, pause and teardown. Handle rejected release by retrying twice at 16 ms, then shut down/report if it still fails. These retry timers are lifecycle/error recovery, not a musical clock. Ended/stolen IDs accept edits as no-ops. [source: references/api.md]
|
|
81
96
|
|
|
@@ -83,6 +98,10 @@ Compatible `updateVoice` fields include frequency, volume, vibrato, resonant fil
|
|
|
83
98
|
|
|
84
99
|
`priority:0…3`, initially 0, controls eligible replacement under the shared voice pool. Higher priorities remain protected. Chords are admitted or discarded completely; there are no reserved per-category quotas. Gain is fixed per event, with initial chord compensation. Starting unrelated voices does not normalize earlier voices. [source: references/api.md]
|
|
85
100
|
|
|
101
|
+
Module 1.0.2 retains zero samples at final output: stereo-linked peak protection acts immediately, recovers exponentially with a 100 ms time constant and uses ceilings of 0.85, or 0.70 for `speakerSafe`. These are sample ceilings, not speaker or inter-sample guarantees; overload changes waveform shape. Master volume uses an independent linear 10 ms ramp on both platforms. iOS now applies the documented `raw` gain, so review existing raw mixes when upgrading. Native Android and Apple callback checks run in CI; device latency, listening and extended maximum-load acceptance remain separate. [source: references/audio-pipeline-validation.md]
|
|
102
|
+
|
|
103
|
+
`stopAll()` stops every native sequence, cancels future attacks, fades voices and invalidates effect histories. Use `stopSequence({sequenceId})` for one owner’s sequence. Android closes the engine on root activity destruction; explicit owner teardown remains required. Idle event polling stops when no control work remains and does not schedule musical attacks. [source: references/api.md] [source: references/guide.md] [source: references/audio-engine.md]
|
|
104
|
+
|
|
86
105
|
## Sound and validation rules
|
|
87
106
|
|
|
88
107
|
- Closed option dictionaries reject unknown keys, wrong types, non-finite/out-of-range values and fractional integer fields. Check acceptance at meaningful boundaries; never silently clamp native options.
|
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
> Source snapshot: official TiSynthEngine
|
|
1
|
+
> Source snapshot: official TiSynthEngine documentation at commit `b07c97c762be5905f132cecf33e9d60ea0c21316` (2026-11-02). Published 1.0.2; local 1.1.0 candidates; public API 1.0.0. Upstream `example/README.md` SHA-256: `7906f208b287d31ac400f407f4f3509b7a12041274a4629ab287eea235954518`.
|
|
2
2
|
|
|
3
3
|
# Interactive example
|
|
4
4
|
|
|
5
|
-
The Classic Titanium app in [app.js](app.js) demonstrates the timed sounds, native sequences and statistics with the `sequenceend` event on Android and iOS. It
|
|
5
|
+
The Classic Titanium app in [app.js](app.js) demonstrates the timed sounds, native sequences and statistics with the `sequenceend` event on Android and iOS. It runs with the published 1.0.2 module packages, including binaural and statistics support, or the unpublished local 1.1.0 candidates for native attack variation. Held voices, master processing and voice LFOs have copyable examples in the [advanced documentation](../../references/advanced-examples.md#sustained-game-motor); this reference app does not expose those newer controls. The default engine configuration is 16 voices, `conservative` mixing and the `playback` session; master volume starts at 100% and optional diagnostics start off.
|
|
6
6
|
|
|
7
7
|
## Run it
|
|
8
8
|
|
|
9
9
|
1. Create a Classic Titanium application with Android and/or iOS support. If the app uses Alloy, create a separate Classic test project and leave the Alloy-generated files in place.
|
|
10
|
-
2. Download
|
|
11
|
-
3. Put the archive for each target platform in the test app root.
|
|
10
|
+
2. Download the official [Android 1.0.2](https://github.com/macCesar/TiSynthEngine/releases/tag/android-1.0.2) and [iOS 1.0.2](https://github.com/macCesar/TiSynthEngine/releases/tag/ios-1.0.2) packages, or build the current module source. Source builds now produce local `android/dist/ti.synthengine-android-1.1.0.zip` and `ios/dist/ti.synthengine-iphone-1.1.0.zip` candidates; select version `1.1.0` in both module entries when using them.
|
|
11
|
+
3. Put the archive for each target platform in the test app root. For the published packages, add these entries inside its `tiapp.xml`:
|
|
12
12
|
|
|
13
13
|
```xml
|
|
14
14
|
<modules>
|
|
15
|
-
<module platform="android" version="1.0.
|
|
16
|
-
<module platform="iphone" version="1.0.
|
|
15
|
+
<module platform="android" version="1.0.2">ti.synthengine</module>
|
|
16
|
+
<module platform="iphone" version="1.0.2">ti.synthengine</module>
|
|
17
17
|
</modules>
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
+
For the local candidates, replace both `version="1.0.2"` declarations above with `version="1.1.0"`. They still report public API `1.0.0`; detect variation through both capability/schema announcements. Rebuild and reinstall after switching packages.
|
|
21
|
+
|
|
20
22
|
4. Copy the entire `example/` folder into the test app's `Resources/`, including [app.js](app.js), [sequenceScore.js](lib/sequenceScore.js) and [sequenceOwner.js](lib/sequenceOwner.js). It needs no images or audio files.
|
|
21
23
|
5. Build and run the test app with the Titanium CLI or your existing Titanium launch configuration. Use Titanium SDK 13.2.0.GA or newer, Android compile API 35 or newer, and iOS 15 or newer. See the [module installation guide](../../references/guide.md#install-the-module).
|
|
22
24
|
|
|
@@ -68,7 +70,7 @@ The panel shows active/peak/spatial/tail voices, pending commands, replacements,
|
|
|
68
70
|
|
|
69
71
|
Render load divides callback elapsed time by the audio budget for that block; it does not measure total app CPU. The panel multiplies the native fraction by 100, so a reading of 1.20% means that fraction of the block budget, not 120%.
|
|
70
72
|
|
|
71
|
-
Even with zero voices, the stream renders silent blocks and runs
|
|
73
|
+
The shared final output stage retains zero samples. Master volume changes use a linear 10 ms ramp; overload can audibly change the mix. Even with zero voices, the stream renders silent blocks and runs output protection and any enabled diagnostics. Expect a small, changing baseline. The two decimal places are display formatting and do not guarantee that precision.
|
|
72
74
|
|
|
73
75
|
Compare readings on the same device with the same configuration and load; simulator and phone readings are not equivalent. Android backend metrics are best-effort. This iOS backend has no underrun/buffer/latency measurement, and a clean counter cannot establish sound quality.
|
|
74
76
|
|
|
@@ -82,3 +84,8 @@ node --test tests/example_app_regression.js
|
|
|
82
84
|
```
|
|
83
85
|
|
|
84
86
|
The example regression executes its real action callbacks with simulated Titanium UI/audio boundaries. It covers rejection feedback, placement/bypass, session restart and gain preservation, diagnostic cleanup and close-before-start. It does not render native audio or establish layout, perceived elevation, silent-mode behavior or sound quality. Use the device checklist above, including headphones and an output-route change, before claiming those results.
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
## Native attack variation
|
|
90
|
+
|
|
91
|
+
The **ATTACK VARIATION** button submits the same metal-strike recipe on each press. With `capabilities.variation === true` and `variationSchemaVersion === 1`, the renderer chooses pitch, FM depth and level once per admitted attack. Older packages receive the original recipe without the dictionary. This button uses independent timed events; the [variation guide](../../references/native-variation.md) separately demonstrates sustained ownership and native sequence retriggers. Physical listening acceptance remains separate from host correctness checks.
|
|
@@ -835,6 +835,26 @@ expressiveSection.add(makeAction({
|
|
|
835
835
|
}
|
|
836
836
|
}))
|
|
837
837
|
|
|
838
|
+
// Every press is a fresh native attack. Older packages receive the authored recipe.
|
|
839
|
+
expressiveSection.add(makeAction({
|
|
840
|
+
title: 'ATTACK VARIATION\nMetal strike · native ranges',
|
|
841
|
+
color: COLORS.teal,
|
|
842
|
+
pressedColor: COLORS.tealPressed,
|
|
843
|
+
status: 'Metal strike · a new native selection on each attack',
|
|
844
|
+
onPress: function () {
|
|
845
|
+
var options = { frequency: 620, duration: 180, attack: 1, decay: 65,
|
|
846
|
+
sustain: 0.12, release: 110, waveType: WAVE.SINE,
|
|
847
|
+
fmRatio: 2.7, fmDepth: 3.2, fmDepthEnd: 0.4, volume: 0.3 }
|
|
848
|
+
if (defaults.capabilities && defaults.capabilities.variation === true
|
|
849
|
+
&& defaults.variationSchemaVersion === 1) {
|
|
850
|
+
options.variation = { amount: 1, ranges: {
|
|
851
|
+
volume: [0.291, 0.3], fmDepth: [2.944, 3.456], pitchCents: [-12, 12]
|
|
852
|
+
} }
|
|
853
|
+
}
|
|
854
|
+
return Synth.playTone(options)
|
|
855
|
+
}
|
|
856
|
+
}))
|
|
857
|
+
|
|
838
858
|
var patternEndLabel = makeText('sequenceend: no pattern yet', {
|
|
839
859
|
top: dp(8),
|
|
840
860
|
left: dp(16),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
> Source snapshot: official TiSynthEngine
|
|
1
|
+
> Source snapshot: official TiSynthEngine documentation at commit `b07c97c762be5905f132cecf33e9d60ea0c21316` (2026-11-02). Published 1.0.2; local 1.1.0 candidates; public API 1.0.0. Upstream `documentation/examples.md` SHA-256: `637806516d2804c43427d187a37786cfcf2f0d28758762f01a570ba15194bae3`.
|
|
2
2
|
|
|
3
3
|
## Sustained game motor
|
|
4
4
|
|
|
@@ -147,7 +147,7 @@ function disableVoiceLfos () {
|
|
|
147
147
|
// Later release this ID with the bounded release policy above, or shut down its owner.
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
-
Use `target: 'fmDepth'` only with `WAVE.SINE`; a filter target requires an active filter and PWM requires `WAVE.SQUARE`. Free rates are 0 to 20 Hz; synced subdivisions follow native transport BPM. Depth is normalized, with cutoff/PWM/FM contributions clamped to safe parameter ranges. `modulations: []` disables both slots; omitting the field on update preserves them. Copy the same initial `modulations` array into a sequence's `voice` or a step's `overrides` to modulate transport notes. Timed tones
|
|
150
|
+
Use `target: 'fmDepth'` only with `WAVE.SINE`; a filter target requires an active filter and PWM requires `WAVE.SQUARE`. Free rates are 0 to 20 Hz; synced subdivisions follow native transport BPM. Depth is normalized, with cutoff/PWM/FM contributions clamped to safe parameter ranges. `modulations: []` disables both slots; omitting the field on update preserves them. Copy the same initial `modulations` array into a sequence's `voice` or a step's `overrides` to modulate transport notes. Timed tones and chords do not accept the new array; native sequences accept it in `voice` or step `overrides`.
|
|
151
151
|
|
|
152
152
|
## Measure peaks and limiter reduction
|
|
153
153
|
|
|
@@ -172,3 +172,28 @@ function closeMixMeter () {
|
|
|
172
172
|
```
|
|
173
173
|
|
|
174
174
|
Call `closeMixMeter` when its owner hides or closes. Display unavailable or unmeasured fields as unavailable. Reset deliberately before a comparison. These values measure digital peak protection, not speaker loudness, subjective quality or a guarantee that every audio deadline was met.
|
|
175
|
+
|
|
176
|
+
## Bounded variation for repeated noise impacts
|
|
177
|
+
|
|
178
|
+
The local 1.1.0 packages choose values once per admitted attack. This example keeps the noise source and envelope fixed, varies the initial noise/filter settings, and lets the authored sweep endpoints finish unchanged. Call it through the application's existing effect cadence after normal engine startup.
|
|
179
|
+
|
|
180
|
+
```javascript
|
|
181
|
+
var synth = require('ti.synthengine')
|
|
182
|
+
var contract = synth.getDefaults()
|
|
183
|
+
var impact = {
|
|
184
|
+
waveType: contract.waveTypes.NOISE,
|
|
185
|
+
frequency: 200, duration: 240, attack: 2, release: 170,
|
|
186
|
+
volume: 0.20, noiseRate: 5000, noiseRateEnd: 900,
|
|
187
|
+
filterType: 'lowpass', filterHz: 2800, filterHzEnd: 500, filterQ: 0.8
|
|
188
|
+
}
|
|
189
|
+
if (contract.capabilities && contract.capabilities.variation === true
|
|
190
|
+
&& contract.variationSchemaVersion === 1) {
|
|
191
|
+
impact.variation = {
|
|
192
|
+
amount: 0.6,
|
|
193
|
+
ranges: { noiseRate: [4200, 5800], filterHz: [2400, 3200] }
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
synth.playTone(impact)
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Omit `seed` for successive native selections. An explicit seed repeats the selected parameters of standalone calls. The [variation reference](native-variation.md) includes chord gain, sustained ownership, native loop inheritance and revision examples. Its amount is linear; Studio divides the displayed percentage by 100 to obtain the same value.
|