@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.
Files changed (25) hide show
  1. package/README.md +87 -83
  2. package/docs/examples.md +3 -1
  3. package/package.json +1 -1
  4. package/skills/ti-game/SKILL.md +2 -0
  5. package/skills/ti-game/references/source-notes.md +20 -4
  6. package/skills/ti-synthengine/SKILL.md +26 -7
  7. package/skills/ti-synthengine/assets/example/README.md +14 -7
  8. package/skills/ti-synthengine/assets/example/app.js +20 -0
  9. package/skills/ti-synthengine/references/advanced-examples.md +27 -2
  10. package/skills/ti-synthengine/references/api.md +238 -227
  11. package/skills/ti-synthengine/references/audio-engine.md +44 -20
  12. package/skills/ti-synthengine/references/audio-pipeline-validation.md +19 -0
  13. package/skills/ti-synthengine/references/examples.md +1 -1
  14. package/skills/ti-synthengine/references/guide.md +30 -13
  15. package/skills/ti-synthengine/references/instruments-and-effects.md +157 -0
  16. package/skills/ti-synthengine/references/native-variation-proposal.md +182 -0
  17. package/skills/ti-synthengine/references/native-variation-validation.md +63 -0
  18. package/skills/ti-synthengine/references/native-variation.md +283 -0
  19. package/skills/ti-synthengine/references/recipes.md +1 -2
  20. package/skills/ti-synthengine/references/recommendations.md +3 -3
  21. package/skills/ti-synthengine/references/sound-design.md +16 -14
  22. package/skills/ti-synthengine/references/source-notes.md +75 -37
  23. package/skills/ti-synthengine/references/source-snapshot.json +203 -192
  24. package/skills/ti-synthengine/references/stats-performance.md +1 -1
  25. package/skills/ti-synthengine/references/troubleshooting.md +36 -28
@@ -1,4 +1,4 @@
1
- > Source snapshot: official TiSynthEngine 1.0.0 documentation at release source commit `e7cbbe8a6f9ab38088fd8029c7b43cef6501101f` (2026-10-24). Upstream `documentation/stats-performance.md` SHA-256: `3d6d35b9e0e49a778777d406418eaba04ebd57da871a322da28fae0190c5cb17`.
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/stats-performance.md` SHA-256: `085142b6ade7b4f7b5965f6a638f967fdceba5ab1f26fb85e8cb496d5b886b6a`.
2
2
 
3
3
  # Statistics host comparison
4
4
 
@@ -1,8 +1,8 @@
1
- > Source snapshot: official TiSynthEngine 1.0.0 documentation at release source commit `e7cbbe8a6f9ab38088fd8029c7b43cef6501101f` (2026-10-24). Upstream `documentation/troubleshooting.md` SHA-256: `939960cde5860569699916208c0d3b352e60ba2a7603b5046dcefa9970294b70`.
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/troubleshooting.md` SHA-256: `bf70a08eee09033b5aaa8cf18b9ef97392f4e6ee318c595ef433a31e6baa33b8`.
2
2
 
3
3
  # Troubleshooting
4
4
 
5
- Start with the Boolean returned by the call and the native log. Most silent requests are contract rejections, a stale binary or an engine that never started.
5
+ Start with the method's documented return value and the native log. Most silent requests are contract rejections, a stale binary or an engine that never started.
6
6
 
7
7
  ## A call returns `false`
8
8
 
@@ -16,26 +16,26 @@ Always check the return value: `playSequence` rejects with 0, while Boolean meth
16
16
 
17
17
  Common fixes:
18
18
 
19
- | Reason | Check |
20
- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
21
- | `unsupported_option` | Remove or correct the named key. Every options object is strict. |
22
- | `invalid_step_type` | Make every pattern step an object, not a number or string. |
23
- | `conflicting_pitch_fields` | Timed/held calls use mutually exclusive `note`/`frequency`; each sequence step uses exactly one `notes` array, `frequencies` array or `rest: true`. |
24
- | `missing_pitch_or_rest` | Add one pitch field or an explicit rest. |
25
- | `out_of_range` | Compare the value with `getDefaults().limits`. |
26
- | `not_integer` | Use integer milliseconds for timed tone/chord envelope fields and integer waveform values; native sequence intervals and lengths may be fractional. |
27
- | `invalid_note` | Check spelling, accidental case and octave. |
28
- | `invalid_sample_count` | Supply 2 to 64 values in `waveTable`. |
29
- | `unsupported_value` | Use `none`, `lowpass`, `highpass` or `bandpass` for `filterType`. |
30
- | `sustain_without_decay` | Add a `decay` greater than 0, or remove `sustain`. |
31
- | `decay_exceeds_remaining_duration` | Shorten `attack` or `decay`, or lengthen `duration`. The default attack counts. |
32
- | `filter_type_required` | Set `filterType` to a filter, or remove `filterHz`, `filterHzEnd` and `filterQ`. |
33
- | `fm_requires_sine` | Use `SINE` for FM, or set `fmDepth` to 0 and remove `fmDepthEnd`. |
34
- | `fm_depth_required` | Set `fmDepth` or `fmDepthEnd`, or remove `fmRatio`. |
35
- | `conflicting_spatial_fields` | Remove `pan`, `panEnd`, `pans` and `panSpread` whenever sending `spatialX` or `spatialY`; check pattern root and steps. |
36
- | `too_many_values` | Pass no more `pans` or `detunes` than the chord has pitches. |
37
- | `missing_required` with `waveTable` | Add a table whenever `waveType` is `WAVETABLE`. |
38
- | envelope reason | Make attack and release fit inside total duration. |
19
+ | Reason | Check |
20
+ | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
21
+ | `unsupported_option` | Remove or correct the named key. Every options object is strict. |
22
+ | `invalid_step_type` | Make every pattern step an object, not a number or string. |
23
+ | `conflicting_pitch_fields` | Timed/held calls use mutually exclusive `note`/`frequency`; each sequence step uses exactly one `notes` array, `frequencies` array or `rest: true`. |
24
+ | `missing_pitch_or_rest` | Add one pitch field or an explicit rest. |
25
+ | `out_of_range` | Compare the value with `getDefaults().limits`. |
26
+ | `not_integer` | Use integer milliseconds for timed tone/chord envelope fields and integer waveform values; native sequence intervals and lengths may be fractional. |
27
+ | `invalid_note` | Check spelling, accidental case and octave. |
28
+ | `invalid_sample_count` | Supply 2 to 64 values in `waveTable`. |
29
+ | `unsupported_value` | Use `none`, `lowpass`, `highpass` or `bandpass` for `filterType`. |
30
+ | `sustain_without_decay` | Add a `decay` greater than 0, or remove `sustain`. |
31
+ | `decay_exceeds_remaining_duration` | Shorten `attack` or `decay`, or lengthen `duration`. The default attack counts. |
32
+ | `filter_type_required` | Set `filterType` to a filter, or remove `filterHz`, `filterHzEnd` and `filterQ`. |
33
+ | `fm_requires_sine` | Use `SINE` for FM, or set `fmDepth` to 0 and remove `fmDepthEnd`. |
34
+ | `fm_depth_required` | Set `fmDepth` or `fmDepthEnd`, or remove `fmRatio`. |
35
+ | `conflicting_spatial_fields` | Remove `pan`, `panEnd`, `pans` and `panSpread` whenever sending `spatialX` or `spatialY`; check pattern root and steps. |
36
+ | `too_many_values` | Pass no more `pans` or `detunes` than the chord has pitches. |
37
+ | `missing_required` with `waveTable` | Add a table whenever `waveType` is `WAVETABLE`. |
38
+ | envelope reason | Make attack and release fit inside total duration. |
39
39
 
40
40
  Warnings are deduplicated by method, key and reason. Repeating the same bad call may return `false` without printing a new line each time.
41
41
 
@@ -58,13 +58,15 @@ if (actual !== '1.0.0') {
58
58
  }
59
59
  ```
60
60
 
61
- Confirm both entries in `tiapp.xml` pin 1.0.0. Then remove the application's build output and rebuild so Titanium does not reuse an archive from an earlier build. The module directories should be:
61
+ `apiVersion` describes the unchanged 1.0.0 API contract; it is not the module package version. Confirm both entries in `tiapp.xml` pin module version 1.0.2. Then remove the application's build output and rebuild so Titanium does not reuse an archive from an earlier build. The module directories should be:
62
62
 
63
63
  ```text
64
- modules/android/ti.synthengine/1.0.0/
65
- modules/iphone/ti.synthengine/1.0.0/
64
+ modules/android/ti.synthengine/1.0.2/
65
+ modules/iphone/ti.synthengine/1.0.2/
66
66
  ```
67
67
 
68
+ When testing local native-variation candidates, select module version `1.1.0` for both platforms instead; the corresponding directories end in `/1.1.0/`. The candidates are unpublished and still report API `1.0.0`. Check the capability/schema pair before using variation.
69
+
68
70
  For binaural, also inspect `getDefaults().limits.spatialX` and `.spatialY`. Use the official packages to avoid stale development binaries. Copying the package does not update an already installed app: rebuild and reinstall it.
69
71
 
70
72
  ## Binaural does not change the position
@@ -110,7 +112,7 @@ If startup remains noisy, temporarily remove other launch work and increase the
110
112
  Check these in order:
111
113
 
112
114
  1. `start()` returned `true`.
113
- 2. The tone, chord or pattern call returned `true`.
115
+ 2. A timed tone/chord or held-note call returned `true`, or `playSequence` returned a positive sequence ID.
114
116
  3. Master and event `volume` are above zero.
115
117
  4. The device media volume is up and the expected route is selected.
116
118
  5. `shutdown()` was not called by another owner.
@@ -166,7 +168,7 @@ If later sounds remain silent, capture the Android or Xcode log around the route
166
168
  - Confirm the deployment target is iOS 15 or newer.
167
169
  - Check whether another module changes `AVAudioSession` after startup.
168
170
  - Test interruptions, phone calls, Bluetooth and route changes on hardware.
169
- - Use the matching device or simulator slice from the 1.0.0 archive.
171
+ - Use the matching device or simulator slice from the 1.0.2 archive.
170
172
 
171
173
  ## What to include in a bug report
172
174
 
@@ -178,7 +180,7 @@ The official release reports API version 1.0.0. Detect `noteOn`/`noteOff`/`updat
178
180
 
179
181
  ## A held voice does not release or update
180
182
 
181
- Use the original positive `voiceId`, not the pitch or an ID that has already been reused. `noteOn` does not accept `duration` or temporal `*End` fields. Source, filter type, table, quantization and ADSR require a new attack. Compatible `updateVoice` controls include live noise clock, one-pole cutoff, spatial position for a spatial voice, stereo pan for a stereo voice, modulation and explicit effect send, in addition to pitch/volume/filter/vibrato/FM/pulse targets. Changed continuous controls ramp for 10 ms while retaining phase, envelope and spatial history; `noiseRate: 0` means white noise and `lowPassHz: 0` bypasses that filter.
183
+ Use the original positive `voiceId`, not the pitch or an ID that has already been reused. `noteOn` does not accept `duration` or temporal `*End` fields. `updateVoice` cannot change source, filter type, table, quantization, ADSR or stereo-versus-spatial mode; restart with a new ID when those attack-time settings must change. Noise clock, one-pole cutoff, effect send and compatible stereo/spatial position support live edits. Changed continuous parameters ramp for 10 ms.
182
184
 
183
185
  Check Boolean returns. A full public queue can reject `noteOff`; retry twice at 16 ms outside render, then shut down/report if still rejected. Cancel those retries on owner teardown. The [held motor example](advanced-examples.md#sustained-game-motor) implements this policy. Touch cancellation, pause and close need cleanup as well as normal key up.
184
186
 
@@ -205,3 +207,9 @@ If accumulated attenuation remains near zero, investigate phase cancellation bet
205
207
  `WAVETABLE` repeats the supplied values using a stepped lookup. A short table can sound grainy or buzzy even when its values describe a sine wave and `bitDepth` is 0. Its harmonic character changes with pitch and filtering; this does not require reverb, an LFO or creative saturation to be enabled.
206
208
 
207
209
  Compare one note with `SINE`, at a comfortable matched level, to distinguish the source's texture from the combined sound of overlapping notes. Read `preLimiterPeakDb` and `maxLimiterReductionDb` with diagnostics enabled to investigate mix headroom. No limiter reduction does not prove that the physical speaker, headphones or output processing are clean. Keep a subjective listening observation separate from a confirmed clipping or buffer-loss diagnosis.
210
+
211
+ ## A variation dictionary is rejected or repeats the same sound
212
+
213
+ Check both `capabilities.variation === true` and `variationSchemaVersion === 1` before sending the property. Published 1.0.2 packages reject it. Source restrictions and range ordering still apply at amount zero; near the frequency ceiling, validate tuning, detune, every chord pitch and active pitch endpoints together.
214
+
215
+ Repeated standalone calls with one explicit seed reproduce the selected parameters. Omit it for independent selections, or use a native sequence to retain an advancing stream across loops. A held voice samples only at attack, and `updateVoice` rejects `variation`. For a running sequence, clear an inherited root dictionary with a valid amount-zero replacement; omitting it from a revision retains the merged value. See the [complete examples and rules](native-variation.md).