HTML5 UI components for synthesizer controls.
WebSynthUI requires interact.js.
Include src/vendor/interact/interact.js
, src/js/web-synth-ui.js
and src/css/web-synth-ui.css
in your HTML document:
<script type="text/javascript" src="<path-to-web-synth-ui>/src/vendor/interact/interact.js"></script>
<script type="text/javascript" src="<path-to-web-synth-ui>/src/js/web-synth-ui.js"></script>
<link rel="stylesheet" type="text/css" href="<path-to-web-synth-ui>/src/css/web-synth-ui.css">
WebSynthUI currently provides three types of control: Knob, Segmented Switch and Toggle Switch.
<div class="web-synth-ui knob" id="knob">
<div class="handle"></div>
</div>
var knob = new Knob(document.getElementById('knob'), {
onUpdate: function(value) {
// The current value is passed to the onUpdate function when the knob is turned.
}
});
// Update the knob to display and send its current value (optional):
knob.update();
The Knob()
constructor accepts several options:
var knob = Knob(document.getElementById('knob'), {
minAngle: -135.0,
maxAngle: 135.0,
angle: -135.0,
minValue: 0.0,
maxValue: 1.0,
value: 0.0,
speed: 1.0,
onUpdate: function(value) {
...
}
});
Options may also be provided as data attributes:
<div class="web-synth-ui knob" id="knob"
data-min-angle="-135"
data-max-angle="135"
data-angle="-135"
data-min-value="0"
data-max-value="1"
data-value="0"
data-speed="1">
<div class="handle"></div>
</div>
Options passed to the constructor take precedence over options provided as data attributes. The following options are available:
The angle that restricts the knob's rotation to the left (in degrees). Defaults to -135.0
.
The angle that restricts the knob's rotation to the right (in degrees). Defaults to 135.0
.
The initial angle (in degrees). Defaults to -135.0
.
The value produced when the knob is rotated fully to the left. Defaults to 0.0
.
The value produced when the knob is rotated fully to the right. Defaults to 1.0
.
The initial value. This will be converted to the appropriate angle and will take precedence over the angle
option.
The speed of rotation. Defaults to 1.0
. When set to 1.0
, the knob rotates 1 degree per pixel of mouse movement. Values below 1.0
slow the rotation down and make the knob feel less responsive but more accurate. Values above 1.0
speed the rotation up and make the knob feel more responsve but less accurate.
<div class="web-synth-ui switch segmented-switch" id="segmented-switch">
<div class="pole selected" data-value="1">1</div>
<div class="pole" data-value="2">2</div>
<div class="pole" data-value="3">3</div>
</div>
- Include one
.pole
element for each switch segment. - Use
.selected
to indicate the segment that is selected by default. - Each segment should have a
data-value
attribute to provide a value when the segment is selected.
var switch = new SegmentedSwitch(document.getElementById('segmented-switch'), {
onUpdate: function(index, value) {
// The selected segment index and value are passed to the onUpdate function when the switch is clicked.
}
});
// Update the switch to display and send its current value (optional):
switch.update();
<div class="web-synth-ui switch toggle-switch" id="toggle-switch">
<div class="indicator"></div>
</div>
var switch = new ToggleSwitch(document.getElementById('toggle-switch'), {
onUpdate: function(on) {
// The switch state (boolean) is passed to the onUpdate function when the switch is clicked.
}
});
// Update the switch to display and send its current state (optional):
switch.update();
View /demo/index.html
for examples of the default behaviour for each control.
WebSynthUI is made available under the MIT License. See LICENSE.txt for details.
WebSynthUI was created by Tony Wallace.