@maccesar/titools 5.2.3 → 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.
@@ -1,4 +1,4 @@
1
- > Source snapshot: official TiSynthEngine 1.0.2 documentation from reviewed working-tree source based on `4a45f21230ffc5a8838fbd5fc108dd3ab470362a` (2026-10-29). 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.2 documentation from reviewed working-tree source based on `4a45f21230ffc5a8838fbd5fc108dd3ab470362a` (2026-10-29). Upstream `documentation/troubleshooting.md` SHA-256: `e2156e5dea77bda95d9f9305bf2c8c359d54d5832f56062cf2d2ebe6c2b583b9`.
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
 
@@ -65,6 +65,8 @@ modules/android/ti.synthengine/1.0.2/
65
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.
@@ -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).