concept

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
concept [2022/03/19 05:00] – created renickconcept [2023/01/07 00:00] (current) renick
Line 1: Line 1:
 ====== Conceptual Overview ====== ====== Conceptual Overview ======
  
 +Konduktiva is a JavaScript library for live coding performances using a metaphor of a conductor conducting an ensemble.
 +
 +A MusicalEnvironment is used to store all of the necessary data.
 +
 +Players represent processes that can be started or stopped using the metaphor of a player in a musical ensemble like a band or orchestra.
 +
 +The Players execute action functions which do things like play samples, trigger MIDI events, or even change the state of the system. They do so according to timing determined by IOI functions. IOI means interonset interval, which is the time between events. This timing is what determines the rhythm of a Player.
 +
 +Players can be used for a single or multiple outputs. Anything that can be manipulated with a JavaScript function call can be an output. Actions for the SuperDirt sampler and MIDI are included in the distribution.
 +
 +By starting and stopping Players, a performance can be realized.
 +
 +--- 
 +
 +One of the services that it provides is a sequencer with regular timing. If you use setInterval alone, you will eventually accumulate a time lag, which means that your rhythm will be slow and fall behind what you expect, or that two different processes would fall out of time.
 +
 +The exact timing is controlled by an IOI function, which is one of two functions called by a Player. Players are a metaphor for a repeating set of function calls.
 +
 +An IOI function produces a time interval that is used to space out events. It produces an interval which is the space between events. The simplest IOI function could return a single number, such as 1, which would indicate an event on each beat.
 +
 +Ableton sequences by putting blocks on a grid. Konduktiva has a grid aligned to a BPM, except instead of placing blocks on the grid, you are placing fu
 +
 +In a DAW like Ableton, you sequence music by placing blocks on a grid which is defined by BPM and time signature (4 beats per bar). In Konduktiva, there doesn't need to be a bar. 
 +
 +If you think about the piano roll in a DAW, you paint on notes. In Konduktiva, we write a function to determine the position of the notes. As for which notes they are, in a DAW the vertical position is painted as well. In Konduktiva, we write a function to determine that.
 +
 +Think of an orchestra. You might have one player playing a violin and another playing a flute. In Konduktiva, you might represent each of these with a Player, each with a different function for rhythm and a different function for what sound to make.
 +
 +In a piano roll, you press play, and each of the painted notes is sounded according to its position on the roll, and when all of the notes have been played, the DAW will produce silence (unless you have set a loop point). In Konduktiva, you press play for an individual Player (or for all of the Players together, or a subset, depending on your design), and the default behavior is to repeat a Player's function for rhythm indefinitely until the Player is stopped.
 +
 +In Konduktiva, by editing the Players on the fly, you can perform complex musical sequences, like a conductor conducting players in an ensemble.
 +
 +Because we have the power of a programming language, we can produce sequences which are much more complex than those that you would draw on a piano roll.
 +
 +===== Players and the two important functions they reference: IOI functions and action functions =====
 +
 +Each Player references two functions: an IOI (interonset interval) function which controls timing of events, and an action function which determines what to do according to that timing.
 +
 +These functions are separate from the Player itself so that different Players can use the same IOI or action functions. Imagine a violin Player and a flute Player, each having a different action function corresponding to those two sounds, yet both using the same IOI function, resulting in them playing the same rhythm. Alternatively, you could have a single violin action function being used by two different Players, each with a different IOI function, resulting in two different rhythms of violin melody.
 +
 +==== IOI functions ====
 +
 +IOI stands for interonset interval: the interval between the onset of events, or how much time passes between the triggering of events. This is like the space between notes on a piano roll, but more specifically the distance between the start of each note.
 +
 +With an IOI function, we specify the gaps between notes in order to define our rhythm. An IOI function that produces the looping sequence of numbers 2, 3, 2, a rhythm of 2 beats, 3 beats, and then 2 beats results.
 +
 +  |X-X--X--|X-X--X--|X-X--X--|X-X--X-- (... indefinitely)
 +
 +An IOI function produces rhythm. Rhythm implies at least two notes. By repeating an IOI function, a rhythm emerges. 
 +
 +It's important to remember that this doesn't necessarily have anything to do with note duration; it's just when the note starts.
 +
 +You might want to think of it as defining the negative space between notes.
 +
 +=== action functions ===
 +
 +In Konduktiva, the position of the notes is controlled by an IOI function. What happens at those notes is determined by the action function.
 +
 +In Konduktiva instead of a block, you 
 +
 +Musical Environment
 +
 +You populate the MusicalEnvironment with Players, IOI functions, and action functions. The tempo exists as a property of this MusicalEnvironment.
 +
 +
 +QuantizedMap
  • concept.1647691254.txt.gz
  • Last modified: 2022/03/19 05:00
  • by renick