<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel rdf:about="https://community.wolfram.com">
    <title>Community RSS Feed</title>
    <link>https://community.wolfram.com</link>
    <description>RSS Feed for Wolfram Community showing any discussions tagged with Signal Processing sorted by active.</description>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3729239" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3725403" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3715438" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2187926" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3713462" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3710670" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3710411" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3674222" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3673172" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3660024" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3646965" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3641062" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3589102" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3580921" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/2527035" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3572151" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3553666" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3551641" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/1383630" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3502721" />
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3729239">
    <title>Informational Metabolics in a Dual-Phase Cellular Automaton</title>
    <link>https://community.wolfram.com/groups/-/m/t/3729239</link>
    <description># Informational Metabolics in a Dual-Phase Cellular Automaton: Verifiable Delay Functions, 4x21 Geometric Confinement, and the Algorithmic Exhaust of Observation&#xD;
&#xD;
### Author’s Prologue: A Path to Cellular Automata&#xD;
&#xD;
Before diving into the mechanics of Linked Digital Dynamics (LDD), I want to briefly share the context of this work. My background did not begin in theoretical physics; it began in the social sciences. I was studying the emergent behaviors of complex networks and agents, which eventually required me to move under increasing confinement into the strict logic of number theory to test my intuition.&#xD;
&#xD;
My guiding thesis through this interdisciplinary journey was a simple epistemological equation: $1 = O + C + E$. For anything to be considered part of classical reality ($1$), it must be Observable ($O$), Communicable ($C$), and Effectual ($E$).&#xD;
&#xD;
For years, I operated on this intuitive conjecture, trying to map how ideal models resolve into logical, computational realities. As I refined this into Latin square dynamics, I belatedly realized that the mathematics of information, communication, and computation theory were always leading me to a single destination: Cellular Automata. Discovering that the Wolfram Physics Project and Mathematica had already established the exact computational environment needed to resolve these intuitive models was a revelation.&#xD;
&#xD;
As you read the following framework and experiment with the code, you will see how the LDD engine is simply the literal, discrete execution of this equation&amp;#x2014;where observation is geometric confinement, communication is phase-locking, and effect is the thermodynamic drag of computation.&#xD;
&#xD;
---&#xD;
&#xD;
### 1. Abstract&#xD;
&#xD;
The Wolfram Physics Project has provided a profound new lens for viewing spacetime as an emergent property of discrete computation. Yet, as a community, we often grapple with the combinatorial explosion inherent in un-pruned multiway systems&amp;#x2014;what might be thought of as a &amp;#034;Cosmological Halting Problem.&amp;#034; This paper introduces **Linked Digital Dynamics (LDD)**, an exploratory cellular automaton that attempts to model a strict thermodynamic filter over these multiway branches.&#xD;
&#xD;
By treating the substate as a simple $6 \times 6$ dual-phase grid, we observe that even minimal localized interactions generate massive combinatorial phase spaces (e.g., $2^{72}$ conditions). To explore how a universe might compute this without freezing, LDD introduces a simulated physical cost: a **Verifiable Delay Function (VDF)**. Using a $4 \times 21$ geometric confinement matrix (the &amp;#034;Anvil Strike&amp;#034;), this toy model shears off incompatible geometries as **Algorithmic Exhaust** (entropy). Through an executable Wolfram Language Macro-Engine shared below, we can visually explore how this underlying &amp;#034;Informational Metabolic Hunt&amp;#034; naturally segregates a chaotic substate into stable, fast-ticking islands and dense, slow-ticking wells. LDD is presented here as a computational sandbox to invite community feedback on whether emergent gravity and relativistic time dilation might be fruitfully modeled as the macroscopic unevenness of computational friction.&#xD;
&#xD;
---&#xD;
&#xD;
### 2. Introduction: Exploring the Cosmological Halting Problem&#xD;
&#xD;
Like many in this community, I have been deeply inspired by the shift toward modeling physics as fundamental, discrete computation. However, while experimenting with localized multiway graphs, I repeatedly ran into a practical computational wall. If every point in space represents a discrete locus evaluating causal branches, the system must navigate a massive phase space of potential states.&#xD;
&#xD;
Consider a minimal collision of two $6 \times 6$ binary substates (an un-sponged False Vacuum). This simple interaction yields over 4.7 sextillion ($2^{72}$) possible combinatorial starting conditions. If the universe were purely probabilistic and smooth, searching through this phase space to find a stable interaction seems computationally prohibitive. Without a rigorous pruning mechanism, a discrete universe risks freezing under the weight of its own combinatorial explosion.&#xD;
&#xD;
**Testing a Thermodynamic Cost for Computation**&#xD;
Linked Digital Dynamics (LDD) is my attempt to build a computable model that addresses this by enforcing a strict thermodynamic cost for time. Inspired by cryptographic principles, I wanted to test what happens if the multiway graph is aggressively filtered by **Topological Drag**&amp;#x2014;a Verifiable Delay Function (VDF) that forces potential states to &amp;#034;prove&amp;#034; their structural integrity before solidifying.&#xD;
&#xD;
This led to the concept of **Informational Metabolics**. In this framework, a pro-causal trajectory does not calculate all possible futures; it &amp;#034;hunts&amp;#034; for adjacent structural support within a rigid $4 \times 21$ spatial confinement matrix. If the geometry perfectly phase-locks, it metabolizes that potential into a stable structure. If it fails, the unmatched data is sheared off into the substate as Algorithmic Exhaust.&#xD;
&#xD;
---&#xD;
&#xD;
### 3. Ontology of the Strata: Substate, Microstate, and Macrostate&#xD;
&#xD;
To circumvent the combinatorial explosion of the multiway graph, LDD proposes that reality does not compute in a single continuous layer. Information must survive severe geometric compression to ascend from pure potential to classical reality.&#xD;
&#xD;
* **I. The Substate (The False Vacuum):** The foundational layer, modeled computationally as a $6 \times 6$ branchial buffer. This is a region of pure, un-sponged potential&amp;#x2014;a completely frictionless state of non-constructive optimism where multiway branches freely generate. It possesses zero entropy.&#xD;
* **II. The Microstate (The Thermodynamic Forge):** Defined by the **$4 \times 21$ Geometric Confinement Matrix**. When two offset causal trajectories attempt to interact, their multiway potential is forced into an orthogonal cross-reading we call the **Anvil Strike**. It is a literal cryptographic pruning function testing if discrete geometries can support one another.&#xD;
* **III. The Macrostate (Linear Indifference):** The resulting classical reality, composed exclusively of localized motifs that survived the Anvil Strike. A Macrostate observer exists in a state of **Linear Indifference**&amp;#x2014;because its internal structure balances the thermodynamic drag, it feels no friction from its own existence, experiencing discrete processing purely as smooth spacetime.&#xD;
&#xD;
---&#xD;
&#xD;
### 4. Cryptographic Thermodynamics: The Cost of Observation&#xD;
&#xD;
In classical physics, entropy is a measure of disorder. In LDD, entropy is strictly redefined as **Algorithmic Exhaust**&amp;#x2014;the literal byproduct of failed computation.&#xD;
&#xD;
Because the substate is continuously attempting to expand, the universe requires an anchoring mechanism. The VDF acts as the fundamental clock speed of the universe, imposing **Topological Drag** modeled as a $+2, -1$ pro-causal ratchet. The $+2$ represents optimistic branchial generation, and the $-1$ represents the thermodynamic computational cost exacted by the universe.&#xD;
&#xD;
When a trajectory enters the $4 \times 21$ confinement cage, the VDF enforces **Mutually Assured Cooperation**. Optimistic multiway data only survives if it has adjacent structural support. Incompatible data snaps under the tension and is sheared off the event horizon back into the substate as Algorithmic Exhaust.&#xD;
&#xD;
---&#xD;
&#xD;
### 5. Informational Metabolics: The Darwinian Engine of Reality&#xD;
&#xD;
LDD requires a radical inversion of perspective: a localized multiway branch is an active, hungry computational agent. We term this survival mechanism the **Informational Metabolic Hunt**.&#xD;
&#xD;
The massive $2^{72}$ combinatorial phase space of the False Vacuum is the raw caloric potential of the universe. As a trajectory is pushed forward by the VDF, it must consume this substate potential to maintain phase-lock. A successful &amp;#034;hunt&amp;#034; occurs when two distinct trajectories possess the exact geometric seeds required to interlock. Conversely, trajectories with incompatible seeds cannot metabolize the local substate; they &amp;#034;starve&amp;#034; within the Anvil Strike and drop out of the macro-reality. Only the most geometrically optimized structures survive the friction of time.&#xD;
&#xD;
---&#xD;
&#xD;
### 6. Informational Relativity and Cosmogenesis&#xD;
&#xD;
Because LDD posits that time is locally computed labor rather than a universal background dimension, there is no absolute clock. By decoupling a local observer&amp;#039;s VDF speed from the computational phase of an external node, we organically generate **Informational Relativity**.&#xD;
&#xD;
A stable macrostate motif requires an $8 \times 8$ harmonic membrane to resolve chiral pressure. The literal edge of this membrane acts as the particle&amp;#039;s **Event Horizon**, which exhibits **Causal Elasticity**. An observer can tolerate a slight relational phase offset ($\Delta$) with an external node without breaking phase-lock. However, if the relativistic tension exceeds the harmonic capacity, the boundary violently shears into Algorithmic Exhaust.&#xD;
&#xD;
This perfectly mirrors Einsteinian mechanics:&#xD;
&#xD;
* **Spatial Expansion (Redshift):** If an external node&amp;#039;s VDF computes slower ($\Delta &amp;gt; 0$), the computational channel stretches.&#xD;
* **Informational Collisions (Blueshift):** If the node computes faster ($\Delta &amp;lt; 0$), the computational distance collapses, aggressively forcing its multiway state onto the observer.&#xD;
&#xD;
---&#xD;
&#xD;
### 7. The LDD Engine: A Computable Laboratory&#xD;
&#xD;
To move from philosophy to falsifiable physics, I have developed a native Wolfram Language laboratory.&#xD;
&#xD;
**I. The Holographic Relativistic Micro-Engine**&#xD;
This module isolates a single $4 \times 21$ Anvil Strike. Using the dual-slider architecture, you can physically drag an external node through the entire spectrum of informational Doppler shift. You can also load highly ordered &amp;#034;Custom Seeds&amp;#034; (orthogonal arrays) to witness how perfect geometry acts as a &amp;#034;Still Life,&amp;#034; surviving VDF loops without evaporating.&#xD;
&#xD;
```mathematica&#xD;
ClearAll[SeedFrameA, SeedFrameB, InitializeFalseVacuum, VDFSubstateMix, AnvilStrike, LDDChronoverticalTick, LDDDashboard];&#xD;
&#xD;
(* I. CUSTOM STARTING CONDITIONS *)&#xD;
SeedFrameA = {{1, 0, 1, 0, 1, 0}, {0, 1, 0, 1, 0, 1}, {1, 0, 1, 0, 1, 0}, {0, 1, 0, 1, 0, 1}, {1, 0, 1, 0, 1, 0}, {0, 1, 0, 1, 0, 1}};&#xD;
SeedFrameB = {{1, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0}};&#xD;
&#xD;
InitializeFalseVacuum[] := RandomInteger[1, {6, 6}];&#xD;
VDFSubstateMix[grid_] := Mod[grid + ListConvolve[{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}}, grid, 2], 2];&#xD;
&#xD;
(* II. MICROSTATE CONFINEMENT &amp;amp; ALGORITHMIC EXHAUST *)&#xD;
AnvilStrike[gridA_, gridB_, ticksA_, ticksB_] := Module[&#xD;
  {trajA, trajB, phaseSpace, cage, stabilizedCage, preSum, postSum, entropy},&#xD;
  trajA = Join[Flatten[gridA], IntegerDigits[Mod[ticksA, 64], 2, 6]];&#xD;
  trajB = Join[Flatten[gridB], IntegerDigits[Mod[ticksB, 64], 2, 6]];&#xD;
  phaseSpace = Join[trajA, trajB];&#xD;
  cage = Partition[phaseSpace[[Mod[Range[84]*5, 84] + 1]], 21];&#xD;
  preSum = Total[Flatten[cage]];&#xD;
  stabilizedCage = cage * UnitStep[ListConvolve[{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}}, cage, {2, 2}, 0] - 1];&#xD;
  postSum = Total[Flatten[stabilizedCage]];&#xD;
  entropy = preSum - postSum;&#xD;
  &amp;lt;|&amp;#034;Microstate&amp;#034; -&amp;gt; stabilizedCage, &amp;#034;Entropy&amp;#034; -&amp;gt; entropy, &amp;#034;ExhaustBits&amp;#034; -&amp;gt; (cage - stabilizedCage)|&amp;gt;&#xD;
];&#xD;
&#xD;
(* III. CHRONOVERTICAL TICK *)&#xD;
LDDChronoverticalTick[gridA_, gridB_, localVDF_, deltaVDF_] := Module[&#xD;
  {ticksA, ticksB, mixedA, mixedB},&#xD;
  ticksA = localVDF;&#xD;
  ticksB = Max[0, localVDF + deltaVDF]; &#xD;
  mixedA = Nest[VDFSubstateMix, gridA, ticksA];&#xD;
  mixedB = Nest[VDFSubstateMix, gridB, ticksB];&#xD;
  AnvilStrike[mixedA, mixedB, ticksA, ticksB]&#xD;
];&#xD;
&#xD;
(* IV. INTERACTIVE DASHBOARD *)&#xD;
LDDDashboard[] := DynamicModule[&#xD;
  {gridA, gridB, result},&#xD;
  gridA = SeedFrameA; gridB = SeedFrameB;&#xD;
  Manipulate[&#xD;
   result = LDDChronoverticalTick[gridA, gridB, localVDF, deltaVDF];&#xD;
   Column[{&#xD;
     Style[&amp;#034;LDD: Holographic Relativistic CA Engine&amp;#034;, Bold, 16, FontFamily -&amp;gt; &amp;#034;Helvetica&amp;#034;], Spacer[10],&#xD;
     Row[{Style[&amp;#034;Local VDF Speed: &amp;#034;, 12], Style[localVDF, Bold, 14], Spacer[20], Style[&amp;#034;Relativity (\[Delta]): &amp;#034;, 12], Style[deltaVDF, Bold, 14], Spacer[30], Style[&amp;#034;Algorithmic Exhaust (Entropy): &amp;#034;, 12, Red], Style[result[&amp;#034;Entropy&amp;#034;], Bold, 16, Red]}], Spacer[15],&#xD;
     Text@Grid[{{Column[{Style[&amp;#034;Observer A Frame (Local)&amp;#034;, 10], ArrayPlot[Nest[VDFSubstateMix, gridA, localVDF], ImageSize -&amp;gt; 130, Mesh -&amp;gt; True, ColorFunction -&amp;gt; &amp;#034;DeepSeaColors&amp;#034;]}], Column[{Style[&amp;#034;Observer B Frame (External)&amp;#034;, 10], ArrayPlot[Nest[VDFSubstateMix, gridB, Max[0, localVDF + deltaVDF]], ImageSize -&amp;gt; 130, Mesh -&amp;gt; True, ColorFunction -&amp;gt; &amp;#034;DeepSeaColors&amp;#034;]}]}}, Spacings -&amp;gt; {5, 1}], Spacer[20],&#xD;
     Style[&amp;#034;Phase-Locked Microstate (4x21 Confinement)&amp;#034;, Bold, 12], ArrayPlot[result[&amp;#034;Microstate&amp;#034;], ImageSize -&amp;gt; 550, Mesh -&amp;gt; True, ColorFunction -&amp;gt; &amp;#034;SunsetColors&amp;#034;], Spacer[10],&#xD;
     Style[&amp;#034;Non-Constructive Optimism (Sheared Entropy)&amp;#034;, 10, Gray], ArrayPlot[result[&amp;#034;ExhaustBits&amp;#034;], ImageSize -&amp;gt; 550, Mesh -&amp;gt; True, ColorFunction -&amp;gt; &amp;#034;Monochrome&amp;#034;]&#xD;
     }, Alignment -&amp;gt; Center],&#xD;
   {{localVDF, 42, &amp;#034;Observer A Baseline (Local VDF)&amp;#034;}, 1, 256, 1, Appearance -&amp;gt; &amp;#034;Labeled&amp;#034;},&#xD;
   {{deltaVDF, 0, &amp;#034;Informational Relativity (\[Delta])&amp;#034;}, -512, 512, 1, Appearance -&amp;gt; &amp;#034;Labeled&amp;#034;},&#xD;
   Row[{Button[&amp;#034;Load Custom Seeds (A &amp;amp; B)&amp;#034;, {gridA = SeedFrameA; gridB = SeedFrameB;}], Spacer[10], Button[&amp;#034;Generate Random Vacuum&amp;#034;, {gridA = InitializeFalseVacuum[]; gridB = InitializeFalseVacuum[];}]}],&#xD;
   ControlPlacement -&amp;gt; Top, TrackedSymbols :&amp;gt; {localVDF, deltaVDF}&#xD;
  ]&#xD;
]&#xD;
LDDDashboard[]&#xD;
&#xD;
```&#xD;
&#xD;
**II. The Macroscopic Spacetime Lattice (Deep Time Simulation)**&#xD;
This module expands the engine into a macroscopic lattice of 144 interacting observers. Using Deep Time Controls, you can age the universe by hundreds of ticks instantly. You will observe the False Vacuum segregate into cold islands of stable matter (fast-ticking clocks / vacuum) and dense, hot entropic borders (slow-ticking clocks / time dilation).&#xD;
&#xD;
```mathematica&#xD;
ClearAll[InitializeMacroVacuum, VDFSubstateMix, MacroAnvilStrike, MacroNetworkTick, LDDMacroDashboard];&#xD;
&#xD;
InitializeMacroVacuum[size_] := Table[&amp;lt;|&amp;#034;Substate&amp;#034; -&amp;gt; RandomInteger[1, {6, 6}], &amp;#034;VDFClock&amp;#034; -&amp;gt; 0, &amp;#034;Entropy&amp;#034; -&amp;gt; 0.0|&amp;gt;, {size}, {size}];&#xD;
VDFSubstateMix[grid_] := Mod[grid + ListConvolve[{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}}, grid, 2], 2];&#xD;
&#xD;
MacroAnvilStrike[nodeA_, nodeB_] := Module[&#xD;
  {trajA, trajB, phaseSpace, cage, stabilizedCage, preSum, postSum},&#xD;
  trajA = Join[Flatten[nodeA[&amp;#034;Substate&amp;#034;]], IntegerDigits[Mod[nodeA[&amp;#034;VDFClock&amp;#034;], 64], 2, 6]];&#xD;
  trajB = Join[Flatten[nodeB[&amp;#034;Substate&amp;#034;]], IntegerDigits[Mod[nodeB[&amp;#034;VDFClock&amp;#034;], 64], 2, 6]];&#xD;
  phaseSpace = Join[trajA, trajB];&#xD;
  cage = Partition[phaseSpace[[Mod[Range[84]*5, 84] + 1]], 21];&#xD;
  preSum = Total[Flatten[cage]];&#xD;
  stabilizedCage = cage * UnitStep[ListConvolve[{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}}, cage, {2, 2}, 0] - 1];&#xD;
  postSum = Total[Flatten[stabilizedCage]];&#xD;
  preSum - postSum&#xD;
];&#xD;
&#xD;
MacroNetworkTick[network_] := Module[&#xD;
  {size, nextNetwork, n, s, e, w, localEntropy},&#xD;
  size = Length[network]; nextNetwork = network;&#xD;
  Do[&#xD;
    n = network[[Mod[i - 1, size, 1], j]]; s = network[[Mod[i + 1, size, 1], j]];&#xD;
    e = network[[i, Mod[j + 1, size, 1]]]; w = network[[i, Mod[j - 1, size, 1]]];&#xD;
    localEntropy = Mean[{MacroAnvilStrike[network[[i,j]], n], MacroAnvilStrike[network[[i,j]], s], MacroAnvilStrike[network[[i,j]], e], MacroAnvilStrike[network[[i,j]], w]}];&#xD;
    If[localEntropy &amp;lt; 1.5, nextNetwork[[i,j, &amp;#034;VDFClock&amp;#034;]] += 1; nextNetwork[[i,j, &amp;#034;Substate&amp;#034;]] = VDFSubstateMix[network[[i,j, &amp;#034;Substate&amp;#034;]]];];&#xD;
    nextNetwork[[i,j, &amp;#034;Entropy&amp;#034;]] = localEntropy;&#xD;
  , {i, size}, {j, size}];&#xD;
  nextNetwork&#xD;
];&#xD;
&#xD;
LDDMacroDashboard[] := DynamicModule[&#xD;
  {gridSize = 12, macroNetwork, totalAge = 0},&#xD;
  macroNetwork = InitializeMacroVacuum[gridSize];&#xD;
  Manipulate[&#xD;
   Column[{&#xD;
     Style[&amp;#034;LDD: Macroscopic Spacetime Lattice&amp;#034;, Bold, 16, FontFamily -&amp;gt; &amp;#034;Helvetica&amp;#034;], Spacer[5],&#xD;
     Row[{Style[&amp;#034;Age of Universe (Total Ticks): &amp;#034;, 14, White], Style[totalAge, Bold, 16, Cyan]}], Spacer[15],&#xD;
     Row[{&#xD;
       Column[{Style[&amp;#034;Algorithmic Exhaust (Gravitational Heatmap)&amp;#034;, Bold, 12, White], Style[&amp;#034;Dark = Perfect Phase Lock (Baryonic Matter/Vacuum)\nBright/Hot = High Entropy (Event Horizons/Chaos)&amp;#034;, 10, Gray], MatrixPlot[Map[#[&amp;#034;Entropy&amp;#034;] &amp;amp;, macroNetwork, {2}], ColorFunction -&amp;gt; &amp;#034;ThermometerColors&amp;#034;, ImageSize -&amp;gt; 300, Frame -&amp;gt; False, Mesh -&amp;gt; True, MeshStyle -&amp;gt; Opacity[0.2]]}], Spacer[40],&#xD;
       Column[{Style[&amp;#034;Informational Relativity (Local VDF Ticks)&amp;#034;, Bold, 12, White], Style[&amp;#034;Bright = Fast Clocks (Low Drag)\nDark = Slow Clocks (Time Dilation/Gravity Wells)&amp;#034;, 10, Gray], MatrixPlot[Map[#[&amp;#034;VDFClock&amp;#034;] &amp;amp;, macroNetwork, {2}], ColorFunction -&amp;gt; &amp;#034;SunsetColors&amp;#034;, ImageSize -&amp;gt; 300, Frame -&amp;gt; False, Mesh -&amp;gt; True, MeshStyle -&amp;gt; Opacity[0.2]]}]&#xD;
     }]&#xD;
    }, Alignment -&amp;gt; Center, Background -&amp;gt; Black],&#xD;
   Row[{Style[&amp;#034;Advance Time: &amp;#034;, Bold, 12], Button[&amp;#034;+1 Tick&amp;#034;, {macroNetwork = MacroNetworkTick[macroNetwork]; totalAge += 1;}], Button[&amp;#034;+10 Ticks&amp;#034;, {Do[macroNetwork = MacroNetworkTick[macroNetwork], {10}]; totalAge += 10;}], Button[&amp;#034;+100 Ticks&amp;#034;, {Do[macroNetwork = MacroNetworkTick[macroNetwork], {100}]; totalAge += 100;}]}], Spacer[10],&#xD;
   Button[&amp;#034;Inject Big Bang (Regenerate Network)&amp;#034;, {macroNetwork = InitializeMacroVacuum[gridSize]; totalAge = 0;}],&#xD;
   ControlPlacement -&amp;gt; Top&#xD;
  ]&#xD;
]&#xD;
LDDMacroDashboard[]&#xD;
&#xD;
```&#xD;
&#xD;
---&#xD;
&#xD;
### 8. Conclusion and Call to Action: Mining the Substate&#xD;
&#xD;
Linked Digital Dynamics demonstrates that a discrete, computable universe must possess a physical thermodynamic cost to prevent a combinatorial explosion. The Cosmological Halting Problem is solved by the Verifiable Delay Function&amp;#x2014;a pro-causal ratchet that violently shears off non-constructive optimism as Algorithmic Exhaust. In this model, gravity, time dilation, and event horizons are simply emergent, macroscopic artifacts of localized computational friction.&#xD;
&#xD;
I present this framework not as a completed map of physics, but as a foundational sandbox. The true work lies in exploring the $2^{72}$ phase space of the False Vacuum.&#xD;
&#xD;
I issue a direct challenge to the Wolfram Community: **Mine the Substate.** Using the provided Mathematica engine, search the combinatorial starting conditions for the exact binary seeds&amp;#x2014;the cryptographic &amp;#034;Latin squares&amp;#034; and orthogonal arrays&amp;#x2014;that yield perfectly stable, zero-entropy loops. By discovering which specific geometric matrices survive the thermodynamic forge of the $4 \times 21$ Anvil Strike, we can begin to isolate the literal discrete DNA of ordinary matter, dark matter, and the frictionless vacuum.</description>
    <dc:creator>Steven De Costa</dc:creator>
    <dc:date>2026-06-08T07:49:22Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3725403">
    <title>Superoscillations Part 2: Phase vortices, quantum potential and free evolution of wave packets</title>
    <link>https://community.wolfram.com/groups/-/m/t/3725403</link>
    <description>![Superoscillations Part 2: Phase vortices, quantum potential and free evolution of wave packets][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=4313hero.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/74e74fc0-e0b8-4eb6-ba63-9cbad970ab82</description>
    <dc:creator>Bruno Tenorio</dc:creator>
    <dc:date>2026-06-01T17:46:43Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3715438">
    <title>Wiener filter: adaptive noise removal</title>
    <link>https://community.wolfram.com/groups/-/m/t/3715438</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/2dd621c0-ea9a-45aa-88da-6e4db8750a21</description>
    <dc:creator>Jana Rusrus</dc:creator>
    <dc:date>2026-05-13T02:52:25Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2187926">
    <title>Where is documentation on option FourierParameters</title>
    <link>https://community.wolfram.com/groups/-/m/t/2187926</link>
    <description>Where can I find an explanation of the options for FourierParameters?  The &amp;#034;Get Help&amp;#034; documentation just gives some &amp;#034;common choices&amp;#034; without explanation.  There are apparently two parameters that control how Mathematica calculates the expression returned.</description>
    <dc:creator>Jay Gourley</dc:creator>
    <dc:date>2021-02-08T03:33:52Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3713462">
    <title>Superoscillations Part 1: 1D foundations, leaky functions and quantum wavefunctions</title>
    <link>https://community.wolfram.com/groups/-/m/t/3713462</link>
    <description>![Superoscillations Part I: 1D foundations, leaky functions and quantum wavefunctions][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Image20260511195639.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/8d53f8f8-2805-49dd-b7bc-ee20599a9be9</description>
    <dc:creator>Bruno Tenorio</dc:creator>
    <dc:date>2026-05-08T22:22:16Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3710670">
    <title>Gamma spectroscopy with the RadiaCode detector</title>
    <link>https://community.wolfram.com/groups/-/m/t/3710670</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/d67fd36a-d01f-41e6-bcc2-939ceed7aed9</description>
    <dc:creator>Marco Thiel</dc:creator>
    <dc:date>2026-05-03T19:10:32Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3710411">
    <title>Photographing the quantization of light</title>
    <link>https://community.wolfram.com/groups/-/m/t/3710411</link>
    <description>![Photographing the quantization of light][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Photographingthequantizationoflight.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/3a9d99d6-b7bd-472c-a8f1-3a4cd19c7cb0</description>
    <dc:creator>Mohammad Bahrami</dc:creator>
    <dc:date>2026-05-01T14:54:40Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3674222">
    <title>Build your own spectrogram and noise remover from scratch</title>
    <link>https://community.wolfram.com/groups/-/m/t/3674222</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/4dcf93ed-d510-4c9d-942b-f6fa8a951ecd</description>
    <dc:creator>Jana Rusrus</dc:creator>
    <dc:date>2026-04-04T17:10:12Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3673172">
    <title>Vostok: revision of the EPICA dome C CO2 record from 800 to 600 kyr BP</title>
    <link>https://community.wolfram.com/groups/-/m/t/3673172</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/1a2195f5-f342-4069-9a09-da04b2e23137</description>
    <dc:creator>Dara Shayda</dc:creator>
    <dc:date>2026-04-01T22:43:34Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3660024">
    <title>Building an audio effects pipeline in Wolfram language</title>
    <link>https://community.wolfram.com/groups/-/m/t/3660024</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/9f4999ac-49ef-427f-ae84-87f00ee39f73</description>
    <dc:creator>Jana Rusrus</dc:creator>
    <dc:date>2026-03-13T14:50:35Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3646965">
    <title>Visualizing sound: audio analysis with Wolfram</title>
    <link>https://community.wolfram.com/groups/-/m/t/3646965</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/4f0a4ff2-ffad-46b5-ab11-ba4964d1a296</description>
    <dc:creator>Jana Rusrus</dc:creator>
    <dc:date>2026-02-28T15:27:16Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3641062">
    <title>I have to adjust a noisy spectrum from a measurements of ElectricDesplaimentsvsTemperature</title>
    <link>https://community.wolfram.com/groups/-/m/t/3641062</link>
    <description>I have a two members list with a very noisy behaviour. I tried differents kernel as for example SavitskyGolay and median method bot the results are no acceptable.</description>
    <dc:creator>Juan Fuentes</dc:creator>
    <dc:date>2026-02-17T21:13:54Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3589102">
    <title>Learning feature importance for quantum noise classification with multilayer perceptrons</title>
    <link>https://community.wolfram.com/groups/-/m/t/3589102</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/9f23858c-9e7c-4883-8a89-dc7e65f09a5d</description>
    <dc:creator>Guhan Thiagarajan</dc:creator>
    <dc:date>2025-12-11T00:20:39Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3580921">
    <title>[Polihacks] The sons of Bill Gates: lognormal simulation cellular model</title>
    <link>https://community.wolfram.com/groups/-/m/t/3580921</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/c6388a9d-cdfc-4d41-9d79-caccd5ba5c68</description>
    <dc:creator>Adael Reyes</dc:creator>
    <dc:date>2025-11-23T22:34:43Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/2527035">
    <title>[WSG22] Daily Study Group: Signals, Systems and Signal Processing</title>
    <link>https://community.wolfram.com/groups/-/m/t/2527035</link>
    <description>A Wolfram U daily study group on &amp;#034;Signals, Systems and Signal Processing&amp;#034; begins on May 16, 2022.&#xD;
&#xD;
Join instructors [@Leila Fuladi][at0]  and [@Mariusz Jankowski][at1] and a cohort of fellow learners to study the concepts, mathematics, principles and techniques of signal processing. We&amp;#039;ll cover methods of analysis for both continuous-time and discrete-time signals and systems, sampling and introductory filter design. The concepts and methods of signals and systems play an important role in many areas of science and engineering and many everyday signal processing examples are included. A basic working knowledge of the Wolfram Language is recommended.&#xD;
&#xD;
**[REGISTER HERE][1]**&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
&#xD;
  [1]: https://www.bigmarker.com/series/daily-study-group-signals-systems-and-signal-processing/series_details?utm_bmcr_source=community&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=WolframUBanner.jpeg&amp;amp;userId=130003&#xD;
&#xD;
 [at0]: https://community.wolfram.com/web/leilaf&#xD;
&#xD;
 [at1]: https://community.wolfram.com/web/mariuszj</description>
    <dc:creator>Abrita Chakravarty</dc:creator>
    <dc:date>2022-05-06T22:26:34Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3572151">
    <title>Temperature sensing by the calcium-sensing receptor</title>
    <link>https://community.wolfram.com/groups/-/m/t/3572151</link>
    <description>![Temperature sensing by the calcium-sensing receptor][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=3588Temperaturesensingbythecalcium-sensingreceptor3.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/09f283ea-56d5-462c-b25b-ab526b9c8ce0</description>
    <dc:creator>Philip Kuchel</dc:creator>
    <dc:date>2025-11-07T19:19:53Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3553666">
    <title>Music synthesizer: preset system and synth&amp;#039;s inverse</title>
    <link>https://community.wolfram.com/groups/-/m/t/3553666</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/4ed0e3bd-bb8c-4b1a-9492-b0a297c141b0</description>
    <dc:creator>Carlo Réan</dc:creator>
    <dc:date>2025-10-01T15:43:09Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3551641">
    <title>Derivating things: construction of the generalized functions and computing their derivatives</title>
    <link>https://community.wolfram.com/groups/-/m/t/3551641</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/33a41820-c999-4515-81be-555ebda62982</description>
    <dc:creator>Dara Shayda</dc:creator>
    <dc:date>2025-09-26T13:19:06Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/1383630">
    <title>[WSC18] Analyzing and visualizing chord sequences in music</title>
    <link>https://community.wolfram.com/groups/-/m/t/1383630</link>
    <description>During this year&amp;#039;s Wolfram Summer Camp, being mentored by Christian Pasquel, I developed a tool that identifies chord sequences in music (from MIDI files) and generates a corresponding graph. The graph represents all [unique] chords as vertices, and connects every pair of chronologically subsequent chords with a directed edge. Here is an example of a graph I generated:&#xD;
&#xD;
![Graph genehrated from Bach&amp;#039;s prelude no.1 of the Well Tempered Klavier (Book I)][1]&#xD;
&#xD;
&#xD;
Below is a detailed account on the development and current state of the project, plus some background on the corresponding musical theory notions.&#xD;
&#xD;
#Introduction&#xD;
&#xD;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;**GOAL** | The aim of this project is to develop a utility that identifies chords (e.g. C Major, A minor, G7, etc.) from MIDI files, in chronological order, and then generates a graph for visualizing that chord sequence. In the graph, each vertex would represent a unique chord, and each pair chronologically adjacent chords would be connected by a directed edge (i.e. an arrow). So, for example, if at some point in the music that is being analyzed there is a transition from a major G chord to a major C chord, there would be an arrow that goes from the G Major chord to the C Major chord. Therefore, the graph would describe a [Markov chain][2] for the chords. The purpose of the graph is to visualize frequent chord sequences and progressions within a certain piece of music.&#xD;
&#xD;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;**MOTIVATION** | While brainstorming for project ideas, I don&amp;#039;t know why, I had a desire to do something with graphs. Then I asked myself, &amp;#034;What are graphs good at modelling?&amp;#034;. I mentally browsed through my areas of interest, searching for any that matched that requirement. One of my main interests is music; I am somewhat of a musician myself. And, in fact, [musical] harmony *is* a good subject to be modelled by graphs. Harmony, one of the fundamental pillars of music (and perhaps the most important), not only involves the chords themselves, but, more significantly, the *transitions* between those, which is what gives character to music. And directed graphs, and, specifically, Markov models, are a perfect match for transitions between states.&#xD;
&#xD;
&#xD;
----------&#xD;
&#xD;
&#xD;
#Some background&#xD;
*Skip this if you aren&amp;#039;t interested in the musical theory part or if you already have a background in music theory!*&#xD;
&#xD;
##What is a chord?&#xD;
A chord is basically a group of notes played together (contemporarily). Chords are the quanta of musical &amp;#034;feeling&amp;#034;; the typicalbut somewhat naïveexample is the sensation of major chords sounding &amp;#034;happy&amp;#034; and minor chords sounding &amp;#034;sad&amp;#034; or melancholic (more on types of chords later). &#xD;
&#xD;
Types of chords are defined by the [intervals][3] (distance in pitch) between the notes. The *root* of a chord is the &amp;#034;most important&amp;#034; or fundamental note of the cord, in the sense that it is the &amp;#034;base&amp;#034; from which the aforementioned intervals are measured. In other words, the archetype of chord defines the &amp;#034;feel&amp;#034; and the general harmonic properties of the chord, while the root defines the pitch of the chord. So a &amp;#034;C Major&amp;#034; chord is a chord with archetype &amp;#034;major triad&amp;#034; (more on that later) built on the note C; i.e., its root is C.&#xD;
&#xD;
The *sequence* of chords in a piece constitutes its **harmony**, and it can convey much more complex musical messages or feelings than a single chord, just as in language: a single word does have meaning, but a sentence can have a much more complex meaning than any single word.&#xD;
&#xD;
##Patterns in chord sequences&#xD;
The main difference that between language and music is that language, in general, has a much stricter structure (i.e. the order of words, a.k.a. syntax) than music: the latter is an art, and there are no predetermined rules to follow. But humans \[have a tendency to\] like patterns, and music wouldn&amp;#039;t be so universally beloved if it didn&amp;#039;t contain any patterns. This also explains the unpopularity of [atonal music][4] (example [here][5]). But even atonal music has patterns: it may do its best to avoid harmonic patterns, but it still contains some level of rythmic, textural or other kinds of patterns.&#xD;
&#xD;
This is why using graphs to visualize chord sequences is interesting: it is a semidirect way of identifying the harmonic patterns that distinguish different genres, styles, forms, pieces or even fragments of music. In my project, I have mainly focused on the &amp;#034;western&amp;#034; conception of tonal music, an particularly in its &amp;#034;classical&amp;#034; version (what I mean by &amp;#034;classical&amp;#034; is, in lack of a better definition, a classification that encompasses all music where the composer is, culturally, the most important artist). That doesn&amp;#039;t mean this tool isn&amp;#039;t apt for other types of music; it just means it will analyze it from this specific standpoint.&#xD;
&#xD;
In tonal music, the harmonic patterns are all related to a certain notion of &amp;#034;center of gravity&amp;#034;: the [*tonic*][6], which is, in some way the music&amp;#039;s harmonic &amp;#034;home&amp;#034;. Classical (as in pre-XX-century) tonal music usually ends (and often starts) with the tonic chord. In fact, we can further extend the analogy with gravity by saying that music consists in a game of tension, in which the closer you are to the center of gravity (the tonic), the greater the &amp;#034;pull&amp;#034;. In an oversimplified manner, the musical equivalent of the [Schwarzschild radius][7]  is the [dominant chord][8]: it tends towards the tonic. Well, not really, because you *can* turn back from itand in fact a lot of interesting harmonical sequences consist in doing just that.&#xD;
&#xD;
##Some types of chords&#xD;
In &amp;#034;classical&amp;#034; music (see definition above), there are mainly these kinds of chords (based on the amount of unique notes they contain): triad chords (i.e. three-note chords), seventh chords (i.e. four-note chords; we&amp;#039;ll see why they&amp;#039;re called *seventh* in a bit), and ninth chords (five-note chords). There is another main distinction: major and minor chords (i.e. the cliché &amp;#034;happy&amp;#034; vs &amp;#034;sad&amp;#034; distinction). &#xD;
&#xD;
###Triad chords&#xD;
Probably the most simple and frequent chord is the triad chord (either major or minor). Here is a picture of a major and a minor triad C chord (left to right):&#xD;
&#xD;
![Major and minor triad C chords (ltr)][9]&#xD;
&#xD;
###Seventh chords&#xD;
[Seventh chords][10] are called so because they contain a seventh [interval][11]. Their main significance is in dominant chords, where they usually appear in the major-triad-minor-seventh (a.k.a [&amp;#034;dominant&amp;#034;][12]) form. Another important seventh chord form is the fully diminished seventh chord (these will be relevant for the code later), which also tends to resolve (&amp;#034;resolve&amp;#034; is music jargon for &amp;#034;transition to a chord with less tension&amp;#034;) to tonic.&#xD;
&#xD;
![Seventh chords][13]&#xD;
&#xD;
###Ninth chords&#xD;
Although not extremely frequent, they do appear in classical music. The most &amp;#034;popular&amp;#034; is the dominant ninth chord (an extension of the dominant 7th). An alternative for this chord is the minor ninth dominant chord (built from the same dominant 7th chord, but with a minor ninth instead).&#xD;
&#xD;
&amp;lt;br&amp;gt;&#xD;
&#xD;
&#xD;
----------&#xD;
&#xD;
&#xD;
#Algorithms and Code&#xD;
In this section I&amp;#039;m going to walk through my code in order of execution. Four main parts can be distinguished in my project: importing and preprocessing, splitting the note sequence into &amp;#034;chunks&amp;#034; to be analyzed as chords, identifying the chord in each of those chunks, and visualizing the whole sequence as a graph.&#xD;
&#xD;
##First phase: importing and preprocessing the MIDI file&#xD;
The first operation that needs to be done is importing the MIDI file and preprocessing it. This includes selecting which elements to import from the file, converting them to a given simplified form, and performing any sorting, deletion of superfluous elements, or other modification that needs to be done.&#xD;
&#xD;
For this purpose I defined the function `importMIDI`:&#xD;
	&#xD;
	importMIDI[filename_String] := MapAt[Flatten[#, 1] &amp;amp;, MapAt[flattenAndSortSoundNotes, &#xD;
           Import[(dir &amp;lt;&amp;gt; filename &amp;lt;&amp;gt; &amp;#034;.mid&amp;#034;), {{&amp;#034;SoundNotes&amp;#034;, &amp;#034;Metadata&amp;#034;}}], &#xD;
	1], 2]&#xD;
&#xD;
Here `dir` stands for the directory where I saved all my MIDIs (to avoid having to type in the whole directory every time). Notice that we&amp;#039;re importing the music as SoundNotes *and* the file&amp;#039;s metadatawe will need it for determining the boundaries of measures (see below). The function `flattenAndSortNotes` does what it sound like: it converts the list of `SoundNote`s that `Import` returned into a flattened list of notes (i.e. a single track), sorted by their starting time. It also gets rid of anything that isn&amp;#039;t necessary for chord identification (i.e. rhythmic sounds or effects). Consult the attached notebook for the explicit definition.&#xD;
&#xD;
Here is the format the sequence of notes is returned in (i.e. `importMIDI[...][[1]]`):&#xD;
&#xD;
    {{&amp;#034;C4&amp;#034;, {0., 1.4625}}, {&amp;#034;E4&amp;#034;, {0.18125, 1.4625}}, {&amp;#034;G4&amp;#034;, {0.36875, 0.525}}, &amp;lt;&amp;lt;562&amp;gt;&amp;gt;, {&amp;#034;G2&amp;#034;, {105., 107.963}}, {&amp;#034;G4&amp;#034;, {105., 107.963}}}&#xD;
&#xD;
Each sub-list represents a note. Its first element is the actual pitch; the second is a list that represents the timespan (i.e. start and end time in seconds).&#xD;
&#xD;
&amp;lt;br&amp;gt;&#xD;
&#xD;
##Second phase: splitting the note sequence into chunks&#xD;
The challenge in this part of the project is knowing how to determine which notes form a single chord; i.e., where to put the boundary between one chord and the next. &#xD;
&#xD;
The solution I came up with is not optimal, but, until now, nothing better has occurred to me (suggestions are welcome!). It involves determining where each measure start/end lies in time from the metadata and splitting each of those into a certain amount of sub-parts; then the notes are grouped by the specific sub-part of the specific measure they pertain to.  The rationale behind this is that chords in classical music tend to be well-contained within measures or rational fractions of these.&#xD;
&#xD;
This procedure is contained in the function `chordSequenceAnalyzeUsingMeasures`. I&amp;#039;m going to go over it quickly:&#xD;
&#xD;
    chordSequenceUsingMeasures[midiData_List /; Length@midiData == 2, &#xD;
      measureSplit_: 2, analyzer_String: &amp;#034;Heuristic&amp;#034;] := &#xD;
     Block[{noteSequence, metadata,  chunkKeyframes, chunkedSequence, &#xD;
       result},&#xD;
      &#xD;
&#xD;
      (*Separate notes from metadata*)&#xD;
      noteSequence = midiData[[1]];&#xD;
      metadata = midiData[[2]];&#xD;
      &#xD;
Until here it&amp;#039;s pretty self evident.&#xD;
&#xD;
      (*Get measure keyframes*)&#xD;
      chunkKeyframes = &#xD;
       divideByN[&#xD;
        measureKeyframesFromMetadata[&#xD;
         metadata, (Last@noteSequence)[[2, 2]]], measureSplit]; &#xD;
&#xD;
Here the function `measureKeyframesFromMetadata` is called. It fetches all of the `TimeSignature` and `SetTempo` tags in the metadata and identifies the position of each measure from them. `divideByN` subdivides each measure by `measureSplit` (an optional argument with default value `2`).&#xD;
      &#xD;
      (*Chunk sequence*)&#xD;
      chunkedSequence = {};&#xD;
      Module[{i = 1},&#xD;
       Do[&#xD;
        With[{k0 = chunkKeyframes[[j]], k1 = chunkKeyframes[[j + 1]]}, &#xD;
         Module[{chunk = {}}, &#xD;
          While[&#xD;
           i &amp;lt;= Length@noteSequence &amp;amp;&amp;amp; ( &#xD;
             k0 &amp;lt;= noteSequence[[i, 2, 1]] &amp;lt; k1 || &#xD;
              k0 &amp;lt; noteSequence[[i, 2, 2]] &amp;lt;= k1 ), &#xD;
           AppendTo[chunk, noteSequence[[i]]] i++;]; &#xD;
          AppendTo[chunkedSequence, chunk]&#xD;
          ]&#xD;
         ], &#xD;
        {j, Length@chunkKeyframes - 1}]];&#xD;
      chunkedSequence = &#xD;
       DeleteCases[chunkedSequence, l_List /; Length@l == 0];&#xD;
&#xD;
Once the measures&amp;#039; timespan has been determined, a list of &amp;#034;chunks&amp;#034; (lists of notes grouped by measure part) is generated. &#xD;
      &#xD;
      (*Call analyzer*)&#xD;
      Switch[analyzer,&#xD;
       &amp;#034;Deterministic&amp;#034;, result = chordChunkAnalyze /@ chunkedSequence,&#xD;
       &amp;#034;Heuristic&amp;#034;, &#xD;
       result = heuristicChordAnalyze /@ justPitch /@ chunkedSequence&#xD;
       ];&#xD;
      &#xD;
      result = resolveDiminished7th[Split[result][[All, 1]]]&#xD;
      ]&#xD;
&#xD;
Finally, each chunk is  sent to the chord analyzer function `heuristicChordAnalyze`, which I&amp;#039;ll talk about in the next section, along with the currently mysterious `resolveDiminished7th`. &#xD;
&#xD;
Since this algorithm for &amp;#034;chunking&amp;#034; a note sequence doesn&amp;#039;t work for everything, I also developed an alternative, more naïve approach:&#xD;
&#xD;
    chordSequenceNaïve[midiData_List /; Length@midiData == 2, &#xD;
      analyzer_String: &amp;#034;Heuristic&amp;#034;, n1_Integer: 6, n2_Integer: 1] := &#xD;
     Module[{noteSequence, chunkedSequence, result},&#xD;
      &#xD;
      (*Separate notes from metadata*)&#xD;
      noteSequence = midiData[[1]];&#xD;
      &#xD;
      (*Chunk sequence*)&#xD;
      chunkedSequence = Partition[noteSequence, n1, n2];&#xD;
      &#xD;
      (*Call analyzer*)&#xD;
      result = heuristicChordAnalyze /@ justPitch@chunkedSequence;&#xD;
      &#xD;
      result = resolveDiminished7th[Split[result][[All, 1]]]&#xD;
      ]&#xD;
&#xD;
&amp;lt;br&amp;gt;&#xD;
&#xD;
##Phase 3: identifying the chord from a group of notes&#xD;
&#xD;
This has been the main conceptual challenge in the whole project. After some unsucsessful ideas, with some suggestions from Rob Morris (one of the mentors), whom I thank, I ended up developing the following algorithm. It iterates through each note and assigns it a score that represents the likeliness of that note being the root of the chord based on the presence of certain indicators (i.e. notes the presence of which define a chord, to some degree), each of which with a different weight: having a fifth, having a third, a minor seventh... Then the note with the highest chord is assumed to be the root of the chord.&#xD;
&#xD;
In code:&#xD;
&#xD;
	heuristicChordAnalyze[notes_List] := &#xD;
	 Block[{chordNotes, scores, root},&#xD;
	  &#xD;
	  (*Calls to helper functions*)&#xD;
	  chordNotes = octaveReduce /@ convertToSemitones /@ notes // DeleteDuplicates;&#xD;
	  &#xD;
	  (*Scoring*)&#xD;
	  scores = Table[Total@&#xD;
      Pick[&#xD;
       (*Score points*)&#xD;
       {24, 16, 16, 8, 2, 3, 1, 1,&#xD;
        10, 15, 15, 18},&#xD;
       &#xD;
       (*Conditions*)&#xD;
       SubsetQ[chordNotes, #] &amp;amp; /@octaveReduce /@&#xD;
          {{nt + 7}, {nt + 4}, {nt + 3}, {nt + 10}, {nt + 11}, {nt + 2}, {nt + 5}, {nt + 9},&#xD;
          {nt + 4, nt + 10}, {nt + 3, nt + 6, nt + 10}, {nt + 3, nt + 6, nt + 9}, {nt + 1, nt + 4, nt + 10}}&#xD;
       ]&#xD;
     &#xD;
         (*Substract outliers*)&#xD;
         - 18*Length@Complement[chordNotes, octaveReduce /@ {nt, 7 + nt, 4 + nt, 3 + nt, 10 + nt, 11 + nt, &#xD;
                                                             2 + nt, 5 + nt, 9 + nt, 6 + nt}],&#xD;
    	&#xD;
       {nt, chordNotes}];&#xD;
&#xD;
	  (*Return*)&#xD;
	  root = Part[chordNotes, Position[scores, Max @@ scores][[1, 1]]];&#xD;
	  &#xD;
	  {root, Which[&#xD;
        SubsetQ[chordNotes, octaveReduce /@ {root + 10 , root + 2, root + 5, root + 9}], &amp;#034;13&amp;#034;,&#xD;
        SubsetQ[chordNotes, octaveReduce /@ {root + 10, root + 2, root + 5}], &amp;#034;11&amp;#034;,&#xD;
        SubsetQ[chordNotes, octaveReduce /@ {root + 4, root + 10, root + 2}], &amp;#034;Dom9&amp;#034;,&#xD;
        SubsetQ[chordNotes, octaveReduce /@ {root + 4, root + 10, root + 1}], &amp;#034;Dom9m&amp;#034;,&#xD;
        SubsetQ[chordNotes, octaveReduce /@ {root + 11, root + 7, root + 3}], &amp;#034;m7M&amp;#034;,&#xD;
        SubsetQ[chordNotes, {octaveReduce[root + 11], octaveReduce[root + 4]}],  &amp;#034;7M&amp;#034;,&#xD;
        SubsetQ[chordNotes, {octaveReduce[root + 10], octaveReduce[root + 4]}],  &amp;#034;Dom7&amp;#034;,&#xD;
        SubsetQ[chordNotes, {octaveReduce[root + 10], octaveReduce[root + 7]}], &amp;#034;Dom7&amp;#034;,&#xD;
        SubsetQ[chordNotes, {octaveReduce[root + 10], octaveReduce[root + 6]}],  &amp;#034;d7&amp;#034;,&#xD;
        SubsetQ[ chordNotes, {octaveReduce[root + 9], octaveReduce[root + 6]}],  &amp;#034;d7d&amp;#034;,&#xD;
        SubsetQ[chordNotes, {octaveReduce[root + 10], octaveReduce[root + 3]}],  &amp;#034;m7&amp;#034;,&#xD;
        MemberQ[chordNotes, octaveReduce[root + 4]], &amp;#034;M&amp;#034;,&#xD;
        MemberQ[chordNotes, octaveReduce[root + 3]], &amp;#034;m&amp;#034;,&#xD;
        MemberQ[chordNotes, octaveReduce[root + 7]], &amp;#034;5&amp;#034;,&#xD;
        True, &amp;#034;undef&amp;#034;]}&#xD;
    ]&#xD;
&#xD;
&#xD;
###A note on notation&#xD;
In this project I use the following abbreviations for chord notation (they&amp;#039;re not in the standard format). &amp;#034;X&amp;#034; represents the root of the chord.&#xD;
&#xD;
 - *X-**5*** = undefined triad chord (just the root and the fifth)&#xD;
 - *X-**M*** = Major&#xD;
 - *X-**m*** = minor&#xD;
 - *X-**m7*** = minor triad with minor (a.k.a dominant) seventh&#xD;
 - *X-**d7d*** = fully diminished 7thchord&#xD;
 - *X-**d7*** = half diminished 7thchord&#xD;
 - *X-**Dom7*** = Dominant 7th chord&#xD;
 - *X-**7M*** = Major triad with Major 7th&#xD;
 - *X-**m7M*** = minor triad with Major 7th&#xD;
 - *X-**Dom9*** = Dominant 9th chord&#xD;
 - *X-**Dom9m*** = Dominant 7th chord with a minor 9th&#xD;
 - *X-**11*** = 11th chord&#xD;
 - *X-**13*** = 13th chord&#xD;
&#xD;
&#xD;
&#xD;
&#xD;
###Dealing with diminished 7th chords&#xD;
Now, on to `resolveDiminished7th`. What is this function on about?&#xD;
&#xD;
Well, recall the fully diminished seventh chords I mentioned in the Background section. Here&amp;#039;s the problem: they&amp;#039;re completely symmetrical! What I mean by that is that the intervals between subsequent notes are identical, even if you [invert][14] the chord. In other words, the distance in semitones between notes is constant (it&amp;#039;s 3) and is a factor of 12 (distance of 12 semitones = octave). So, given one of these chords, there is no way to determine which note is the root just by analyzing the chord itself. In the context of our algorithm, every note would have the same score!&#xD;
&#xD;
At this point I thought: &amp;#034;How do humans deal with this?&amp;#034;. And I concluded that the only way to resolve this issue is to have some contextual vision (looking at the next chord, particularly), which is how humans do it. So what `resolveDiminished7th` does is it brushes through the chord sequence stored in `result`, looking for fully diminished chords (marked with the string &amp;#034;d7d&amp;#034;), and re-assigns each of those a root by looking at the next chord:&#xD;
&#xD;
    resolveDiminished7th[chordSequence_List] := &#xD;
    Module[{result}, &#xD;
      result = Partition[chordSequence, 2, 1] /. {{nt_, &amp;#034;d7d&amp;#034;}, c2_List} :&amp;gt; Which[&#xD;
      MemberQ[octaveReduce /@ {nt, nt + 3, nt + 6, nt + 9}, octaveReduce[c2[[1]] - 1]], {{c2[[1]] - 1, &amp;#034;d7d&amp;#034;}, c2}, &#xD;
      MemberQ[octaveReduce /@ {nt, nt + 3, nt + 6, nt + 9}, octaveReduce[c2[[1]] + 4]], {{c2[[1]] + 4, &amp;#034;d7d&amp;#034;}, c2}, &#xD;
      MemberQ[octaveReduce /@ {nt, nt + 3, nt + 6, nt + 9}, octaveReduce[c2[[1]] + 6]], {{c2[[1]] + 6, &amp;#034;d7d&amp;#034;}, c2}, &#xD;
      True, {{nt, &amp;#034;d7d&amp;#034;}, c2}];&#xD;
      &#xD;
    result = Append[result[[All, 1]], Last[result][[2]]]&#xD;
    ]&#xD;
&#xD;
&#xD;
##Phase 4: Visualization&#xD;
&#xD;
Basically, my visualization function (`visualizeChordSequence`) is fundamentally a highly customized call of the `Graph` function; so I&amp;#039;ll just paste the code below and then explain what some parameters do:&#xD;
&#xD;
&#xD;
    visualizeChords[chordSequence_List, layoutSpec_String: &amp;#034;Unspecified&amp;#034;, version_String: &amp;#034;Full&amp;#034;, mVSize_: &amp;#034;Auto&amp;#034;, simplicitySpec_Integer: 0, normalizationSpec_String: &amp;#034;Softmax&amp;#034;] :=&#xD;
     Module[{purgedChordSequence, chordList, transitionRules, weights, graphicalWeights, nOfCases, edgeStyle, vertexLabels, vertexSize, vertexStyle, vertexShapeFunction, clip},&#xD;
      &#xD;
      &#xD;
      (*Preprocess*)&#xD;
      Switch[version, &#xD;
       &amp;#034;Full&amp;#034;, &#xD;
       purgedChordSequence = &#xD;
        StringJoin[toNoteName[#1], &amp;#034;-&amp;#034;, #2] &amp;amp; @@@ chordSequence,&#xD;
       &amp;#034;Basic&amp;#034;, &#xD;
       purgedChordSequence = &#xD;
        Split[toNoteName /@ chordSequence[[All, 1]]][[All, 1]]];&#xD;
      &#xD;
      &#xD;
      (*Amount of each chord*)&#xD;
      chordList = DeleteDuplicates[purgedChordSequence];&#xD;
      nOfCases = Table[{c, Count[purgedChordSequence, c]}, {c, chordList}];&#xD;
      &#xD;
      (*Transition rules between chords*)&#xD;
      Switch[version,&#xD;
       &amp;#034;Full&amp;#034;, &#xD;
       transitionRules = &#xD;
        Gather[Rule @@@ Partition[purgedChordSequence, 2, 1]],&#xD;
       &amp;#034;Basic&amp;#034;, &#xD;
       transitionRules =(*DeleteCases[*)&#xD;
        Gather[Rule @@@ Partition[purgedChordSequence, 2, 1]](*, t_/;&#xD;
       Length@t\[LessEqual]2]*) ];&#xD;
      &#xD;
      &#xD;
      (*Get processed weight for each transition*)&#xD;
      weights = Length /@ transitionRules;&#xD;
      If[normalizationSpec == &amp;#034;Softmax&amp;#034;, graphicalWeights = SoftmaxLayer[][weights]];;&#xD;
      graphicalWeights = &#xD;
       If[Min@graphicalWeights != Max@graphicalWeights, &#xD;
        Rescale[graphicalWeights, &#xD;
         MinMax@graphicalWeights, {0.003, 0.04}], &#xD;
        graphicalWeights /. _?NumericQ :&amp;gt; 0.03 ];&#xD;
      &#xD;
      (*Final transition list*)&#xD;
      transitionRules = transitionRules[[All, 1]];&#xD;
      &#xD;
      (*Graph display specs*)&#xD;
      clip = RankedMax[weights, 4];&#xD;
      &#xD;
      edgeStyle = &#xD;
       Table[(transitionRules[[i]]) -&amp;gt; &#xD;
         Directive[Thickness[graphicalWeights[[i]]], &#xD;
          Arrowheads[2.5 graphicalWeights[[i]] + 0.015], &#xD;
          Opacity[Which[&#xD;
            weights[[i]] &amp;lt;= Clip[simplicitySpec - 2, {0, clip - 2}], 0, &#xD;
            weights[[i]] &amp;lt;= Clip[simplicitySpec, {0, clip}], 0.2, &#xD;
            True, 0.6]], &#xD;
            RandomColor[Hue[_, 0.75, 0.7]], &#xD;
          Sequence @@ If[weights[[i]] &amp;lt;= Clip[simplicitySpec - 1, {0, clip - 1}], { &#xD;
             Dotted}, {}] ], {i, Length@transitionRules}];&#xD;
      &#xD;
      vertexLabels = &#xD;
       Thread[nOfCases[[All, &#xD;
          1]] -&amp;gt; (Placed[#, &#xD;
             Center] &amp;amp; /@ (Style[#[[1]], Bold, &#xD;
               Rescale[#[[2]], MinMax[nOfCases[[All, 2]]], &#xD;
                Switch[mVSize, &amp;#034;Auto&amp;#034;, {6, 20}, _List, &#xD;
                 10*mVSize[[1]]/0.3*{1, mVSize[[2]]/mVSize[[1]]}]]] &amp;amp; /@ &#xD;
             nOfCases))];&#xD;
      &#xD;
      vertexSize = &#xD;
       Thread[nOfCases[[All, 1]] -&amp;gt; &#xD;
         Rescale[nOfCases[[All, 2]], MinMax[nOfCases[[All, 2]]], &#xD;
          Switch[mVSize, &#xD;
           &amp;#034;Auto&amp;#034;, (Floor[Length@chordList/10] + 1)*{0.1, 0.3}, _List, &#xD;
           mVSize]]];&#xD;
      &#xD;
      vertexStyle = &#xD;
       Thread[nOfCases[[All, 1]] -&amp;gt; &#xD;
         Directive[Hue[0.53, 0.27, 1, 0.6], EdgeForm[Blue]]];&#xD;
      &#xD;
      vertexShapeFunction = &#xD;
       Switch[version, &amp;#034;Full&amp;#034;, Ellipsoid[#1, {3.5, 1} #3] &amp;amp;, &amp;#034;Basic&amp;#034;, &#xD;
        Ellipsoid[#1, {2, 1} #3] &amp;amp;];&#xD;
      &#xD;
      &#xD;
      &#xD;
      &#xD;
      Graph[transitionRules, &#xD;
       &#xD;
       GraphLayout -&amp;gt; &#xD;
        Switch[layoutSpec, &amp;#034;Unspecified&amp;#034;, Automatic, _, layoutSpec],&#xD;
       &#xD;
       EdgeStyle -&amp;gt; edgeStyle,&#xD;
       EdgeWeight -&amp;gt; weights,&#xD;
       VertexLabels -&amp;gt; vertexLabels,&#xD;
       VertexSize -&amp;gt; vertexSize,&#xD;
       VertexStyle -&amp;gt; vertexStyle,&#xD;
       VertexShapeFunction -&amp;gt; vertexShapeFunction,&#xD;
       PerformanceGoal -&amp;gt; &amp;#034;Quality&amp;#034;]&#xD;
      ]&#xD;
&#xD;
There are five main things to focus on in the above definition: the graph layout (passed as the argument `layoutSpec`), the edge thickness (defined in `edgeStyle`), the vertex size (defined in `vertexSize`), the version (passed as argument `version`) and the simplicity specification (`simplicitySpec`).&#xD;
&#xD;
The graph layout is a `Graph` option that can be specified in the argument `layoutSpec`. If `&amp;#034;Unspecified&amp;#034;` is passed, an automatic layout will be used. I find that the best layouts tend to be, in order of preference, &amp;#034;BalloonEmbedding&amp;#034; and &amp;#034;RadialEmbedding&amp;#034;; nevertheless, neither are a perfect fit for every piece. In the future I would like to to implement custom (i.e. pre-defined) positioning, so that I can design it in a way that best fits this project.&#xD;
&#xD;
The edge thickness is a function of the amount of times a certain transition between two chords has occurred in the chord sequence. There is an option (namely the `normalizationSpec` argument) to enable or disable using a Softmax function for assigning thicknesses to edges. This is due to the fact that for simple/short chord sequences, Softmax is actually counterproductive because it suppresses secondary but still top-ranked transitions; i.e., it assigns a very high thickness to the most frequent transition and a low thickness to all other transitions (even those that come in second or third in frequency ranking). But for large or complex sequences it is actually useful, because it &amp;#034;gets rid of&amp;#034; a lot of the \[relatively\] insignificant instances, thus making the output actually understandable (and not just a [jumbled mess of thick lines][15]).&#xD;
&#xD;
The vertex size is proportional to the number of occurrences of each particular chord (that is, without taking into account the transitions). It can also be specified manually by passing `vSize` as a list `{a,b}` such that `a` is the minimum size an `b` is the maximum.&#xD;
&#xD;
The `version` can be either `&amp;#034;Full&amp;#034;` or `&amp;#034;Basic&amp;#034;`; the default is `&amp;#034;Full&amp;#034;`. The `&amp;#034;Basic&amp;#034;` version consists of a simplified chord set in which only the root note of the chord is taken into account, and not the archetype. For example, all C chords (M, Dom7, m...) would be represented by a single `&amp;#034;C&amp;#034;` vertex.&#xD;
&#xD;
Finally, the simplicity specification (`simplicitySpec`) is a number that can be thought of, in some way, as a &amp;#034;noise&amp;#034; threshold: as it gets larger, fewer edges &amp;#034;stand out&amp;#034;that is, more of the lower-significance ones are rendered with reduced opacity or are shown as dotted lines. This is useful for large or complex sequences.&#xD;
&#xD;
&amp;lt;br&amp;gt;&#xD;
&#xD;
&#xD;
----------&#xD;
&#xD;
&#xD;
#Some examples&#xD;
&#xD;
Here I will show some specific examples generated with this tool. I tried to use different styles of music for comparison.&#xD;
&#xD;
 - **Bach**&amp;#039;s [prelude no.1][16] from the Well Tempered Clavier:&#xD;
&#xD;
![Visualization of Bach&amp;#039;s prelude no.1 ][17]&#xD;
 &#xD;
  - **Debussy**&amp;#039;s [*Passepied*][18] from the *Suite Bergamasque*:&#xD;
&#xD;
![Visualization of Debussy&amp;#039;s *Passepied*][19]&#xD;
&#xD;
 - A &amp;#034;template&amp;#034; blues progression:&#xD;
&#xD;
![Blues template][20]&#xD;
&#xD;
 - **Beethoven**&amp;#039;s second movement from the *Pathétique* sonata (no.8):&#xD;
&#xD;
![Beethoven][21]&#xD;
&#xD;
 - Any &amp;#034;reggaeton&amp;#034; song (e.g. Despacito):&#xD;
&#xD;
![Reggaeton][22]&#xD;
&#xD;
#Microsite&#xD;
&#xD;
Check out the form page (a.k.a. microsite) of this project [here][23]:&#xD;
&#xD;
https://www.wolframcloud.com/objects/lammenspaolo/Chord%20sequence%20visualization&#xD;
&#xD;
[![enter image description here][24]][23]&#xD;
&#xD;
Briefly, here is what each option does (see the section **Algorithms and code** for a more detailed explanation):&#xD;
&#xD;
 - **Chunkifier funciton**: choose between splitting notes by measures or by a constant amount of notes&#xD;
 - **Measure split factor**: choose into how many pieces you want to divide measures (each piece will be analyzed as a separate chord)&#xD;
 - **Graph layout**: choose the layout option for the `Graph` call&#xD;
 - **Normalization function**: choose whether to apply a Softmax function to the weights of edges (to make results clearer in case of complex sequences).&#xD;
 - **Version**: choose &amp;#034;Full&amp;#034; for complete chord info (e.g. &amp;#034;C-M&amp;#034;, &amp;#034;D-Dom7&amp;#034;, &amp;#034;C-7M&amp;#034;...) or &amp;#034;Basic&amp;#034; for just the root of the chord (e.g. &amp;#034;C&amp;#034;, &amp;#034;D&amp;#034;...)&#xD;
 - **Vertex size**: specify vertex size as a list `{a,b}` where `a` is the minimum and `b` is the maximum size&#xD;
 - **Simplicity parameter**: visual simplification of the graph (a value of 0 means no simplification is applied)&#xD;
&#xD;
&amp;lt;br&amp;gt;&#xD;
&#xD;
#Conclusions&#xD;
I have developed a functional tool to visualize chord sequences as graphs. It is far from perfect, though. In the future, I would like improving the positioning of vertices, being able to eliminate insignificant transitions from the graph altogether, and making other visual adjustments. Furthermore, I plan to refine and optimize the chord analyzer, as right now it is just an experimental version that isn&amp;#039;t too accurate. A better &amp;#034;chunkifier&amp;#034; function could be developed too.&#xD;
&#xD;
Finally, I&amp;#039;d like to thank my mentor Christian Pasquel and all of the other WSC staff for this amazing opportunity. I&amp;#039;d also like to thank my music theory teacher, Raimon Romaní, for making me, over the years, sufficiently less terrible at musical analysis to be able to undertake this project.&#xD;
&#xD;
&#xD;
  [1]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Prelude.png&amp;amp;userId=1372342&#xD;
  [2]: https://en.wikipedia.org/wiki/Markov_chain &amp;#034;Wikipedia: Markov chain&amp;#034;&#xD;
  [3]: https://en.wikipedia.org/wiki/Interval_(music) &amp;#034;Wikipedia: Interval&amp;#034;&#xD;
  [4]: https://en.wikipedia.org/wiki/Atonality &amp;#034;Wikipedia: Atonality&amp;#034;&#xD;
  [5]: https://youtu.be/L85XTLr5eBE &amp;#034;Schönberg&amp;#039;s 4th string quartet on YouTube&amp;#034;&#xD;
  [6]: https://en.wikipedia.org/wiki/Tonic_%28music%29 &amp;#034;Wikipedia: Tonic&amp;#034;&#xD;
  [7]: http://astronomy.swin.edu.au/cosmos/S/Schwarzschild+Radius &amp;#034;Basic info on Schwartzschild radius&amp;#034;&#xD;
  [8]: https://en.wikipedia.org/wiki/Dominant_(music) &amp;#034;Dominant chord&amp;#034;&#xD;
  [9]: http://community.wolfram.com//c/portal/getImageAttachment?filename=2548Macro_analysis_chords_on_C.jpg&amp;amp;userId=1372342&#xD;
  [10]: https://en.wikipedia.org/wiki/Seventh_chord &amp;#034;Wikipedia: Seventh chord&amp;#034;&#xD;
  [11]: https://en.wikipedia.org/wiki/Interval_(music) &amp;#034;Wikipedia: Interval&amp;#034;&#xD;
  [12]: https://en.wikipedia.org/wiki/Dominant_seventh_chord &amp;#034;Wikipedia: Dominant seventh&amp;#034;&#xD;
  [13]: http://community.wolfram.com//c/portal/getImageAttachment?filename=images.png&amp;amp;userId=1372342&#xD;
  [14]: https://en.wikipedia.org/wiki/Inversion_(music)#Chords &amp;#034;Wikipedia: Inversion#Chords&amp;#034;&#xD;
  [15]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Passepied.png&amp;amp;userId=1372342 &amp;#034;Jumbled mess!&amp;#034;&#xD;
  [16]: https://www.youtube.com/watch?v=aengbLEFnM8&#xD;
  [17]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Prelude.png&amp;amp;userId=1372342&#xD;
  [18]: https://www.youtube.com/watch?v=hDWbVP-5DSA &amp;#034;Passepied&amp;#034;&#xD;
  [19]: http://community.wolfram.com//c/portal/getImageAttachment?filename=deb_pass2.png&amp;amp;userId=1372342&#xD;
  [20]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Blues.png&amp;amp;userId=1372342&#xD;
  [21]: http://community.wolfram.com//c/portal/getImageAttachment?filename=pathetique.png&amp;amp;userId=1372342&#xD;
  [22]: http://community.wolfram.com//c/portal/getImageAttachment?filename=Reggaeton.png&amp;amp;userId=1372342&#xD;
  [23]: https://www.wolframcloud.com/objects/lammenspaolo/Chord%20sequence%20visualization &amp;#034;Microsite&amp;#034;&#xD;
  [24]: http://community.wolfram.com//c/portal/getImageAttachment?filename=ScreenShot2018-07-19at1.53.02PM.png&amp;amp;userId=11733</description>
    <dc:creator>Paolo Lammens</dc:creator>
    <dc:date>2018-07-14T05:10:03Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3502721">
    <title>[WSRP25] Detecting and transcribing dolphin whistle phonemes into symbols</title>
    <link>https://community.wolfram.com/groups/-/m/t/3502721</link>
    <description>![enter image description here][1]&#xD;
&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=chloefinalpicturecompessay.png&amp;amp;userId=3502268&#xD;
  [2]: https://www.wolframcloud.com/obj/5b67f4b8-3394-41ba-9b11-73c9d08d61b7</description>
    <dc:creator>Chloe Kong</dc:creator>
    <dc:date>2025-07-10T21:30:39Z</dc:date>
  </item>
</rdf:RDF>

