• home
  • About the project
  • Miniature know-how
  • Language
    • Polski
    • English
Mi

Kuramoto Drone

nature, mathematics, sound
Preview
Parameters
gui
lang
pointer
size
synth
Description

Japanese physicist Yoshiki Kuramoto investigated how independent elements can spontaneously synchronize – how many rhythms, vibrations, or impulses can suddenly find a common order. The model he created describes this process mathematically; in “Kuramoto drone” it is translated into the language of sound. Oscillators instead of equations – tones instead of particles – slowly tune into each other, until a coherent, vibrating sound emerges from chaos. This is an experiment at the intersection of science and art: between the physics of synchronization and the aesthetics of shared rhythm.

Read more

Yoshiki Kuramoto (蔵本 由紀) is a Japanese physicist specializing in the study of nonlinear dynamics and nonequilibrium statistical mechanics (the researcher is affiliated with the Nonlinear Dynamics group at Kyoto University). These enigmatic terms represent attempts to understand how to predict the behavior of systems composed of many interacting, oscillating elements. One typical example of Kuramoto’s work is a simple experiment involving placing several mechanical metronomes out of phase on a common oscillating substrate. After a certain time, depending on the amount of energy transferred by the substrate, the metronomes will begin to synchronize. Such systems often occur in nature, and the ability to extract them from the general environment undoubtedly contributes to the uniqueness of Kuramoto’s work, as does his ability to construct equations. In other words, Yoshiki Kuramoto’s research is so fascinating because it combines advanced contemporary methodology with the ability to observe the natural world characteristic of early natural science. Among Kuramoto’s achievements is a computational model named after him that allows for predicting the self-synchronization capability of the aforementioned multi-oscillator systems. And because oscillators are one of the fundamental functional modules of electronic musical instruments, implementing Kuramoto’s model in a drone synthesizer is a great intellectual exercise, a lot of fun, and a cognitive experiment in sound design.

Technical documentation

Parameters passed via URL

  • gui 0 or 1; default 1; hides/shows the graphical user interface panel
  • lang en or pl; default en; sets the interface language (additional languages can be added)
  • midiinport default disabled; MIDI port number for external control of the Miniature (receiving messages)
  • midioutport default disabled; MIDI port number for external control of the Miniature (sending messages)
  • pointer 0 or 1; default 1; hides/shows the mouse cursor
  • size number of oscillators (minimum 2)
  • synth 0 or 1; default 1; disables/enables the internal sound synthesizer
  • tuning C c# D d# E F f# G g# A a# B; binary sequence of 12 numbers (0 or 1), where each indicates whether the corresponding pitch in the octave is enabled
  • worker 0 or 1; default 0; allows blocking the browser’s built-in mechanisms that suspend the program when the window is not visible
  • ws address; default disabled; enables and sets the address (usually localhost:9001) for WebSocket communication (allows external control of the Miniature and customization)
  • xws address; default disabled; enables and sets the address (usually ws://localhost:9001) with protocol specification for WebSocket communication (allows external control of the Miniature and customization)

Messages passed via WebSocket

Messages to which the Miniature responds

  • circular 0 or 1; default 0; disables/enables “wrapping” of the oscillator phase value (the “circular” toggle), which allows for smooth sound changes (no “threshold”)
  • deviation 0.0 … 1.0; sets the level of system “jitter” (the “deviation” slider)
  • invert 0 or 1; default 0; inverts the oscillation direction (the “invert” toggle)
  • K 0.0 … 1.0; sets the normalized level of the K parameter (the “K” slider) of the model – details: https://en.wikipedia.org/wiki/Kuramoto_model
  • key MIDI pitch (0 … 127), amplification (0.0 … 1.0); allows manual control of the volume of oscillators assigned to specific MIDI notes
  • randomize sets random oscillator phases (the “randomize” button)
  • speed 0.0 … 1.0; sets the normalized speed (the “speed” slider)
  • tuning C c# D d# E F f# G g# A a# B; binary sequence of 12 numbers (0 or 1), where each indicates whether the corresponding pitch in the octave is enabled
  • vol 0.0 … 1.0; sets the volume level (the “vol” slider)

Messages sent by the Miniature

  • kuramoto circular 0 or 1; change of the oscillator phase value “wrapping” mode (the “circular” toggle)
  • kuramoto deviation 0.0 … 1.0; change of the system “jitter” level (the “deviation” slider)
  • kuramoto invert 0 or 1; change of the oscillation direction inversion mode (the “invert” toggle)
  • kuramoto K 0.0 … 1.0; change of the normalized level of the K parameter (the “K” slider) of the model – details: https://en.wikipedia.org/wiki/Kuramoto_model
  • kuramoto randomize setting random oscillator phase values (the “randomize” button)
  • kuramoto speed 0.0 … 1.0; change of the normalized speed (the “speed” slider)
  • kuramoto tuning C c# D d# E F f# G g# A a# B; binary sequence of 12 numbers (0 or 1), where each indicates whether the corresponding pitch in the octave is enabled
  • kuramoto values series of normalized values (0.0 … 1.0) specifying the current phase of the oscillators (the number of values equals the number of oscillators)
  • kuramoto vol 0.0 … 1.0; change of the volume level (the “vol” slider)

MIDI

Messages to which the Miniature responds

  • CC 000 on channel 1 of the MIDI port set as input inverts the oscillation direction (the “invert” toggle)
  • CC 001 on channel 1 of the MIDI port set as input disables/enables “wrapping” of the oscillator phase value (the “circular” toggle), which allows for smooth sound changes (no “threshold”)
  • CC 002 on channel 1 of the MIDI port set as input sets random oscillator phases (the “randomize” button)
  • CC 003 on channel 1 of the MIDI port set as input sets the value of the “K” parameter (the “K” slider)
  • CC 004 on channel 1 of the MIDI port set as input sets the value of the “speed” parameter (the “speed” slider)
  • CC 005 on channel 1 of the MIDI port set as input sets the level of system “jitter” (the “deviation” slider)
  • CC 006 on channel 1 of the MIDI port set as input sets the volume level (the “vol” slider)
  • Note Off on channel 2 of the MIDI port set as input removes a given MIDI note from the list of available tones
  • Note On on channel 2 of the MIDI port set as input allows adding a given MIDI note to the list of available tones

Messages sent by the Miniature

  • CC 000 on channel 3 of the MIDI port set as output reports the inversion of the oscillation direction (the “invert” toggle)
  • CC 001 on channel 3 of the MIDI port set as output reports the “wrapping” of the oscillator phase value (the “circular” toggle), which allows for smooth sound changes (no “threshold”)
  • CC 002 on channel 3 of the MIDI port set as output reports the setting of random oscillator phases (the “randomize” button)
  • CC 003 on channel 3 of the MIDI port set as output reports the change of the “K” parameter value (the “K” slider)
  • CC 004 on channel 3 of the MIDI port set as output reports the change of the “speed” parameter value (the “speed” slider)
  • CC 005 on channel 3 of the MIDI port set as output reports the change of the system “jitter” value (the “deviation” slider)
  • CC 006 on channel 3 of the MIDI port set as output reports the change of the volume level (the “vol” slider)
  • CC xxx on channel 4 of the MIDI port set as output reports the change of the phase of the oscillator with an index corresponding to the CC message number
  • Note Off on channel 5 of the MIDI port set as output transmits tuning parameters
  • Note On on channel 5 of the MIDI port set as output transmits tuning parameters

Communication with MaxMSP

Messages to which the Miniature responds

  • circular 0 or 1; default 0; disables/enables “wrapping” of the oscillator phase value (the “circular” toggle), which allows for smooth sound changes (no “threshold”)
  • deviation 0.0 … 1.0; sets the level of system “jitter” (the “deviation” slider)
  • invert 0 or 1; default 0; inverts the oscillation direction (the “invert” toggle)
  • K 0.0 … 1.0; sets the normalized level of the K parameter (the “K” slider) of the model – details: https://en.wikipedia.org/wiki/Kuramoto_model
  • key MIDI pitch (0 … 127), amplification (0.0 … 1.0); allows manual control of the volume of oscillators assigned to specific MIDI notes
  • randomize sets random oscillator phases (the “randomize” button)
  • speed 0.0 … 1.0; sets the normalized speed (the “speed” slider)
  • tuning C c# D d# E F f# G g# A a# B; binary sequence of 12 numbers (0 or 1), where each indicates whether the corresponding pitch in the octave is enabled
  • vol 0.0 … 1.0; sets the volume level (the “vol” slider)

Messages sent by the Miniature

  • kuramoto circular 0 or 1; change of the oscillator phase value “wrapping” mode (the “circular” toggle)
  • kuramoto deviation 0.0 … 1.0; change of the system “jitter” level (the “deviation” slider)
  • kuramoto invert 0 or 1; change of the oscillation direction inversion mode (the “invert” toggle)
  • kuramoto K 0.0 … 1.0; change of the normalized level of the K parameter (the “K” slider) of the model – details: https://en.wikipedia.org/wiki/Kuramoto_model
  • kuramoto randomize setting random oscillator phase values (the “randomize” button)
  • kuramoto speed 0.0 … 1.0; change of the normalized speed (the “speed” slider)
  • kuramoto tuning C c# D d# E F f# G g# A a# B; binary sequence of 12 numbers (0 or 1), where each indicates whether the corresponding pitch in the octave is enabled
  • kuramoto values series of normalized values (0.0 … 1.0) specifying the current phase of the oscillators (the number of values equals the number of oscillators)
  • kuramoto vol 0.0 … 1.0; change of the volume level (the “vol” slider)
Source code

index.html

sketch.js

gui.js

worker.js

KuramotoModel.js

synth.js

midi.js

ws.js

Cgk8ZGl2IGNsYXNzPSJqcy1tYWlubWVudSI+CgkJPGRpdiBjbGFzcz0ibWVudS1tYWlubWVudS1jb250YWluZXIiPjx1bCBpZD0ibWVudS1tYWlubWVudS0xIiBjbGFzcz0ibWVudSI+PGxpIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtcG9zdF90eXBlIG1lbnUtaXRlbS1vYmplY3QtcGFnZSBtZW51LWl0ZW0taG9tZSBtZW51LWl0ZW0tMzI3Ij48YSBocmVmPSJodHRwczovL21pLndyb2NlbnRlci5wbC9lbi8iPmhvbWU8L2E+PC9saT4KPGxpIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtcG9zdF90eXBlIG1lbnUtaXRlbS1vYmplY3QtcGFnZSBtZW51LWl0ZW0tMzI1Ij48YSBocmVmPSJodHRwczovL21pLndyb2NlbnRlci5wbC9lbi9vLXByb2pla2NpZS8iPkFib3V0IHRoZSBwcm9qZWN0PC9hPjwvbGk+CjxsaSBjbGFzcz0ibWVudS1pdGVtIG1lbnUtaXRlbS10eXBlLXBvc3RfdHlwZSBtZW51LWl0ZW0tb2JqZWN0LXBhZ2UgbWVudS1pdGVtLTk2NCI+PGEgaHJlZj0iaHR0cHM6Ly9taS53cm9jZW50ZXIucGwvZW4vbWFudWFsLyI+TWluaWF0dXJlIGtub3ctaG93PC9hPjwvbGk+CjxsaSBjbGFzcz0icXRyYW54cy1sYW5nLW1lbnUgcXRyYW54cy1sYW5nLW1lbnUtZW4gbWVudS1pdGVtIG1lbnUtaXRlbS10eXBlLWN1c3RvbSBtZW51LWl0ZW0tb2JqZWN0LWN1c3RvbSBjdXJyZW50LW1lbnUtcGFyZW50IG1lbnUtaXRlbS1oYXMtY2hpbGRyZW4gbWVudS1pdGVtLTMyOCI+PGEgaHJlZj0iIyIgdGl0bGU9IkVuZ2xpc2giPkxhbmd1YWdlPC9hPgo8dWwgY2xhc3M9InN1Yi1tZW51Ij4KCTxsaSBjbGFzcz0icXRyYW54cy1sYW5nLW1lbnUtaXRlbSBxdHJhbnhzLWxhbmctbWVudS1pdGVtLXBsIG1lbnUtaXRlbSBtZW51LWl0ZW0tdHlwZS1jdXN0b20gbWVudS1pdGVtLW9iamVjdC1jdXN0b20gbWVudS1pdGVtLTk2NSI+PGEgaHJlZj0iaHR0cHM6Ly9taS53cm9jZW50ZXIucGwvcGwva3VyYW1vdG8tZHJvbmUvIj5Qb2xza2k8L2E+PC9saT4KCTxsaSBjbGFzcz0icXRyYW54cy1sYW5nLW1lbnUtaXRlbSBxdHJhbnhzLWxhbmctbWVudS1pdGVtLWVuIG1lbnUtaXRlbSBtZW51LWl0ZW0tdHlwZS1jdXN0b20gbWVudS1pdGVtLW9iamVjdC1jdXN0b20gY3VycmVudC1tZW51LWl0ZW0gbWVudS1pdGVtLTk2NiI+PGEgaHJlZj0iaHR0cHM6Ly9taS53cm9jZW50ZXIucGwvZW4va3VyYW1vdG8tZHJvbmUvIiBhcmlhLWN1cnJlbnQ9InBhZ2UiPkVuZ2xpc2g8L2E+PC9saT4KPC91bD4KPC9saT4KPC91bD48L2Rpdj4JPC9kaXY+Cgk8YnV0dG9uIGNsYXNzPSJqcy1hMTF5Ij48aW1nIGFsdD0iSGlnaCBjb250cmFzdCIgc3JjPSJodHRwczovL21pLndyb2NlbnRlci5wbC93cC1jb250ZW50L3RoZW1lcy9taTIwMjYvaW1nL2tvbnRyYXN0LnN2ZyI+PC9idXR0b24+Cg==
Kuramoto Drone — Mi
KPO Unia Europejska #NextGenerationEU Rzeczpospolita Polska
WRO ART CENTER
  • About the project
  • Miniature know-how