rescript-tone 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +175 -0
- package/package.json +44 -0
- package/src/ToneJs.res +64 -0
- package/src/ToneJs.res.js +150 -0
- package/src/ToneJs_AMSynth.res +34 -0
- package/src/ToneJs_AudioNode.res +20 -0
- package/src/ToneJs_AutoFilter.res +33 -0
- package/src/ToneJs_AutoPanner.res +26 -0
- package/src/ToneJs_AutoWah.res +31 -0
- package/src/ToneJs_BitCrusher.res +20 -0
- package/src/ToneJs_Channel.res +33 -0
- package/src/ToneJs_Chebyshev.res +24 -0
- package/src/ToneJs_Chorus.res +37 -0
- package/src/ToneJs_Compressor.res +28 -0
- package/src/ToneJs_Context.res +21 -0
- package/src/ToneJs_CrossFade.res +20 -0
- package/src/ToneJs_Destination.res +12 -0
- package/src/ToneJs_Distortion.res +24 -0
- package/src/ToneJs_EQ3.res +25 -0
- package/src/ToneJs_Event.res +28 -0
- package/src/ToneJs_FMSynth.res +35 -0
- package/src/ToneJs_FeedbackDelay.res +24 -0
- package/src/ToneJs_Filter.res +46 -0
- package/src/ToneJs_Freeverb.res +21 -0
- package/src/ToneJs_FrequencyShifter.res +19 -0
- package/src/ToneJs_Gain.res +19 -0
- package/src/ToneJs_Gate.res +21 -0
- package/src/ToneJs_JCReverb.res +19 -0
- package/src/ToneJs_Limiter.res +19 -0
- package/src/ToneJs_Loop.res +39 -0
- package/src/ToneJs_MonoSynth.res +33 -0
- package/src/ToneJs_Noise.res +38 -0
- package/src/ToneJs_Oscillator.res +44 -0
- package/src/ToneJs_Panner.res +19 -0
- package/src/ToneJs_Param.res +24 -0
- package/src/ToneJs_Part.res +36 -0
- package/src/ToneJs_Phaser.res +28 -0
- package/src/ToneJs_PingPongDelay.res +24 -0
- package/src/ToneJs_PitchShift.res +27 -0
- package/src/ToneJs_Player.res +60 -0
- package/src/ToneJs_PolySynth.res +37 -0
- package/src/ToneJs_Reverb.res +26 -0
- package/src/ToneJs_Sequence.res +35 -0
- package/src/ToneJs_Signal.res +47 -0
- package/src/ToneJs_StereoWidener.res +19 -0
- package/src/ToneJs_Synth.res +35 -0
- package/src/ToneJs_Tone.res +12 -0
- package/src/ToneJs_Transport.res +67 -0
- package/src/ToneJs_Tremolo.res +31 -0
- package/src/ToneJs_Types.res +94 -0
- package/src/ToneJs_Vibrato.res +25 -0
- package/src/ToneJs_Volume.res +21 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Bindings for Tone.Phaser
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
frequency?: frequency,
|
|
8
|
+
octaves?: positive,
|
|
9
|
+
stages?: int,
|
|
10
|
+
q?: positive,
|
|
11
|
+
baseFrequency?: frequency,
|
|
12
|
+
wet?: normalRange,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@module("tone") @new external make: unit => t = "Phaser"
|
|
16
|
+
@module("tone") @new external makeWithOptions: options => t = "Phaser"
|
|
17
|
+
|
|
18
|
+
@get external frequency: t => ToneJs_Param.t = "frequency"
|
|
19
|
+
@get external octaves: t => positive = "octaves"
|
|
20
|
+
@set external setOctaves: (t, positive) => unit = "octaves"
|
|
21
|
+
@get external q: t => ToneJs_Param.t = "Q"
|
|
22
|
+
@get external baseFrequency: t => frequency = "baseFrequency"
|
|
23
|
+
@set external setBaseFrequency: (t, frequency) => unit = "baseFrequency"
|
|
24
|
+
@get external wet: t => ToneJs_Param.t = "wet"
|
|
25
|
+
|
|
26
|
+
@send external dispose: t => t = "dispose"
|
|
27
|
+
|
|
28
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Bindings for Tone.PingPongDelay
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
delayTime?: time,
|
|
8
|
+
maxDelay?: time,
|
|
9
|
+
feedback?: normalRange,
|
|
10
|
+
wet?: normalRange,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@module("tone") @new external make: unit => t = "PingPongDelay"
|
|
14
|
+
@module("tone") @new external makeWithTime: time => t = "PingPongDelay"
|
|
15
|
+
@module("tone") @new external makeWithTimeFeedback: (time, normalRange) => t = "PingPongDelay"
|
|
16
|
+
@module("tone") @new external makeWithOptions: options => t = "PingPongDelay"
|
|
17
|
+
|
|
18
|
+
@get external delayTime: t => ToneJs_Param.t = "delayTime"
|
|
19
|
+
@get external feedback: t => ToneJs_Param.t = "feedback"
|
|
20
|
+
@get external wet: t => ToneJs_Param.t = "wet"
|
|
21
|
+
|
|
22
|
+
@send external dispose: t => t = "dispose"
|
|
23
|
+
|
|
24
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Bindings for Tone.PitchShift
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
pitch?: float,
|
|
8
|
+
windowSize?: seconds,
|
|
9
|
+
delayTime?: time,
|
|
10
|
+
feedback?: normalRange,
|
|
11
|
+
wet?: normalRange,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@module("tone") @new external make: unit => t = "PitchShift"
|
|
15
|
+
@module("tone") @new external makeWithOptions: options => t = "PitchShift"
|
|
16
|
+
|
|
17
|
+
@get external pitch: t => float = "pitch"
|
|
18
|
+
@set external setPitch: (t, float) => unit = "pitch"
|
|
19
|
+
@get external windowSize: t => seconds = "windowSize"
|
|
20
|
+
@set external setWindowSize: (t, seconds) => unit = "windowSize"
|
|
21
|
+
@get external delayTime: t => ToneJs_Param.t = "delayTime"
|
|
22
|
+
@get external feedback: t => ToneJs_Param.t = "feedback"
|
|
23
|
+
@get external wet: t => ToneJs_Param.t = "wet"
|
|
24
|
+
|
|
25
|
+
@send external dispose: t => t = "dispose"
|
|
26
|
+
|
|
27
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Bindings for Tone.Player - audio file playback
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
url?: string,
|
|
8
|
+
loop?: bool,
|
|
9
|
+
autostart?: bool,
|
|
10
|
+
playbackRate?: positive,
|
|
11
|
+
loopStart?: time,
|
|
12
|
+
loopEnd?: time,
|
|
13
|
+
reverse?: bool,
|
|
14
|
+
fadeIn?: time,
|
|
15
|
+
fadeOut?: time,
|
|
16
|
+
volume?: decibels,
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@module("tone") @new external make: string => t = "Player"
|
|
20
|
+
@module("tone") @new external makeWithOptions: options => t = "Player"
|
|
21
|
+
|
|
22
|
+
// Source lifecycle
|
|
23
|
+
@send external start: (t, ~time: time=?) => t = "start"
|
|
24
|
+
@send external startWithOffset: (t, ~time: time=?, ~offset: time=?) => t = "start"
|
|
25
|
+
@send external startWithOffsetDuration: (t, ~time: time=?, ~offset: time=?, ~duration: time=?) => t = "start"
|
|
26
|
+
@send external stop: (t, ~time: time=?) => t = "stop"
|
|
27
|
+
@send external restart: (t, ~time: time=?) => t = "restart"
|
|
28
|
+
@send external seek: (t, time) => t = "seek"
|
|
29
|
+
@send external seekAt: (t, time, ~when_: time=?) => t = "seek"
|
|
30
|
+
@send external dispose: t => t = "dispose"
|
|
31
|
+
|
|
32
|
+
// Loading
|
|
33
|
+
@send external load: (t, string) => promise<t> = "load"
|
|
34
|
+
|
|
35
|
+
// Properties
|
|
36
|
+
@get external volume: t => ToneJs_Param.t = "volume"
|
|
37
|
+
@get external loaded: t => bool = "loaded"
|
|
38
|
+
@get external loop: t => bool = "loop"
|
|
39
|
+
@set external setLoop: (t, bool) => unit = "loop"
|
|
40
|
+
@get external loopStart: t => time = "loopStart"
|
|
41
|
+
@set external setLoopStart: (t, time) => unit = "loopStart"
|
|
42
|
+
@get external loopEnd: t => time = "loopEnd"
|
|
43
|
+
@set external setLoopEnd: (t, time) => unit = "loopEnd"
|
|
44
|
+
@send external setLoopPoints: (t, time, time) => t = "setLoopPoints"
|
|
45
|
+
@get external playbackRate: t => positive = "playbackRate"
|
|
46
|
+
@set external setPlaybackRate: (t, positive) => unit = "playbackRate"
|
|
47
|
+
@get external reverse: t => bool = "reverse"
|
|
48
|
+
@set external setReverse: (t, bool) => unit = "reverse"
|
|
49
|
+
@get external autostart: t => bool = "autostart"
|
|
50
|
+
@set external setAutostart: (t, bool) => unit = "autostart"
|
|
51
|
+
@get external fadeIn: t => time = "fadeIn"
|
|
52
|
+
@set external setFadeIn: (t, time) => unit = "fadeIn"
|
|
53
|
+
@get external fadeOut: t => time = "fadeOut"
|
|
54
|
+
@set external setFadeOut: (t, time) => unit = "fadeOut"
|
|
55
|
+
|
|
56
|
+
// Sync
|
|
57
|
+
@send external sync: t => t = "sync"
|
|
58
|
+
@send external unsync: t => t = "unsync"
|
|
59
|
+
|
|
60
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Bindings for Tone.PolySynth - polyphonic synthesizer
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
maxPolyphony?: int,
|
|
8
|
+
volume?: decibels,
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@module("tone") @new external make: unit => t = "PolySynth"
|
|
12
|
+
@module("tone") @new external makeWithOptions: options => t = "PolySynth"
|
|
13
|
+
|
|
14
|
+
// PolySynth takes arrays of notes
|
|
15
|
+
@send external triggerAttack: (t, array<frequency>) => t = "triggerAttack"
|
|
16
|
+
@send external triggerAttackNote: (t, frequency) => t = "triggerAttack"
|
|
17
|
+
@send external triggerAttackAt: (t, array<frequency>, ~time: time=?) => t = "triggerAttack"
|
|
18
|
+
@send external triggerAttackAtVel: (t, array<frequency>, ~time: time=?, ~velocity: normalRange=?) => t = "triggerAttack"
|
|
19
|
+
@send external triggerRelease: (t, array<frequency>) => t = "triggerRelease"
|
|
20
|
+
@send external triggerReleaseNote: (t, frequency) => t = "triggerRelease"
|
|
21
|
+
@send external triggerReleaseAt: (t, array<frequency>, ~time: time=?) => t = "triggerRelease"
|
|
22
|
+
@send external triggerAttackRelease: (t, array<frequency>, time) => t = "triggerAttackRelease"
|
|
23
|
+
@send external triggerAttackReleaseNote: (t, frequency, time) => t = "triggerAttackRelease"
|
|
24
|
+
@send external triggerAttackReleaseAt: (t, array<frequency>, time, ~time: time=?) => t = "triggerAttackRelease"
|
|
25
|
+
@send external triggerAttackReleaseAtVel: (t, array<frequency>, time, ~time: time=?, ~velocity: normalRange=?) => t = "triggerAttackRelease"
|
|
26
|
+
@send external releaseAll: (t, ~time: time=?) => t = "releaseAll"
|
|
27
|
+
|
|
28
|
+
@get external volume: t => ToneJs_Param.t = "volume"
|
|
29
|
+
@get external activeVoices: t => int = "activeVoices"
|
|
30
|
+
@get external maxPolyphony: t => int = "maxPolyphony"
|
|
31
|
+
@set external setMaxPolyphony: (t, int) => unit = "maxPolyphony"
|
|
32
|
+
|
|
33
|
+
@send external dispose: t => t = "dispose"
|
|
34
|
+
@send external sync: t => t = "sync"
|
|
35
|
+
@send external unsync: t => t = "unsync"
|
|
36
|
+
|
|
37
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Bindings for Tone.Reverb
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
decay?: seconds,
|
|
8
|
+
preDelay?: seconds,
|
|
9
|
+
wet?: normalRange,
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@module("tone") @new external make: unit => t = "Reverb"
|
|
13
|
+
@module("tone") @new external makeWithDecay: seconds => t = "Reverb"
|
|
14
|
+
@module("tone") @new external makeWithOptions: options => t = "Reverb"
|
|
15
|
+
|
|
16
|
+
@get external decay: t => time = "decay"
|
|
17
|
+
@set external setDecay: (t, time) => unit = "decay"
|
|
18
|
+
@get external preDelay: t => time = "preDelay"
|
|
19
|
+
@set external setPreDelay: (t, time) => unit = "preDelay"
|
|
20
|
+
@get external wet: t => ToneJs_Param.t = "wet"
|
|
21
|
+
@get external ready: t => promise<unit> = "ready"
|
|
22
|
+
|
|
23
|
+
@send external generate: t => promise<t> = "generate"
|
|
24
|
+
@send external dispose: t => t = "dispose"
|
|
25
|
+
|
|
26
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Bindings for Tone.Sequence - a series of events in order
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
@module("tone") @new external make: ((seconds, 'a) => unit, array<'a>) => t = "Sequence"
|
|
7
|
+
@module("tone") @new external makeWithSubdivision: ((seconds, 'a) => unit, array<'a>, time) => t = "Sequence"
|
|
8
|
+
|
|
9
|
+
@send external start: (t, ~time: transportTime=?) => t = "start"
|
|
10
|
+
@send external startWithOffset: (t, ~time: transportTime=?, ~offset: int=?) => t = "start"
|
|
11
|
+
@send external stop: (t, ~time: transportTime=?) => t = "stop"
|
|
12
|
+
@send external clear: t => t = "clear"
|
|
13
|
+
@send external dispose: t => t = "dispose"
|
|
14
|
+
|
|
15
|
+
@get external events: t => array<'a> = "events"
|
|
16
|
+
@set external setEvents: (t, array<'a>) => unit = "events"
|
|
17
|
+
@get external subdivision: t => seconds = "subdivision"
|
|
18
|
+
@get external state: t => basicPlaybackState = "state"
|
|
19
|
+
@get external progress: t => normalRange = "progress"
|
|
20
|
+
@get external length: t => int = "length"
|
|
21
|
+
@get external loop: t => bool = "loop"
|
|
22
|
+
@set external setLoop: (t, bool) => unit = "loop"
|
|
23
|
+
@set external setLoopCount: (t, int) => unit = "loop"
|
|
24
|
+
@get external loopEnd: t => int = "loopEnd"
|
|
25
|
+
@set external setLoopEnd: (t, int) => unit = "loopEnd"
|
|
26
|
+
@get external loopStart: t => int = "loopStart"
|
|
27
|
+
@set external setLoopStart: (t, int) => unit = "loopStart"
|
|
28
|
+
@get external playbackRate: t => positive = "playbackRate"
|
|
29
|
+
@set external setPlaybackRate: (t, positive) => unit = "playbackRate"
|
|
30
|
+
@get external probability: t => normalRange = "probability"
|
|
31
|
+
@set external setProbability: (t, normalRange) => unit = "probability"
|
|
32
|
+
@get external mute: t => bool = "mute"
|
|
33
|
+
@set external setMute: (t, bool) => unit = "mute"
|
|
34
|
+
@get external humanize: t => bool = "humanize"
|
|
35
|
+
@set external setHumanize: (t, bool) => unit = "humanize"
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// Bindings for Tone.Signal - a schedulable signal
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
value?: float,
|
|
8
|
+
units?: string,
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@module("tone") @new external make: unit => t = "Signal"
|
|
12
|
+
@module("tone") @new external makeWithValue: float => t = "Signal"
|
|
13
|
+
@module("tone") @new external makeWithOptions: options => t = "Signal"
|
|
14
|
+
|
|
15
|
+
@get external getValue: t => float = "value"
|
|
16
|
+
@set external setValue: (t, float) => unit = "value"
|
|
17
|
+
@get external overridden: t => bool = "overridden"
|
|
18
|
+
@set external setOverridden: (t, bool) => unit = "overridden"
|
|
19
|
+
@get external maxValue: t => float = "maxValue"
|
|
20
|
+
@get external minValue: t => float = "minValue"
|
|
21
|
+
@get external units: t => string = "units"
|
|
22
|
+
@get external convert: t => bool = "convert"
|
|
23
|
+
@set external setConvert: (t, bool) => unit = "convert"
|
|
24
|
+
|
|
25
|
+
// Scheduling methods (same as Param)
|
|
26
|
+
@send external setValueAtTime: (t, float, time) => t = "setValueAtTime"
|
|
27
|
+
@send external getValueAtTime: (t, time) => float = "getValueAtTime"
|
|
28
|
+
@send external linearRampToValueAtTime: (t, float, time) => t = "linearRampToValueAtTime"
|
|
29
|
+
@send external exponentialRampToValueAtTime: (t, float, time) => t = "exponentialRampToValueAtTime"
|
|
30
|
+
@send external linearRampTo: (t, float, time) => t = "linearRampTo"
|
|
31
|
+
@send external linearRampToFrom: (t, float, time, ~startTime: time=?) => t = "linearRampTo"
|
|
32
|
+
@send external exponentialRampTo: (t, float, time) => t = "exponentialRampTo"
|
|
33
|
+
@send external exponentialRampToFrom: (t, float, time, ~startTime: time=?) => t = "exponentialRampTo"
|
|
34
|
+
@send external targetRampTo: (t, float, time) => t = "targetRampTo"
|
|
35
|
+
@send external targetRampToFrom: (t, float, time, ~startTime: time=?) => t = "targetRampTo"
|
|
36
|
+
@send external rampTo: (t, float, time) => t = "rampTo"
|
|
37
|
+
@send external rampToFrom: (t, float, time, ~startTime: time=?) => t = "rampTo"
|
|
38
|
+
@send external setRampPoint: (t, time) => t = "setRampPoint"
|
|
39
|
+
@send external setTargetAtTime: (t, float, time, float) => t = "setTargetAtTime"
|
|
40
|
+
@send external cancelScheduledValues: (t, time) => t = "cancelScheduledValues"
|
|
41
|
+
@send external cancelAndHoldAtTime: (t, time) => t = "cancelAndHoldAtTime"
|
|
42
|
+
|
|
43
|
+
@send external connect: (t, ToneJs_AudioNode.t) => t = "connect"
|
|
44
|
+
@send external dispose: t => t = "dispose"
|
|
45
|
+
|
|
46
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
47
|
+
external asParam: t => ToneJs_Param.t = "%identity"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Bindings for Tone.StereoWidener
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
width?: normalRange,
|
|
8
|
+
wet?: normalRange,
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@module("tone") @new external make: unit => t = "StereoWidener"
|
|
12
|
+
@module("tone") @new external makeWithOptions: options => t = "StereoWidener"
|
|
13
|
+
|
|
14
|
+
@get external width: t => ToneJs_Param.t = "width"
|
|
15
|
+
@get external wet: t => ToneJs_Param.t = "wet"
|
|
16
|
+
|
|
17
|
+
@send external dispose: t => t = "dispose"
|
|
18
|
+
|
|
19
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Bindings for Tone.Synth - a basic synthesizer
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
oscillator?: oscillatorOptions,
|
|
8
|
+
envelope?: envelopeOptions,
|
|
9
|
+
volume?: decibels,
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@module("tone") @new external make: unit => t = "Synth"
|
|
13
|
+
@module("tone") @new external makeWithOptions: options => t = "Synth"
|
|
14
|
+
|
|
15
|
+
// Instrument methods
|
|
16
|
+
@send external triggerAttack: (t, frequency) => t = "triggerAttack"
|
|
17
|
+
@send external triggerAttackAt: (t, frequency, ~time: time=?) => t = "triggerAttack"
|
|
18
|
+
@send external triggerAttackAtVel: (t, frequency, ~time: time=?, ~velocity: normalRange=?) => t = "triggerAttack"
|
|
19
|
+
@send external triggerRelease: (t, ~time: time=?) => t = "triggerRelease"
|
|
20
|
+
@send external triggerAttackRelease: (t, frequency, time) => t = "triggerAttackRelease"
|
|
21
|
+
@send external triggerAttackReleaseAt: (t, frequency, time, ~time: time=?) => t = "triggerAttackRelease"
|
|
22
|
+
@send external triggerAttackReleaseAtVel: (t, frequency, time, ~time: time=?, ~velocity: normalRange=?) => t = "triggerAttackRelease"
|
|
23
|
+
|
|
24
|
+
// Properties
|
|
25
|
+
@get external volume: t => ToneJs_Param.t = "volume"
|
|
26
|
+
@get external frequency: t => ToneJs_Param.t = "frequency"
|
|
27
|
+
@get external detune: t => ToneJs_Param.t = "detune"
|
|
28
|
+
|
|
29
|
+
// Lifecycle
|
|
30
|
+
@send external dispose: t => t = "dispose"
|
|
31
|
+
@send external sync: t => t = "sync"
|
|
32
|
+
@send external unsync: t => t = "unsync"
|
|
33
|
+
|
|
34
|
+
// AudioNode
|
|
35
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Top-level Tone.js module functions
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
@module("tone") external start: unit => promise<unit> = "start"
|
|
5
|
+
@module("tone") external now: unit => seconds = "now"
|
|
6
|
+
@module("tone") external immediate: unit => seconds = "immediate"
|
|
7
|
+
@module("tone") external getContext: unit => ToneJs_Context.t = "getContext"
|
|
8
|
+
@module("tone") external getTransport: unit => ToneJs_Transport.t = "getTransport"
|
|
9
|
+
@module("tone") external getDestination: unit => ToneJs_Destination.t = "getDestination"
|
|
10
|
+
@module("tone") external loaded: unit => promise<unit> = "loaded"
|
|
11
|
+
@module("tone") external supported: unit => bool = "supported"
|
|
12
|
+
@module("tone") external version: string = "version"
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// Bindings for Tone.js Transport - master timing and scheduling
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
// Lifecycle
|
|
7
|
+
@send external start: t => t = "start"
|
|
8
|
+
@send external startAt: (t, ~time: time=?) => t = "start"
|
|
9
|
+
@send external startAtWithOffset: (t, ~time: time=?, ~offset: transportTime=?) => t = "start"
|
|
10
|
+
@send external stop: t => t = "stop"
|
|
11
|
+
@send external stopAt: (t, ~time: time=?) => t = "stop"
|
|
12
|
+
@send external pause: t => t = "pause"
|
|
13
|
+
@send external pauseAt: (t, ~time: time=?) => t = "pause"
|
|
14
|
+
@send external toggle: t => t = "toggle"
|
|
15
|
+
@send external toggleAt: (t, ~time: time=?) => t = "toggle"
|
|
16
|
+
@send external cancel: t => t = "cancel"
|
|
17
|
+
@send external cancelAfter: (t, ~after: transportTime=?) => t = "cancel"
|
|
18
|
+
@send external dispose: t => t = "dispose"
|
|
19
|
+
|
|
20
|
+
// Scheduling
|
|
21
|
+
@send external schedule: (t, seconds => unit, transportTime) => int = "schedule"
|
|
22
|
+
@send external scheduleRepeat: (t, seconds => unit, time) => int = "scheduleRepeat"
|
|
23
|
+
@send external scheduleRepeatFrom: (t, seconds => unit, time, ~startTime: transportTime=?) => int = "scheduleRepeat"
|
|
24
|
+
@send external scheduleRepeatFromFor: (t, seconds => unit, time, ~startTime: transportTime=?, ~duration: time=?) => int = "scheduleRepeat"
|
|
25
|
+
@send external scheduleOnce: (t, seconds => unit, transportTime) => int = "scheduleOnce"
|
|
26
|
+
@send external clear: (t, int) => t = "clear"
|
|
27
|
+
|
|
28
|
+
// BPM
|
|
29
|
+
@get external bpm: t => ToneJs_Param.t = "bpm"
|
|
30
|
+
|
|
31
|
+
// Position
|
|
32
|
+
@get external position: t => string = "position"
|
|
33
|
+
@set external setPosition: (t, string) => unit = "position"
|
|
34
|
+
@get external seconds: t => seconds = "seconds"
|
|
35
|
+
@set external setSeconds: (t, seconds) => unit = "seconds"
|
|
36
|
+
@get external progress: t => normalRange = "progress"
|
|
37
|
+
@get external ticks: t => ticks = "ticks"
|
|
38
|
+
@set external setTicks: (t, ticks) => unit = "ticks"
|
|
39
|
+
|
|
40
|
+
// Loop
|
|
41
|
+
@get external loop: t => bool = "loop"
|
|
42
|
+
@set external setLoop: (t, bool) => unit = "loop"
|
|
43
|
+
@get external loopStart: t => time = "loopStart"
|
|
44
|
+
@set external setLoopStart: (t, time) => unit = "loopStart"
|
|
45
|
+
@get external loopEnd: t => time = "loopEnd"
|
|
46
|
+
@set external setLoopEnd: (t, time) => unit = "loopEnd"
|
|
47
|
+
@send external setLoopPoints: (t, transportTime, transportTime) => t = "setLoopPoints"
|
|
48
|
+
|
|
49
|
+
// Swing
|
|
50
|
+
@get external swing: t => normalRange = "swing"
|
|
51
|
+
@set external setSwing: (t, normalRange) => unit = "swing"
|
|
52
|
+
|
|
53
|
+
// Time signature
|
|
54
|
+
@get external timeSignature: t => int = "timeSignature"
|
|
55
|
+
@set external setTimeSignature: (t, int) => unit = "timeSignature"
|
|
56
|
+
|
|
57
|
+
// State
|
|
58
|
+
@get external state: t => playbackState = "state"
|
|
59
|
+
|
|
60
|
+
// PPQ
|
|
61
|
+
@get external ppq: t => int = "PPQ"
|
|
62
|
+
@set external setPPQ: (t, int) => unit = "PPQ"
|
|
63
|
+
|
|
64
|
+
// Timing
|
|
65
|
+
@send external getTicksAtTime: (t, time) => ticks = "getTicksAtTime"
|
|
66
|
+
@send external getSecondsAtTime: (t, time) => seconds = "getSecondsAtTime"
|
|
67
|
+
@send external nextSubdivision: (t, time) => seconds = "nextSubdivision"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Bindings for Tone.Tremolo
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
frequency?: frequency,
|
|
8
|
+
\"type"?: oscillatorType,
|
|
9
|
+
depth?: normalRange,
|
|
10
|
+
spread?: degrees,
|
|
11
|
+
wet?: normalRange,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@module("tone") @new external make: unit => t = "Tremolo"
|
|
15
|
+
@module("tone") @new external makeWithOptions: options => t = "Tremolo"
|
|
16
|
+
|
|
17
|
+
@get external frequency: t => ToneJs_Param.t = "frequency"
|
|
18
|
+
@get external depth: t => ToneJs_Param.t = "depth"
|
|
19
|
+
@get external getType: t => oscillatorType = "type"
|
|
20
|
+
@set external setType: (t, oscillatorType) => unit = "type"
|
|
21
|
+
@get external spread: t => degrees = "spread"
|
|
22
|
+
@set external setSpread: (t, degrees) => unit = "spread"
|
|
23
|
+
@get external wet: t => ToneJs_Param.t = "wet"
|
|
24
|
+
|
|
25
|
+
@send external start: (t, ~time: time=?) => t = "start"
|
|
26
|
+
@send external stop: (t, ~time: time=?) => t = "stop"
|
|
27
|
+
@send external sync: t => t = "sync"
|
|
28
|
+
@send external unsync: t => t = "unsync"
|
|
29
|
+
@send external dispose: t => t = "dispose"
|
|
30
|
+
|
|
31
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// Tone.js unit types
|
|
2
|
+
// All of these are represented as floats or strings in JavaScript
|
|
3
|
+
|
|
4
|
+
type seconds = float
|
|
5
|
+
type milliseconds = float
|
|
6
|
+
type decibels = float
|
|
7
|
+
type normalRange = float
|
|
8
|
+
type audioRange = float
|
|
9
|
+
type frequency = float
|
|
10
|
+
type hertz = float
|
|
11
|
+
type cents = float
|
|
12
|
+
type bpm = float
|
|
13
|
+
type ticks = float
|
|
14
|
+
type degrees = float
|
|
15
|
+
type positive = float
|
|
16
|
+
type gainFactor = float
|
|
17
|
+
type samples = float
|
|
18
|
+
|
|
19
|
+
// Time can be a number (seconds), a string notation ("4n", "8t", "1:2:3"), or a subdivision
|
|
20
|
+
type time
|
|
21
|
+
type transportTime = time
|
|
22
|
+
|
|
23
|
+
// Playback state
|
|
24
|
+
type playbackState =
|
|
25
|
+
| @as("started") Started
|
|
26
|
+
| @as("stopped") Stopped
|
|
27
|
+
| @as("paused") Paused
|
|
28
|
+
|
|
29
|
+
type basicPlaybackState =
|
|
30
|
+
| @as("started") Started
|
|
31
|
+
| @as("stopped") Stopped
|
|
32
|
+
|
|
33
|
+
// Oscillator types
|
|
34
|
+
type oscillatorType =
|
|
35
|
+
| @as("sine") Sine
|
|
36
|
+
| @as("square") Square
|
|
37
|
+
| @as("triangle") Triangle
|
|
38
|
+
| @as("sawtooth") Sawtooth
|
|
39
|
+
| @as("custom") Custom
|
|
40
|
+
|
|
41
|
+
// Noise types
|
|
42
|
+
type noiseType =
|
|
43
|
+
| @as("white") White
|
|
44
|
+
| @as("brown") Brown
|
|
45
|
+
| @as("pink") Pink
|
|
46
|
+
|
|
47
|
+
// Oversampling for distortion
|
|
48
|
+
type oversampleType =
|
|
49
|
+
| @as("none") None
|
|
50
|
+
| @as("2x") TwoX
|
|
51
|
+
| @as("4x") FourX
|
|
52
|
+
|
|
53
|
+
// Common option types shared across modules
|
|
54
|
+
type envelopeOptions = {
|
|
55
|
+
attack?: time,
|
|
56
|
+
decay?: time,
|
|
57
|
+
sustain?: normalRange,
|
|
58
|
+
release?: time,
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
type filterEnvelopeOptions = {
|
|
62
|
+
attack?: time,
|
|
63
|
+
decay?: time,
|
|
64
|
+
sustain?: normalRange,
|
|
65
|
+
release?: time,
|
|
66
|
+
baseFrequency?: frequency,
|
|
67
|
+
octaves?: positive,
|
|
68
|
+
exponent?: positive,
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
type oscillatorOptions = {\"type"?: oscillatorType}
|
|
72
|
+
|
|
73
|
+
type filterOptions = {
|
|
74
|
+
\"type"?: string,
|
|
75
|
+
frequency?: frequency,
|
|
76
|
+
rolloff?: int,
|
|
77
|
+
q?: positive,
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Helpers to create time values
|
|
81
|
+
module Time = {
|
|
82
|
+
external fromFloat: float => time = "%identity"
|
|
83
|
+
external fromString: string => time = "%identity"
|
|
84
|
+
external toFloat: time => float = "%identity"
|
|
85
|
+
|
|
86
|
+
let seconds = (s: float): time => fromFloat(s)
|
|
87
|
+
let notation = (s: string): time => fromString(s)
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Helpers to create frequency values
|
|
91
|
+
module Frequency = {
|
|
92
|
+
let hz = (f: float): frequency => f
|
|
93
|
+
external fromNotation: string => frequency = "%identity"
|
|
94
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Bindings for Tone.Vibrato
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
frequency?: frequency,
|
|
8
|
+
\"type"?: oscillatorType,
|
|
9
|
+
depth?: normalRange,
|
|
10
|
+
maxDelay?: seconds,
|
|
11
|
+
wet?: normalRange,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@module("tone") @new external make: unit => t = "Vibrato"
|
|
15
|
+
@module("tone") @new external makeWithOptions: options => t = "Vibrato"
|
|
16
|
+
|
|
17
|
+
@get external frequency: t => ToneJs_Param.t = "frequency"
|
|
18
|
+
@get external depth: t => ToneJs_Param.t = "depth"
|
|
19
|
+
@get external getType: t => oscillatorType = "type"
|
|
20
|
+
@set external setType: (t, oscillatorType) => unit = "type"
|
|
21
|
+
@get external wet: t => ToneJs_Param.t = "wet"
|
|
22
|
+
|
|
23
|
+
@send external dispose: t => t = "dispose"
|
|
24
|
+
|
|
25
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Bindings for Tone.Volume
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
volume?: decibels,
|
|
8
|
+
mute?: bool,
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@module("tone") @new external make: unit => t = "Volume"
|
|
12
|
+
@module("tone") @new external makeWithVolume: decibels => t = "Volume"
|
|
13
|
+
@module("tone") @new external makeWithOptions: options => t = "Volume"
|
|
14
|
+
|
|
15
|
+
@get external volume: t => ToneJs_Param.t = "volume"
|
|
16
|
+
@get external mute: t => bool = "mute"
|
|
17
|
+
@set external setMute: (t, bool) => unit = "mute"
|
|
18
|
+
|
|
19
|
+
@send external dispose: t => t = "dispose"
|
|
20
|
+
|
|
21
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|