Llogic Symbolic Granular Recomposition — User Guide

A computational interpretation of Rakhat-Bi Abdyssagin's Llogic/Lsets framework: classifies a source into six timbral-textural categories, writes a classified TextGrid and symbolic Lsets representations, then recomposes selected source regions from a user-defined proposition.

Author: Shai Cohen Affiliation: Department of Music, Bar-Ilan University, Israel Version: 4.3 (2026) License: MIT License Repo: GitHub
Contents:

What this does

Llogic Symbolic Granular Recomposition has two linked roles:

  1. Analysis: divide the source into short windows, classify each window into one of six Llogic-inspired timbral-textural categories, merge the decisions into a gapless partition, create a labelled TextGrid, and print symbolic representations.
  2. Recomposition: treat sufficiently long classified regions as candidate atoms, select atoms according to a symbolic proposition, arrange them, optionally insert silence, shape their edges, and concatenate them with overlap.
Multichannel behavior: Intensity is measured on the original-channel zero-based copy. Pitch and HNR are derived from a mono fold. Recomposition atoms are extracted from the original-channel copy, so stereo and multichannel channel layouts are preserved.

Llogic, Lsets & this implementation

Rakhat-Bi Abdyssagin's Logic of Sound and Silence: Chaos and Order develops formal representations for timbre-texture in contemporary music, including Llogic, Lsets, silence, and sequential representations. Chapter 8 demonstrates sequential Lsets representations with and without pauses and with proportional silence classes.

Important distinction: the Praat script is a computational operationalization inspired by that framework. The book does not define this script's HNR thresholds, intensity threshold, chi rise-rate detector, pitch detector, phi-bridging rule, minimum candidate durations, or recomposition algorithms. Those are implementation choices used to map recorded audio onto the symbolic categories.

The six labels used by the script are:

SymbolInternal labelUser-facing interpretation
ØnullSilence / low-intensity region
ψpsiAiry / low-HNR region
θthetaTonal / strongly harmonic region with F0
χchiPercussive / rapid intensity-rise region
ϕphiVibrational / intermediate-HNR region with F0
ωomegaStructured non-single-pitch candidate: sufficient HNR but no detected F0
The script's omega decision is a heuristic. “HNR ≥ threshold + no detected F0” does not prove that a recorded segment is perceptually or acoustically a multiphonic.

Quick start

  1. Select exactly one Sound object.
  2. Run L-Logic_Symbolic_Granular_Recomposition.praat.
  3. Choose Custom or one of the seven named proposition presets.
  4. For Custom, enter a comma-separated proposition such as psi, phi, theta or ψ, ϕ, θ.
  5. Set the analysis window/step, pitch range and classification thresholds.
  6. Choose cycles, candidate selection, arrangement, gap behavior and atom shaping.
  7. Run the script. It leaves both a classified TextGrid and the recomposed Sound selected in the Objects environment, with the Sound reselected at the end.
Named presets change only the proposition. They do not overwrite thresholds, analysis resolution, pitch range, crossfade, cycles, selection mode, arrangement, gap settings, envelopes or visualization.

Six-category acoustic classifier

Analysis objects

The default form values are:

ParameterDefaultEffective behavior
Win_len0.030 sClamped to at least 0.010 s.
Win_step0.030 sClamped to at least 0.005 s and to no more than Win_len.
Min_pitch100 HzClamped to at least 30 Hz.
Max_pitch_Hz1200 HzMust exceed Min_pitch; if it reaches Nyquist it is reduced to 0.45 × sample rate.
Hnr_psi5 dBLower boundary for phi/omega candidates.
Hnr_theta18 dBMust exceed Hnr_psi.
Int_null25 dBAbsolute Intensity threshold for null.
Chi_rise_dB_per_s267 dB/sStep-independent onset criterion.

Intensity-rise rate

Chi is no longer based on a fixed dB difference between adjacent frames. The script divides the difference by the actual frame step:

intRiseRate = [Intensity(t) - Intensity(t - Win_step)] / Win_step

Classification priority

Every analysis frame receives exactly one label in this order:

1. if Intensity < Int_null: Ø null 2. else if intensityRiseRate >= Chi_rise_dB_per_s: χ chi 3. else if F0 present AND HNR > Hnr_theta: θ theta 4. else if F0 present AND HNR >= Hnr_psi: ϕ phi 5. else if F0 absent AND HNR >= Hnr_psi: ω omega 6. else: ψ psi

The priority matters: a sufficiently quiet frame is null regardless of the other descriptors, and a sufficiently rapid intensity rise becomes chi before HNR/F0 classification is considered.

Merging, phi bridging & true partition

Adjacent labels

Consecutive frames with the same category are first merged into larger regions.

Phi bridging

A short psi or theta region of at most 150 ms is absorbed when it is located between phi regions:

ϕ [ψ or θ, duration <= 0.150 s] ϕ ↓ ϕ

After this absorption, adjacent phi regions are merged again. The rule does not bridge arbitrary categories and does not use acoustic similarity.

Canonical non-overlapping boundaries

If Win_step < Win_len, the raw classification windows overlap. The script therefore converts the merged extents into a true partition. At every label change:

boundary = 0.5 × (leftRawEnd + rightRawStart)

The first region begins at 0 and the final region ends at the source duration. The final classified regions therefore tile the complete source with no overlap or gap, and their durations sum to the source duration.

Silence duration classes

ClassCurrent threshold
Ø(S)duration < 0.15 s
Ø(M)0.15 s ≤ duration < 0.40 s
Ø(L)duration ≥ 0.40 s

Classified TextGrid & symbolic representations

Classified TextGrid

The script creates a one-tier TextGrid named:

<source name>_Llogic_grid

Every canonical region becomes one interval labelled with ψ, θ, χ, ϕ, ω or with Ø(S), Ø(M), Ø(L).

Three printed representations

The Info window also prints:

Lsets: non-null categories in sequential order Lsets ∧ Ø: non-null phrases in parentheses, separated by generic Ø Lsets ∧ Ø(dur): the same phrase structure with Ø(S), Ø(M), Ø(L)

Example structure:

Lsets: ψ θ ϕ χ Lsets ∧ Ø: (ψ θ) Ø (ϕ χ) Lsets ∧ Ø(dur): (ψ θ) Ø(M) (ϕ χ)

The script additionally reports category counts, occupied duration and percentage, a duration-ranked dominance string, and an LPC-style expression listing which categories are present.

Dominance means occupied duration. A category containing many tiny segments does not automatically outrank one long sustained region.

Candidate pool

Recomposition candidates are taken directly from the final non-overlapping classified partition. Each candidate retains the original source channel count.

CategoryMinimum candidate duration
χ chiWin_step
ω omegaWin_step
Ø null50 ms
ψ psi100 ms
ϕ phi100 ms
θ theta100 ms

The complete candidate pool is limited to 5000 regions. For proposition selection, candidates of each requested symbol are ranked longest-first; only the 50 longest are addressable by Rotate or Random selection.

Proposition parsing & candidate selection

Accepted symbols

The proposition is comma-separated and can use English names or Llogic glyphs:

null or Ø psi or ψ theta or θ chi or χ phi or ϕ or φ omega or ω

Leading/trailing spaces are removed. Unknown symbols stop the script rather than being ignored. A proposition may contain at most 50 symbols.

Selection modes

ModeExact behavior
Longest onlyUse the longest candidate of the requested category in every cycle.
Rotate through candidatesCycle 1 uses rank 1, cycle 2 rank 2, and so on, wrapping within the available top-50 candidates.
Random each cycleChoose a random rank from the available top-50 candidates for every proposition position and cycle.
In Rotate mode, the rank depends on the cycle number. Repeated occurrences of the same symbol inside one cycle therefore select the same rank for that category.

If one requested category has no candidate, the script prints a warning and that proposition position is omitted from the rendered sequence. It does not substitute a different category.

Cycles & arrangement modes

Cycles is validated to 1–100. One candidate atom is selected for every available proposition position in every cycle; the arrangement is then applied separately to each cycle.

ModeFor proposition A B CExact behavior
LinearA B CKeep proposition order.
RetrogradeC B AReverse the symbol order inside every cycle.
PalindromeA B C B AForward, then reverse without repeating the turning-point atom C.
AccumulationA | A B | A B CConcatenate prefixes of increasing length.
StutterA A A B B B C C CRepeat each selected atom three times.
Scattere.g. B C AFisher–Yates permutation of proposition positions, independently for every cycle.

Repeated uses created by Palindrome, Accumulation or Stutter are rendered as fresh Sound copies, so the same selected atom can appear multiple times in the output timeline.

Gaps, atom envelopes & crossfades

Atom extraction

Candidate atoms are extracted from the zero-based, original-channel source with a rectangular extraction window.

Optional atom shaping

When Shape_atoms is enabled, the script applies Praat fade-in and fade-out to every atom. Defaults are 20 ms in and 40 ms out. If the two requested fades together exceed 90% of that atom's duration, they are replaced by:

fadeIn = 0.40 × atomDuration fadeOut = 0.40 × atomDuration

Global crossfade

One overlap duration is used for every concatenation join:

safeCrossfade = min(Crossfade, 0.45 × shortestAtomDuration)

A requested value of 0 produces ordinary butt concatenation.

Gap modes

ModeIntended atom-to-atom silence after atom i
NoneNo inserted silence object.
FixedGap_base
GrowingGap_base × [1 + 0.3(i−1)]
ShrinkingGap_base / [1 + 0.3(i−1)]
Randomuniformly from 0.5 × Gap_base to 1.5 × Gap_base

Because every inserted silence object participates in two overlap joins, its created duration is:

renderedSilenceDuration = intendedGap + 2 × safeCrossfade

This compensates for the two overlaps so that Gap_base describes the audible atom-to-atom separation, rather than the raw silence-object length.

There is no final peak normalization or limiter. Atom amplitudes come from the source, modified only by optional edge fades and overlap assembly. Overlapping joins can therefore change the output peak.

Seven proposition presets

PresetProposition written by the preset
Breath to Tonepsi, phi, theta
Tonal Phrasetheta, phi, theta
Dissolutiontheta, phi, psi, null
Silence Arcnull, psi, theta, psi, null
Dense Texturechi, theta, phi, theta, chi
Void Meditationnull, omega, null
Full Llogic Arcnull, psi, phi, theta, chi, omega, phi, psi, null
These are symbol-sequence presets, not complete processing presets. All other form fields remain exactly as entered by the user.

Visualization

The v4.3 Picture view follows the analysis-to-recomposition path:

  1. Classified source: unnormalized mono display copy with category-colored background regions. The mono display follows the same channel-fold decision used for HNR/Pitch analysis.
  2. Harmonicity cue: neutral HNR trace over background zones separated by Hnr_psi and Hnr_theta. The panel is one cue in the classifier; it is not the complete category decision by itself.
  3. Intensity / onset cue: neutral Intensity trace, null threshold and reminder that rapid rises can produce chi.
  4. Lsets distribution: one proportional bar whose widths are the actual occupied source durations of the six categories.
  5. Symbolic recomposition map: the actual atom/gap objects on the rendered output timeline, including crossfade overlap. Inserted compositional gaps are drawn differently from semantic Ø/null regions.
  6. Summary: detected Lsets string, duration-ranked dominance, requested proposition, rendered atom count, arrangement, output duration and channel count.
  7. Legend: one consistent color identity for Ø, ψ, ϕ, θ, χ and ω.
The current visualization does not present the recomposed output as a waveform panel. Its final process view is the symbolic recomposition map.

Outputs & limits

Objects left by the script

ObjectNameContent
TextGrid<source>_Llogic_gridOne gapless labelled interval tier covering the source duration.
Sound<source>_Llogic_resultRecomposed proposition result; original channel count preserved.

The recomposed Sound is reselected and played automatically. There is no Play_result checkbox in v4.3.

Important limits

Further reading

The primary theoretical source for the terminology used by this tool is:

The book's set-theoretic formalization introduces Llogic/Lsets as complementary ways of representing timbral-textural structure, and Chapter 8 contains sequential Lsets examples with generic and duration-classified silence. The acoustic thresholds and recomposition algorithms documented above belong to the Praat implementation, not to the book.