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.
Files changed (52) hide show
  1. package/README.md +175 -0
  2. package/package.json +44 -0
  3. package/src/ToneJs.res +64 -0
  4. package/src/ToneJs.res.js +150 -0
  5. package/src/ToneJs_AMSynth.res +34 -0
  6. package/src/ToneJs_AudioNode.res +20 -0
  7. package/src/ToneJs_AutoFilter.res +33 -0
  8. package/src/ToneJs_AutoPanner.res +26 -0
  9. package/src/ToneJs_AutoWah.res +31 -0
  10. package/src/ToneJs_BitCrusher.res +20 -0
  11. package/src/ToneJs_Channel.res +33 -0
  12. package/src/ToneJs_Chebyshev.res +24 -0
  13. package/src/ToneJs_Chorus.res +37 -0
  14. package/src/ToneJs_Compressor.res +28 -0
  15. package/src/ToneJs_Context.res +21 -0
  16. package/src/ToneJs_CrossFade.res +20 -0
  17. package/src/ToneJs_Destination.res +12 -0
  18. package/src/ToneJs_Distortion.res +24 -0
  19. package/src/ToneJs_EQ3.res +25 -0
  20. package/src/ToneJs_Event.res +28 -0
  21. package/src/ToneJs_FMSynth.res +35 -0
  22. package/src/ToneJs_FeedbackDelay.res +24 -0
  23. package/src/ToneJs_Filter.res +46 -0
  24. package/src/ToneJs_Freeverb.res +21 -0
  25. package/src/ToneJs_FrequencyShifter.res +19 -0
  26. package/src/ToneJs_Gain.res +19 -0
  27. package/src/ToneJs_Gate.res +21 -0
  28. package/src/ToneJs_JCReverb.res +19 -0
  29. package/src/ToneJs_Limiter.res +19 -0
  30. package/src/ToneJs_Loop.res +39 -0
  31. package/src/ToneJs_MonoSynth.res +33 -0
  32. package/src/ToneJs_Noise.res +38 -0
  33. package/src/ToneJs_Oscillator.res +44 -0
  34. package/src/ToneJs_Panner.res +19 -0
  35. package/src/ToneJs_Param.res +24 -0
  36. package/src/ToneJs_Part.res +36 -0
  37. package/src/ToneJs_Phaser.res +28 -0
  38. package/src/ToneJs_PingPongDelay.res +24 -0
  39. package/src/ToneJs_PitchShift.res +27 -0
  40. package/src/ToneJs_Player.res +60 -0
  41. package/src/ToneJs_PolySynth.res +37 -0
  42. package/src/ToneJs_Reverb.res +26 -0
  43. package/src/ToneJs_Sequence.res +35 -0
  44. package/src/ToneJs_Signal.res +47 -0
  45. package/src/ToneJs_StereoWidener.res +19 -0
  46. package/src/ToneJs_Synth.res +35 -0
  47. package/src/ToneJs_Tone.res +12 -0
  48. package/src/ToneJs_Transport.res +67 -0
  49. package/src/ToneJs_Tremolo.res +31 -0
  50. package/src/ToneJs_Types.res +94 -0
  51. package/src/ToneJs_Vibrato.res +25 -0
  52. 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"