@maccesar/titools 5.2.5 → 5.3.0
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 +27 -37
- package/agents/ti-pro.md +1 -1
- package/commands/ti-audit.md +1 -1
- package/docs/examples.md +15 -13
- package/package.json +1 -1
- package/skills/ti-synthengine/SKILL.md +62 -111
- package/skills/ti-synthengine/assets/example/README.md +50 -59
- package/skills/ti-synthengine/assets/example/app.js +67 -65
- package/skills/ti-synthengine/assets/example/lib/sequenceOwner.js +39 -40
- package/skills/ti-synthengine/assets/example/lib/soundPreset.js +34 -0
- package/skills/ti-synthengine/assets/index.d.ts +122 -2
- package/skills/ti-synthengine/references/advanced-examples.md +4 -4
- package/skills/ti-synthengine/references/api.md +40 -18
- package/skills/ti-synthengine/references/audio-engine.md +15 -57
- package/skills/ti-synthengine/references/examples.md +63 -6
- package/skills/ti-synthengine/references/guide.md +61 -57
- package/skills/ti-synthengine/references/instruments-and-effects.md +15 -15
- package/skills/ti-synthengine/references/native-variation.md +53 -14
- package/skills/ti-synthengine/references/recipes-interaction.md +25 -20
- package/skills/ti-synthengine/references/recipes.md +19 -16
- package/skills/ti-synthengine/references/recommendations.md +12 -12
- package/skills/ti-synthengine/references/sound-api.md +197 -0
- package/skills/ti-synthengine/references/sound-design.md +7 -7
- package/skills/ti-synthengine/references/source-notes.md +62 -172
- package/skills/ti-synthengine/references/troubleshooting.md +17 -19
- package/skills/ti-synthengine/references/upgrade-2.0.0.md +40 -0
- package/skills/ti-synthengine/references/android-sim80-correction-evidence.zip +0 -0
- package/skills/ti-synthengine/references/android-sim80-correction.json +0 -162
- package/skills/ti-synthengine/references/audio-pipeline-validation.md +0 -19
- package/skills/ti-synthengine/references/bypass-physical-recheck-evidence.zip +0 -0
- package/skills/ti-synthengine/references/frontier-android-evidence.zip +0 -0
- package/skills/ti-synthengine/references/frontier-ipad-evidence.zip +0 -0
- package/skills/ti-synthengine/references/frontier-physical-validation.json +0 -1918
- package/skills/ti-synthengine/references/native-tone-repetition-validation.md +0 -59
- package/skills/ti-synthengine/references/native-variation-proposal.md +0 -182
- package/skills/ti-synthengine/references/native-variation-validation.md +0 -63
- package/skills/ti-synthengine/references/performance-review-evidence.zip +0 -0
- package/skills/ti-synthengine/references/performance-review.json +0 -1146
- package/skills/ti-synthengine/references/physical-validation.json +0 -1457
- package/skills/ti-synthengine/references/source-snapshot.json +0 -542
- package/skills/ti-synthengine/references/stats-performance.json +0 -2992
- package/skills/ti-synthengine/references/stats-performance.md +0 -82
- package/skills/ti-synthengine/references/studio-validation.json +0 -6202
- package/skills/ti-synthengine/references/unified-bypass-performance.json +0 -22425
- package/skills/ti-synthengine/references/unified-validation.json +0 -314
package/README.md
CHANGED
|
@@ -172,7 +172,7 @@ The knowledge index is based on the latest Titanium SDK documentation. If your p
|
|
|
172
172
|
| ti-ui | UI/UX patterns | Complex layouts, ListViews, platform UI |
|
|
173
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
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` |
|
|
175
|
+
| ti-synthengine | Sound design with `ti.synthengine` | TiSynth 2.0 reusable Sound presets, independent playback controls, tones/chords, held notes, native repetitions/patterns, ADSR, FM, filters, binaural positioning, shared effects, variation, TypeScript and troubleshooting |
|
|
176
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
177
|
| ti-api | Complete Titanium API reference | Looking up properties, methods, events |
|
|
178
178
|
| ti-guides | SDK fundamentals | tiapp.xml, Hyperloop, distribution, JDK/Xcode compatibility, release notes |
|
|
@@ -184,7 +184,7 @@ 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 published Android/iOS `ti.synthengine`
|
|
187
|
+
- `ti-synthengine` translates sound requests into checked JavaScript for published Android/iOS `ti.synthengine` 2.0.0. It covers reusable Sound definitions, independent held/repetition/pattern controls, atomic preset edits, temporary overrides, processing units and migration from supported direct methods. Practical references, curated recipes, runnable examples and TypeScript declarations support implementation and troubleshooting.
|
|
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.
|
|
@@ -546,51 +546,41 @@ frequency and pause/audio/input ownership remain application policies.
|
|
|
546
546
|
|
|
547
547
|
### ti-synthengine
|
|
548
548
|
|
|
549
|
-
Sound design
|
|
549
|
+
Sound design with public **TiSynth 2.0.0** for Android and iOS. Create reusable definitions with `createSound()`, then play finite effects, chords, held instruments, native repetitions or patterns. Returned controls own live edits and cancellation; definitions survive engine shutdown/start. Existing direct methods remain supported. Read the [skill entry point](skills/ti-synthengine/SKILL.md), [Sound interface](skills/ti-synthengine/references/sound-api.md) and [upgrade guide](skills/ti-synthengine/references/upgrade-2.0.0.md).
|
|
550
550
|
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
551
|
+
Download [Android 2.0.0](https://github.com/macCesar/TiSynthEngine/releases/tag/android-2.0.0)
|
|
552
|
+
and [iOS 2.0.0](https://github.com/macCesar/TiSynthEngine/releases/tag/ios-2.0.0)
|
|
553
|
+
from [macCesar/TiSynthEngine](https://github.com/macCesar/TiSynthEngine),
|
|
554
554
|
copy the ZIPs into the Titanium app root and follow the [installation guide](skills/ti-synthengine/references/guide.md).
|
|
555
|
-
Requires Titanium SDK 13.2.0.GA+, Android compile
|
|
555
|
+
Requires Titanium SDK 13.2.0.GA+, Android compile API 35+, and iOS 15+; the Apple package includes Mac Catalyst.
|
|
556
556
|
|
|
557
557
|
When it activates:
|
|
558
|
+
|
|
558
559
|
- `tiapp.xml` declares `ti.synthengine`, or code calls `require('ti.synthengine')`
|
|
559
|
-
-
|
|
560
|
-
-
|
|
561
|
-
-
|
|
562
|
-
- Rejected calls, startup glitches, voice/queue diagnostics, render-load measurements or source/artifact compatibility questions
|
|
560
|
+
- UI/game cues, instruments, alarms, chords, percussion, ADSR, sweeps, FM, filters or binaural placement
|
|
561
|
+
- Reusable Sound presets, atomic edits, native repetition/patterns, held-note controls or migration from direct methods
|
|
562
|
+
- Shared effects, routing/sends, native attack variation, gain staging or audio diagnostics
|
|
563
563
|
|
|
564
564
|
Example prompts:
|
|
565
|
+
|
|
565
566
|
```
|
|
566
|
-
"Create
|
|
567
|
-
"Build a playable xylophone
|
|
568
|
-
"
|
|
569
|
-
"Run music and a victory
|
|
570
|
-
"
|
|
571
|
-
"
|
|
572
|
-
"Vary repeated impacts natively on public 1.1.0 and retain a clean fallback on published 1.0.2."
|
|
573
|
-
"Repeat the original swept shot with repeatTone, edit its interval and stop future attacks without truncating sounding shots."
|
|
574
|
-
"Use updateNote and enableStats/disableStats, and check this recipe against the bundled TypeScript declarations."
|
|
567
|
+
"Create one reusable laser Sound and play it at each projectile's position."
|
|
568
|
+
"Build a playable xylophone with independent note controls and touch-cancellation cleanup."
|
|
569
|
+
"Repeat this complete swept shot natively, edit its interval and stop future attacks while sounding shots finish."
|
|
570
|
+
"Run music and a victory pattern independently, then cancel only the victory control."
|
|
571
|
+
"Migrate this app to createSound, getContract().version and setProcessing without changing envelopes or reverb time."
|
|
572
|
+
"Change future preset executions with set(), and update only this playing repetition."
|
|
575
573
|
```
|
|
576
574
|
|
|
577
575
|
Key rules:
|
|
578
|
-
|
|
579
|
-
-
|
|
580
|
-
-
|
|
581
|
-
-
|
|
582
|
-
-
|
|
583
|
-
-
|
|
584
|
-
|
|
585
|
-
-
|
|
586
|
-
- `setTempo` drives beat-based transport and synchronized modulation; millisecond sequences keep fixed timing
|
|
587
|
-
- `bus`/`applyTo` select processed categories; explicit `effectSend` overrides that selection. One shared chain and final limiter remain global
|
|
588
|
-
- Held spatial position, noise clock and one-pole cutoff support compatible 10 ms updates. A stereo voice cannot become spatial through an update
|
|
589
|
-
- Omit both spatial coordinates for stereo; zero coordinates enable binaural center. Do not combine binaural coordinates with stereo pan fields
|
|
590
|
-
- Start after layout, keep one lifecycle owner, handle Boolean acceptance and tone/sequence IDs, release held notes and owned repetitions on cancellation, and shut down during teardown
|
|
591
|
-
- Current platform metadata, zero-envelope and diagnostic differences are documented. Host checks and a short accepted listening scene do not establish complete physical maximum-load acceptance
|
|
592
|
-
|
|
593
|
-
The [retro recipes](skills/ti-synthengine/references/recipes.md) and [interaction/instrument recipes](skills/ti-synthengine/references/recipes-interaction.md) preserve acoustic intent, overlap budgets and cleanup. The [official declarations](skills/ti-synthengine/assets/index.d.ts) provide TypeScript signatures alongside the runtime API. [Repetition validation](skills/ti-synthengine/references/native-tone-repetition-validation.md) separates native checks, transport storage and bounded host measurements from device/listening acceptance. [Source notes](skills/ti-synthengine/references/source-notes.md) identify the reviewed native commit and evidence limits.
|
|
576
|
+
|
|
577
|
+
- Put synthesis/routing in `sound` and pitch/type/timing in `playback`; execution overrides are flat. `set()` validates atomic future revisions and replaces arrays completely.
|
|
578
|
+
- Tone/chord playback returns Boolean acceptance; held, repeat and pattern playback return controls or `false`. Invalid Sound configurations throw descriptive errors. Keep controls with their interaction owners.
|
|
579
|
+
- Finite `duration` includes release. Pattern `interval` and `length` remain separate; repetitions preserve finite-envelope interpretation and use integer millisecond intervals.
|
|
580
|
+
- `setProcessing()` uses milliseconds for delay `time` and reverb `decay`. Direct `setMasterProcessing()` retains its original units. Runtime metadata uses `version`.
|
|
581
|
+
- Preserve grouped chord gains, layer levels, overlap budgets, stereo/spatial rules and native variation bounds. Use one engine owner and clean up notes, controls, listeners and polling during teardown.
|
|
582
|
+
|
|
583
|
+
The [retro recipes](skills/ti-synthengine/references/recipes.md) and [interaction recipes](skills/ti-synthengine/references/recipes-interaction.md) preserve acoustic intent and cleanup. [Instruments and effects](skills/ti-synthengine/references/instruments-and-effects.md) explains complete playback and adaptations. The [TypeScript declarations](skills/ti-synthengine/assets/index.d.ts) complement runtime validation. [Source notes](skills/ti-synthengine/references/source-notes.md) retain practical platform caveats; diagnose performance on the intended device and keep technical measurements separate from listening acceptance.
|
|
594
584
|
|
|
595
585
|
---
|
|
596
586
|
|
|
@@ -903,7 +893,7 @@ This pattern is documented across four bundled TiTools skills: `ti-ui`, `ti-expe
|
|
|
903
893
|
| ti-game | Native 2D Game Workflow | 12 files (API, input, source notes, setup, physics, patterns, recipes, tile maps, debugging, roadmap) |
|
|
904
894
|
| ti-game-assets | Visual and Sound Assets | 10 guides and a manifest example; alpha and contract validation scripts |
|
|
905
895
|
| 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 |
|
|
906
|
-
| ti-synthengine | Native Sound Synthesis |
|
|
896
|
+
| ti-synthengine | Native Sound Synthesis | TiSynth 2.0 Sound interface and migration, native parameter reference, practical sound design/recipes, runnable example and TypeScript declarations |
|
|
907
897
|
| ti-api | Titanium API | 20 references for core/platform APIs and native modules |
|
|
908
898
|
| ti-guides | SDK Fundamentals | 16 references for setup, configuration, CLI and distribution |
|
|
909
899
|
| ti-howtos | Native Integrations | 18 references for platform features and integration workflows |
|
package/agents/ti-pro.md
CHANGED
|
@@ -33,7 +33,7 @@ When invoked, research complex topics by consulting the applicable skills from t
|
|
|
33
33
|
- `ti-ui` - UI/UX patterns, layouts, gestures
|
|
34
34
|
- `ti-game-assets` - Visual and sound asset contracts, raster generation, alpha/export validation, synthesis variants and stereo coordination when assets are involved
|
|
35
35
|
- `ti-game` - Native `ti.game` architecture and API when the module is declared
|
|
36
|
-
- `ti-synthengine` -
|
|
36
|
+
- `ti-synthengine` - TiSynth 2.0 reusable Sound definitions, independent playback controls, direct-method migration, timing/processing units, synthesis and platform caveats when the module is declared or requested
|
|
37
37
|
- `ti-admob-unified` - Official unified advertising/privacy/mediation module contract and provider setup when declared or requested
|
|
38
38
|
- `ti-api`, `ti-guides`, `ti-howtos` - Exact Titanium APIs, SDK fundamentals and native integrations
|
|
39
39
|
- `alloy-guides`, `alloy-howtos` - Alloy MVC, CLI, configuration and compiler workflows when the project is Alloy
|
package/commands/ti-audit.md
CHANGED
|
@@ -23,7 +23,7 @@ Project-type audit:
|
|
|
23
23
|
Native-module audit:
|
|
24
24
|
|
|
25
25
|
10. If the project declares `ti.game`, invoke `ti-game` — check for sprites moved from timers instead of native properties, levels sized from `Ti.Platform.displayCaps` instead of the `resize` event, sprites added one by one instead of in one array, and timers or sounds left running when the window closes.
|
|
26
|
-
11. If the project declares `ti.synthengine`, invoke `ti-synthengine` — check
|
|
26
|
+
11. If the project declares `ti.synthengine`, invoke `ti-synthengine` — check the installed module's `version`, Sound preset structure, flat execution overrides, atomic definition edits, interpretation-specific option/pitch/envelope contracts and error handling. Distinguish finite Boolean acceptance from held/repetition/pattern controls or `false`; verify per-owner release/cancellation, pattern `end` listeners, shutdown invalidation and definition reuse. Check native timing versus JavaScript timers, finite duration versus pattern interval/length, `setProcessing` millisecond units versus direct processing units, shared tempo, category/send selection, variation, overlap/priority budgets and one lifecycle owner. Existing direct methods retain their identifiers/events/return contracts; audit against the path actually used. Consult practical platform caveats and separate runtime measurements from listening acceptance.
|
|
27
27
|
|
|
28
28
|
12. If the project has game art/sound inventories or asset-generation/export workflows, invoke `ti-game-assets` — check contracts per set, master provenance/transparency, protected alpha cleanup, frame/pivot alignment, complete derived exports, parallax layers, sound variants and semantic event bindings. Consult `ti-game` and `ti-synthengine` equally in their applicable domains; do not require module installation or new sounds for an image-only task.
|
|
29
29
|
|
package/docs/examples.md
CHANGED
|
@@ -37,19 +37,21 @@ an audio or advertising module.
|
|
|
37
37
|
|
|
38
38
|
## Native synthesis — ti-synthengine
|
|
39
39
|
|
|
40
|
-
- "Install the public TiSynthEngine
|
|
41
|
-
- "
|
|
42
|
-
- "
|
|
43
|
-
- "
|
|
44
|
-
- "
|
|
45
|
-
- "
|
|
46
|
-
- "
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
40
|
+
- "Install the public TiSynthEngine 2.0.0 Android/iOS packages and start audio after the window layout settles."
|
|
41
|
+
- "Create a reusable laser Sound with flat per-shot pitch and position overrides."
|
|
42
|
+
- "Move a held spatial motor through its note control, then release it on touch cancellation."
|
|
43
|
+
- "Play music and a victory pattern independently; stop only the cue and wait for its end event before replacing it."
|
|
44
|
+
- "Repeat this complete layered effect natively without changing envelopes, sweep timing or gains."
|
|
45
|
+
- "Change a reusable preset with set(), reset an optional leaf with null and keep active executions unchanged."
|
|
46
|
+
- "Migrate playTone and setMasterProcessing to Sound objects and setProcessing, preserving timing and reverb units."
|
|
47
|
+
- "Add bounded native attack variation and diagnose voice pressure with enableStats/disableStats."
|
|
48
|
+
|
|
49
|
+
Use the [synthesis skill](../skills/ti-synthengine/SKILL.md) for checked Sound
|
|
50
|
+
presets, controls, public downloads and TypeScript declarations. Finite events,
|
|
51
|
+
held notes, native repetitions and patterns have distinct returns and cleanup.
|
|
52
|
+
The [upgrade guide](../skills/ti-synthengine/references/upgrade-2.0.0.md) maps
|
|
53
|
+
supported direct methods to the Sound interface and explains `version` metadata
|
|
54
|
+
and processing units.
|
|
53
55
|
|
|
54
56
|
## Advertising — ti-admob-unified
|
|
55
57
|
|
package/package.json
CHANGED
|
@@ -1,140 +1,91 @@
|
|
|
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
|
|
3
|
+
description: "Use when a Titanium app declares ti.synthengine in tiapp.xml, imports require('ti.synthengine'), or needs TiSynth 2.0 createSound presets, play/noteOn controls, native repetitions or patterns, chords, ADSR, sweeps, FM, filters, noise, binaural spatialX/spatialY, attack variation, shared effects, gain staging or audio diagnostics. Also use for migrating direct playback calls to Sound objects, version metadata, processing units, TypeScript declarations and lifecycle cleanup. Not for audio-file decoding, sample streaming or unrelated synthesizers."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# ti.synthengine
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
These references cover **published Android/iOS module 1.1.0 with public API
|
|
11
|
-
1.1.0**, retaining compatibility guidance for published 1.0.2 / API 1.0.0.
|
|
12
|
-
Version 1.1.0 adds native finite-tone repetition, attack variation and the
|
|
13
|
-
recommended held-note/statistics method names. Version 1.0.2 supports the older
|
|
14
|
-
core methods and aliases but lacks repetition and rejects variation options.
|
|
15
|
-
Download matching [Android](https://github.com/macCesar/TiSynthEngine/releases/tag/android-1.1.0)
|
|
16
|
-
and [iOS](https://github.com/macCesar/TiSynthEngine/releases/tag/ios-1.1.0)
|
|
17
|
-
packages from the public [repository](https://github.com/macCesar/TiSynthEngine).
|
|
18
|
-
Read the [guide](references/guide.md) for both platform declarations, rebuilding
|
|
19
|
-
and installation; check the actual methods and feature metadata your app needs.
|
|
20
|
-
The reviewed source commit/state, reversible source/mirror hashes and release
|
|
21
|
-
artifact checksums are recorded in [source-snapshot.json](references/source-snapshot.json)
|
|
22
|
-
and [source notes](references/source-notes.md).
|
|
23
|
-
The current [interactive example](assets/example/README.md) includes both helpers
|
|
24
|
-
and native repetition controls. The bundled [TypeScript declarations](assets/index.d.ts)
|
|
25
|
-
mirror the official module types; read them with the API rather than substituting
|
|
26
|
-
type-checking for runtime acceptance. Earlier development packages reused API
|
|
27
|
-
version strings, so version checks alone do not establish every capability.
|
|
6
|
+
# ti.synthengine: sound design for Titanium
|
|
7
|
+
|
|
8
|
+
Write JavaScript for the requested sound using TiSynth 2.0.0 on Android and iOS. Briefly explain the waveform, envelope, pitch and filter movement, and placement in the user's language. Prefer reusable Sound definitions and independent playback controls for new code. Existing direct methods remain supported. [source: references/sound-api.md] [source: references/upgrade-2.0.0.md]
|
|
28
9
|
|
|
29
10
|
## Required workflow
|
|
30
11
|
|
|
31
|
-
|
|
12
|
+
Before writing or reviewing code, read the reference for the task. Use the Sound contract for new code and the direct API for exact native limits. A property list or TypeScript `number` alone cannot establish which combinations are valid.
|
|
32
13
|
|
|
33
14
|
| Task | Read first |
|
|
34
15
|
| --- | --- |
|
|
35
|
-
|
|
|
36
|
-
|
|
|
37
|
-
|
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
| 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) |
|
|
55
|
-
| 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) |
|
|
56
|
-
|
|
57
|
-
Cite factual guidance with `[source: references/<file>.md]`. If the relevant source cannot be read, prefix the claim with `FROM_MEMORY (unverified):`; do not invent Web Audio or other synthesizer option names.
|
|
58
|
-
|
|
59
|
-
## Response contract
|
|
60
|
-
|
|
61
|
-
Explain the waveform, envelope, pitch/filter motion and stereo choice briefly in the user's language. Include checked initialization if no engine owner exists, followed by focused production code. Comments and controls should explain meaningful sound choices. Obtain constants from the runtime:
|
|
16
|
+
| Create reusable presets; play, hold, repeat, update or stop sounds | [Sound objects](references/sound-api.md) |
|
|
17
|
+
| Migrate existing calls, metadata or processing units | [Upgrade to 2.0](references/upgrade-2.0.0.md) |
|
|
18
|
+
| Install Android/iOS packages, initialize and own the engine | [Guide](references/guide.md) |
|
|
19
|
+
| Check exact fields, ranges, defaults and supported direct methods | [API](references/api.md) |
|
|
20
|
+
| Design a laser, instrument, reward, alarm or game motor | [Sound design](references/sound-design.md), [examples](references/examples.md) |
|
|
21
|
+
| Preserve a complete effect or adapt it into a playable instrument | [Instruments and effects](references/instruments-and-effects.md) |
|
|
22
|
+
| Retro cues, xylophone, memory pads, layered chords and interaction ownership | [Recipes](references/recipes.md), [interaction recipes](references/recipes-interaction.md) |
|
|
23
|
+
| Held movement, native scores, effects and modulation examples | [Advanced examples](references/advanced-examples.md) |
|
|
24
|
+
| Author bounded attack variation, amount, ranges and seeds | [Native variation](references/native-variation.md) |
|
|
25
|
+
| Choose voice capacity, headroom, spatial processing or diagnostics | [Recommendations](references/recommendations.md), [audio engine](references/audio-engine.md) |
|
|
26
|
+
| Diagnose rejection, silence, routes or platform differences | [Troubleshooting](references/troubleshooting.md), [source notes](references/source-notes.md) |
|
|
27
|
+
| Check TypeScript signatures and narrow playback returns | [Declarations](assets/index.d.ts), [Sound objects](references/sound-api.md) |
|
|
28
|
+
| Run the complete interactive example | [Example app](assets/example/README.md) |
|
|
29
|
+
|
|
30
|
+
Cite factual guidance with `[source: references/<file>.md]`. If the required reference cannot be read, mark the claim `FROM_MEMORY (unverified):` and do not invent option names.
|
|
31
|
+
|
|
32
|
+
## First sound
|
|
33
|
+
|
|
34
|
+
Reuse the project's engine owner. If the project has none, start audio after the screen has settled and shut it down when its owner closes. Download matching [Android 2.0.0](https://github.com/macCesar/TiSynthEngine/releases/tag/android-2.0.0) and [iOS 2.0.0](https://github.com/macCesar/TiSynthEngine/releases/tag/ios-2.0.0) packages and follow the guide's installation/rebuild steps. The module requires Titanium SDK 13.2.0.GA+, Android compile API 35+, and iOS 15+. The Apple package includes Mac Catalyst. [source: references/guide.md]
|
|
62
35
|
|
|
63
36
|
```javascript
|
|
64
37
|
const synth = require('ti.synthengine')
|
|
65
|
-
const contract = synth.
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
throw new Error('Audio engine rejected startup')
|
|
38
|
+
const contract = synth.getContract()
|
|
39
|
+
if (!synth.start({ maxVoices: 16, maxSequences: 4,
|
|
40
|
+
mixingProfile: 'conservative', audioSession: 'ambient' })) {
|
|
41
|
+
throw new Error('Audio startup rejected')
|
|
70
42
|
}
|
|
43
|
+
const bell = synth.createSound({
|
|
44
|
+
sound: { waveType: contract.waveTypes.SINE, volume: 0.25, attack: 5, release: 120 },
|
|
45
|
+
playback: { type: 'tone', notes: ['A4'], duration: 400 }
|
|
46
|
+
})
|
|
47
|
+
if (!bell.play()) throw new Error('Bell rejected')
|
|
48
|
+
bell.play({ notes: ['C5'], volume: 0.15 })
|
|
71
49
|
```
|
|
72
50
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
Use `updateNote` for held-note edits and `enableStats()` / `disableStats()` for diagnostics in new 1.1.0 code. `updateVoice` and `setStatsEnabled(Boolean)` remain deprecated equivalent aliases, without repeated warnings or a scheduled removal date. For 1.0.2 compatibility, detect and use its aliases; detect repetition and variation separately before enabling those features. [source: references/api.md]
|
|
76
|
-
|
|
77
|
-
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]
|
|
78
|
-
|
|
79
|
-
## Scheduling contract
|
|
80
|
-
|
|
81
|
-
- `playTone` plays one finite event and returns Boolean acceptance; it rejects `intervalMs`. `playChord` plays one simultaneous atomic chord. Use `repeatTone` for ongoing native repetition of the original finite-tone recipe, `playSequence` for ordered scores, and `noteOn`/`noteOff`/`updateNote` for interaction-owned held voices.
|
|
82
|
-
- Independent gameplay calls and intentionally JavaScript-timed finite bursts remain supported. Keep their Boolean `playTone` returns and cancel app-owned timers on teardown. Native repetition and sequences own their ongoing sample-clock attacks; UI polling does not drive them.
|
|
83
|
-
- `playSequence(options)` returns a positive identifier or `0`. `updateSequence({sequenceId,...changes})`, `stopSequence({sequenceId})` and `setTempo({bpm})` return Boolean acceptance. `getSequenceState({sequenceId})` returns applied revision/position or `null` for unknown/retired IDs. Acceptance can precede callback application.
|
|
84
|
-
- Sequence IDs do not repeat over module lifetime, including shutdown/start. Keep the accepted ID and cancel only the owner's sequence. An accepted stop does not immediately free capacity: coalesce replacement requests and publish the latest complete score after its matching `sequenceend`. A delayed event for an old ID must not change the new owner.
|
|
85
|
-
- `setTempo({bpm})` accepts 20–300, initially 120. It changes on the next block while conserving musical position. Synced delays/LFOs follow this tempo; free controls keep milliseconds/hertz.
|
|
86
|
-
- `timeUnit` is fixed for a sequence: `beats` by default, or `ms`. `stepDuration` defaults to 0.25 beats or 100 ms. `loop` defaults to false; circular Studio patterns explicitly pass true.
|
|
87
|
-
- Up to 512 steps each carry exactly one of MIDI `notes` (12–119), `frequencies`, or `rest:true`. Pitch arrays hold 1–32 values and permit duplicates for unison. Root shaping belongs in `voice`; per-step shaping belongs in `overrides`.
|
|
88
|
-
- Step `duration` changes the interval until the next attack. `gate`, initially 0.8, places release within that effective interval. Explicit `length` replaces gate and may overlap later attacks. Intervals and lengths follow the sequence time unit; ADSR remains in milliseconds without a sequence interval budget. Sweeps reach their target at note length and hold it during release.
|
|
89
|
-
- Swing −0.75…0.75 shifts `swing * min(A,B)` within a pair and preserves its total. Structural edits enter next step; swing next pair. Modes are normal/up/down/updown; rests participate only in normal mode.
|
|
90
|
-
- `sequenceend` carries `{sequenceId,reason:'completed'|'stopped'}` outside audio render. It does not establish audible silence: voice release and effect tails may remain.
|
|
91
|
-
|
|
92
|
-
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]
|
|
93
|
-
|
|
94
|
-
## Native finite-tone repetition
|
|
95
|
-
|
|
96
|
-
Require a present `contract.capabilities` map with `toneRepetition === true` and the presence of `repeatTone`, `updateTone` and `stopTone` before enabling native repetition. Published 1.0.2 lacks it. Keep an existing independent-event path or disable the unavailable control; converting a timed recipe to sequence length/sweeps changes its rendering interpretation. [source: references/api.md] [source: references/instruments-and-effects.md]
|
|
97
|
-
|
|
98
|
-
`repeatTone({intervalMs,...recipe})` requires an integer interval of 1–60,000 ms and returns a positive `toneId` or numeric `0`. It preserves the finite-tone envelope, endpoint sweeps, gain, routes and optional variation. The first attack starts at the first render opportunity; later deadlines preserve fractional samples across blocks and ignore tempo changes. There are 32 repetition slots independent of the 1–4 sequence slots, sharing the configured pool of at most 32 voices. Reserve capacity for overlaps, prior attacks after edits and other owners; publication does not guarantee admission of every future attack.
|
|
99
|
-
|
|
100
|
-
`updateTone({toneId,...changes})` requires a live ID and at least one change. It merges with the last accepted recipe and validates the complete result; `note` and `frequency` replace one another, while supplying both rejects the edit. Invalid edits retain the accepted recipe. Edits affect the next scheduled attack without moving its deadline; the new interval controls the following gap. Sounding attacks retain their original configuration. A supplied variation dictionary replaces the previous dictionary; `{amount:0}` disables future variation. The native stream/counter survives edits unless the seed identity changes. Dropped attacks consume no variation selection and produce no catch-up work.
|
|
101
|
-
|
|
102
|
-
`stopTone({toneId})` returns Boolean acceptance and cancels future attacks at the next block, including before the first attack. Already admitted finite voices finish their original lifetimes. Stop remains publishable when the ordinary command queue is full. Unknown/retired IDs reject edits and stops; IDs never repeat during module lifetime, including shutdown/start. There is no `toneend` event. Retain each layer's ID and cancel it on release, cancellation, preset change, pause and owner close. Global `stopAll`, shutdown and destruction invalidate repetitions and pending edits. [source: references/api.md] [source: references/native-variation.md]
|
|
103
|
-
|
|
104
|
-
## Native attack variation
|
|
105
|
-
|
|
106
|
-
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.
|
|
107
|
-
|
|
108
|
-
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; `updateNote` 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. Use the native sampler for this variation dictionary. Seeds reproduce parameters, not cross-platform noise PCM. [source: references/native-variation.md]
|
|
51
|
+
`getContract().version` and `getDefaults().version` report the installed module version. Use `getContract().waveTypes` for constants and check required capabilities. On iOS, `ambient` respects silent mode and mixes with other apps; the default `playback` session ignores silent mode. [source: references/sound-api.md] [source: references/api.md]
|
|
109
52
|
|
|
110
|
-
##
|
|
53
|
+
## Definitions and executions
|
|
111
54
|
|
|
112
|
-
|
|
55
|
+
- Store synthesis and routing in `sound`; store pitch, type and timing in `playback`. Pitch uses `notes` or `frequencies` arrays. When supplied, tone/held/repetition pitch arrays contain exactly one pitch; chords accept 1 to 32. [source: references/sound-api.md]
|
|
56
|
+
- `createSound()` does not start a voice. `getPreset()` returns a detached copy. Use `Sound.set({ sound, playback })` to recursively merge objects, replace whole arrays and validate the complete change atomically for future executions. `null` removes an optional leaf when the result remains valid. Executions already playing keep their revisions. [source: references/sound-api.md]
|
|
57
|
+
- Pass flat temporary overrides to `play(changes)` and `noteOn(changes)`. These calls reject nested preset dictionaries. Switching between `notes` and `frequencies` replaces the previous pitch source. Supplying both throws. [source: references/sound-api.md]
|
|
58
|
+
- An explicit type on the call takes precedence over the preset's declared type. Otherwise, `steps` selects a pattern, multiple pitches select a chord, and one pitch selects a tone. Repetition and held playback need an explicit type, or `noteOn()` for held execution. A type change does not discard incompatible fields. [source: references/sound-api.md]
|
|
59
|
+
- Invalid Sound configurations throw descriptive errors. Operational rejection returns `false`. Do not silently clamp values or retry malformed recipes. Direct methods retain their own return contracts. [source: references/sound-api.md]
|
|
113
60
|
|
|
114
|
-
|
|
61
|
+
## Playback and ownership
|
|
115
62
|
|
|
116
|
-
|
|
63
|
+
| Interpretation | Accepted result | Owner's responsibility |
|
|
64
|
+
| --- | --- | --- |
|
|
65
|
+
| `tone` / `chord` | `true` | Finite event finishes naturally; no per-event control |
|
|
66
|
+
| `held` / `noteOn()` | Note control | `update()` compatible live fields; `noteOff()` on release/cancel |
|
|
67
|
+
| `repeat` | Repetition control | `update()` future attacks; `stop()` future repetition |
|
|
68
|
+
| `pattern` | Pattern control | `update()`, `getState()`, `stop()`; own its `end` listener |
|
|
117
69
|
|
|
118
|
-
|
|
70
|
+
Every execution can return `false`. Check the result type before calling control methods, and keep each control with the interaction that created it. Shutdown invalidates controls; reusable definitions survive shutdown/start. Use `stopAll()` for global panic. [source: references/sound-api.md]
|
|
119
71
|
|
|
120
|
-
|
|
72
|
+
Release held notes when a touch is cancelled, the app pauses or the owner closes. If release is rejected, follow the guide's bounded retry policy. An accepted release retires the control. Compatible live edits preserve phase and envelope through native 10 ms transitions. Waveform, variation, routing category and attack/release cannot change through live note updates. [source: references/sound-api.md] [source: references/guide.md]
|
|
121
73
|
|
|
122
|
-
`
|
|
74
|
+
Repetitions use the original finite renderer. Their integer `interval` runs from 1 to 60,000 ms, independently of tempo. An update keeps the next deadline; its new interval controls the following gap. `stop()` lets already admitted attacks finish. Patterns use the native clock, with up to 512 steps and 1 to 4 configured slots. Coalesce replacement scores while capacity is occupied and wait for the owned control's `end` event. `{ reason: 'completed' | 'stopped' }` marks transport retirement; release and effect tails may remain audible. [source: references/sound-api.md]
|
|
123
75
|
|
|
124
|
-
##
|
|
76
|
+
## Timing, processing and sound fidelity
|
|
125
77
|
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
-
-
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
-
|
|
132
|
-
- Use noise for impacts/wind, square for retro rewards, triangle for bass/plucks, sine FM for bells/keys, and filtered saw/noise for moving textures. Keep gains modest enough for release overlap and coherent unison. Listen on the actual speaker/headphones before approving timbre.
|
|
78
|
+
- Finite `duration` includes release; ADSR always uses milliseconds. Pattern root/step `interval` controls attack spacing and `length` controls sounding length, in beats or milliseconds according to `timeUnit`. Preserve those distinctions when adapting recipes. [source: references/sound-api.md]
|
|
79
|
+
- `setVolume(number)` and `setTempo(number)` return Boolean acceptance. Tempo ranges from 20 to 300 BPM. `setProcessing()` uses milliseconds for both delay `time` and reverb `decay`; direct `setMasterProcessing()` retains seconds for reverb decay. Never copy its numeric decay unchanged into the new method. [source: references/upgrade-2.0.0.md]
|
|
80
|
+
- `sound.bus` selects `music`, `effects`, `ui` or `ambience`; processing `applyTo` selects categories, and explicit `effectSend` overrides that selection. There is one shared chain. Keep layer gains and grouped chord admission/compensation when translating effects. [source: references/sound-api.md] [source: references/instruments-and-effects.md]
|
|
81
|
+
- One engine shares up to 32 voices. Reserve overlap and release capacity; repeating attacks can be dropped under admission pressure. Higher priorities protect voices without per-category quotas. [source: references/api.md]
|
|
82
|
+
- Omit spatial coordinates for stereo; two zeros still enable binaural center. Spatial coordinates conflict with stereo pan fields. A held voice must start spatially to accept live position changes. Headphone localization varies by listener and spectrum. [source: references/guide.md]
|
|
83
|
+
- Native `sound.variation` samples bounded parameters once per admitted attack. Check capability/schema, source-dependent ranges and seed behavior; seeds reproduce parameter selection, not cross-platform noise PCM. Keep authored timing, envelopes and gains. [source: references/native-variation.md]
|
|
133
84
|
|
|
134
|
-
|
|
85
|
+
## Compatibility and diagnostics
|
|
135
86
|
|
|
136
|
-
|
|
87
|
+
Use [the upgrade guide](references/upgrade-2.0.0.md) when retaining direct `playTone`, `playChord`, `repeatTone`, sequence or positive-ID held methods. Their identifiers, event names and partial-update behavior remain distinct from Sound controls. Older binaries require method/capability detection; 1.0.2 lacks repetition and variation. Never send unsupported closed-dictionary keys, including disabled variation. [source: references/api.md] [source: references/native-variation.md]
|
|
137
88
|
|
|
138
|
-
|
|
89
|
+
Use `enableStats()` / `disableStats()` for optional diagnostics. Poll slowly, clear the owner's timer and keep unavailable readings as `null`. Render load measures callback work relative to its deadline. It does not measure app CPU or establish listening acceptance. Check platform caveats before assuming identical envelopes or rejection counters. Listen on the target speaker/headphones before approving timbre. [source: references/audio-engine.md] [source: references/source-notes.md]
|
|
139
90
|
|
|
140
|
-
Use `ti-game` for native
|
|
91
|
+
Use `ti-game` for native gameplay and `ti-game-assets` for related visual/audio asset preparation.
|