rescript-tone 0.1.0 → 1.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 +47 -57
- package/package.json +2 -2
- package/src/{ToneJs_AMSynth.res → AMSynth.res} +5 -5
- package/src/{ToneJs_AutoFilter.res → AutoFilter.res} +5 -5
- package/src/{ToneJs_AutoPanner.res → AutoPanner.res} +5 -5
- package/src/{ToneJs_AutoWah.res → AutoWah.res} +5 -5
- package/src/{ToneJs_BitCrusher.res → BitCrusher.res} +4 -4
- package/src/{ToneJs_Channel.res → Channel.res} +6 -6
- package/src/{ToneJs_Chebyshev.res → Chebyshev.res} +3 -3
- package/src/{ToneJs_Chorus.res → Chorus.res} +4 -4
- package/src/{ToneJs_Compressor.res → Compressor.res} +7 -7
- package/src/{ToneJs_Context.res → Context.res} +1 -1
- package/src/{ToneJs_Tone.res → Core.res} +4 -4
- package/src/{ToneJs_CrossFade.res → CrossFade.res} +5 -5
- package/src/{ToneJs_Destination.res → Destination.res} +2 -2
- package/src/{ToneJs_Distortion.res → Distortion.res} +3 -3
- package/src/{ToneJs_EQ3.res → EQ3.res} +7 -7
- package/src/{ToneJs_Event.res → Event.res} +1 -1
- package/src/{ToneJs_FMSynth.res → FMSynth.res} +5 -5
- package/src/{ToneJs_FeedbackDelay.res → FeedbackDelay.res} +5 -5
- package/src/{ToneJs_Filter.res → Filter.res} +6 -6
- package/src/{ToneJs_Freeverb.res → Freeverb.res} +5 -5
- package/src/{ToneJs_FrequencyShifter.res → FrequencyShifter.res} +4 -4
- package/src/{ToneJs_Gain.res → Gain.res} +3 -3
- package/src/{ToneJs_Gate.res → Gate.res} +3 -3
- package/src/{ToneJs_JCReverb.res → JCReverb.res} +4 -4
- package/src/{ToneJs_Limiter.res → Limiter.res} +3 -3
- package/src/{ToneJs_Loop.res → Loop.res} +1 -1
- package/src/{ToneJs_MonoSynth.res → MonoSynth.res} +5 -5
- package/src/{ToneJs_Noise.res → Noise.res} +3 -3
- package/src/{ToneJs_Oscillator.res → Oscillator.res} +5 -5
- package/src/{ToneJs_Panner.res → Panner.res} +3 -3
- package/src/{ToneJs_Param.res → Param.res} +1 -1
- package/src/{ToneJs_Part.res → Part.res} +2 -2
- package/src/{ToneJs_Phaser.res → Phaser.res} +5 -5
- package/src/{ToneJs_PingPongDelay.res → PingPongDelay.res} +5 -5
- package/src/{ToneJs_PitchShift.res → PitchShift.res} +5 -5
- package/src/{ToneJs_Player.res → Player.res} +3 -3
- package/src/{ToneJs_PolySynth.res → PolySynth.res} +3 -3
- package/src/{ToneJs_Reverb.res → Reverb.res} +3 -3
- package/src/{ToneJs_Sequence.res → Sequence.res} +1 -1
- package/src/{ToneJs_Signal.res → Signal.res} +4 -4
- package/src/{ToneJs_StereoWidener.res → StereoWidener.res} +4 -4
- package/src/{ToneJs_Synth.res → Synth.res} +5 -5
- package/src/{ToneJs_Transport.res → Transport.res} +2 -2
- package/src/{ToneJs_Tremolo.res → Tremolo.res} +5 -5
- package/src/{ToneJs_Vibrato.res → Vibrato.res} +5 -5
- package/src/{ToneJs_Volume.res → Volume.res} +3 -3
- package/src/ToneJs.res +0 -64
- package/src/ToneJs.res.js +0 -150
- /package/src/{ToneJs_AudioNode.res → AudioNode.res} +0 -0
- /package/src/{ToneJs_Types.res → Types.res} +0 -0
package/README.md
CHANGED
|
@@ -19,17 +19,15 @@ Add to your `rescript.json`:
|
|
|
19
19
|
## Quick Start
|
|
20
20
|
|
|
21
21
|
```rescript
|
|
22
|
-
open RescriptTone
|
|
23
|
-
|
|
24
22
|
// Create a synth and connect it to the speakers
|
|
25
|
-
let synth =
|
|
26
|
-
let node = synth->
|
|
23
|
+
let synth = Tone.Synth.make()
|
|
24
|
+
let node = synth->Tone.Synth.asAudioNode->Tone.AudioNode.toDestination
|
|
27
25
|
|
|
28
26
|
// Play a note
|
|
29
|
-
let _ = synth->
|
|
27
|
+
let _ = synth->Tone.Synth.triggerAttackRelease(440.0, Tone.Types.Time.seconds(0.5))
|
|
30
28
|
|
|
31
29
|
// Start the audio context (required by browsers)
|
|
32
|
-
let _ =
|
|
30
|
+
let _ = Tone.Core.start()
|
|
33
31
|
```
|
|
34
32
|
|
|
35
33
|
## Usage Examples
|
|
@@ -37,106 +35,96 @@ let _ = ToneJs_Tone.start()
|
|
|
37
35
|
### Playing Notes with a Synth
|
|
38
36
|
|
|
39
37
|
```rescript
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
let synth = ToneJs_Synth.makeWithOptions({
|
|
43
|
-
oscillator: ?Some({\"type": ?Some(ToneJs_Types.Sawtooth)}),
|
|
38
|
+
let synth = Tone.Synth.makeWithOptions({
|
|
39
|
+
oscillator: ?Some({\"type": ?Some(Tone.Types.Sawtooth)}),
|
|
44
40
|
envelope: ?Some({
|
|
45
|
-
attack: ?Some(
|
|
46
|
-
decay: ?Some(
|
|
41
|
+
attack: ?Some(Tone.Types.Time.seconds(0.1)),
|
|
42
|
+
decay: ?Some(Tone.Types.Time.seconds(0.2)),
|
|
47
43
|
sustain: ?Some(0.5),
|
|
48
|
-
release: ?Some(
|
|
44
|
+
release: ?Some(Tone.Types.Time.seconds(0.8)),
|
|
49
45
|
}),
|
|
50
46
|
})
|
|
51
47
|
|
|
52
|
-
let _ = synth->
|
|
53
|
-
let _ = synth->
|
|
48
|
+
let _ = synth->Tone.Synth.asAudioNode->Tone.AudioNode.toDestination
|
|
49
|
+
let _ = synth->Tone.Synth.triggerAttackRelease(440.0, Tone.Types.Time.seconds(0.5))
|
|
54
50
|
```
|
|
55
51
|
|
|
56
52
|
### Chaining Effects
|
|
57
53
|
|
|
58
54
|
```rescript
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
let
|
|
62
|
-
let
|
|
63
|
-
let delay = ToneJs_FeedbackDelay.makeWithTimeFeedback(ToneJs_Types.Time.notation("8n"), 0.5)
|
|
64
|
-
let dest = ToneJs_Tone.getDestination()
|
|
55
|
+
let synth = Tone.Synth.make()
|
|
56
|
+
let reverb = Tone.Reverb.makeWithDecay(1.5)
|
|
57
|
+
let delay = Tone.FeedbackDelay.makeWithTimeFeedback(Tone.Types.Time.notation("8n"), 0.5)
|
|
58
|
+
let dest = Tone.Core.getDestination()
|
|
65
59
|
|
|
66
60
|
// Chain: synth -> delay -> reverb -> destination
|
|
67
61
|
let _ = synth
|
|
68
|
-
->
|
|
69
|
-
->
|
|
70
|
-
delay->
|
|
71
|
-
reverb->
|
|
72
|
-
dest->
|
|
62
|
+
->Tone.Synth.asAudioNode
|
|
63
|
+
->Tone.AudioNode.chain([
|
|
64
|
+
delay->Tone.FeedbackDelay.asAudioNode,
|
|
65
|
+
reverb->Tone.Reverb.asAudioNode,
|
|
66
|
+
dest->Tone.Destination.asAudioNode,
|
|
73
67
|
])
|
|
74
68
|
```
|
|
75
69
|
|
|
76
70
|
### Scheduling with Transport
|
|
77
71
|
|
|
78
72
|
```rescript
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
let synth = ToneJs_Synth.make()
|
|
82
|
-
let _ = synth->ToneJs_Synth.asAudioNode->ToneJs_AudioNode.toDestination
|
|
73
|
+
let synth = Tone.Synth.make()
|
|
74
|
+
let _ = synth->Tone.Synth.asAudioNode->Tone.AudioNode.toDestination
|
|
83
75
|
|
|
84
|
-
let transport =
|
|
76
|
+
let transport = Tone.Core.getTransport()
|
|
85
77
|
|
|
86
78
|
// Set BPM
|
|
87
|
-
let bpm = transport->
|
|
88
|
-
|
|
79
|
+
let bpm = transport->Tone.Transport.bpm
|
|
80
|
+
Tone.Param.setValue(bpm, 120.0)
|
|
89
81
|
|
|
90
82
|
// Schedule a repeating note
|
|
91
|
-
let _ = transport->
|
|
83
|
+
let _ = transport->Tone.Transport.scheduleRepeat(
|
|
92
84
|
_time => {
|
|
93
|
-
let _ = synth->
|
|
85
|
+
let _ = synth->Tone.Synth.triggerAttackRelease(440.0, Tone.Types.Time.notation("8n"))
|
|
94
86
|
},
|
|
95
|
-
|
|
87
|
+
Tone.Types.Time.notation("4n"),
|
|
96
88
|
)
|
|
97
89
|
|
|
98
90
|
// Start the transport
|
|
99
|
-
let _ = transport->
|
|
91
|
+
let _ = transport->Tone.Transport.start
|
|
100
92
|
```
|
|
101
93
|
|
|
102
94
|
### Looping Patterns
|
|
103
95
|
|
|
104
96
|
```rescript
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
let synth = ToneJs_Synth.make()
|
|
108
|
-
let _ = synth->ToneJs_Synth.asAudioNode->ToneJs_AudioNode.toDestination
|
|
97
|
+
let synth = Tone.Synth.make()
|
|
98
|
+
let _ = synth->Tone.Synth.asAudioNode->Tone.AudioNode.toDestination
|
|
109
99
|
|
|
110
100
|
let notes = ["C4", "E4", "G4", "B4"]
|
|
111
101
|
|
|
112
|
-
let seq =
|
|
102
|
+
let seq = Tone.Sequence.makeWithSubdivision(
|
|
113
103
|
(time, note) => {
|
|
114
|
-
let _ = synth->
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
~time=
|
|
104
|
+
let _ = synth->Tone.Synth.triggerAttackReleaseAt(
|
|
105
|
+
Tone.Types.Frequency.fromNotation(note),
|
|
106
|
+
Tone.Types.Time.notation("8n"),
|
|
107
|
+
~time=Tone.Types.Time.fromFloat(time),
|
|
118
108
|
)
|
|
119
109
|
},
|
|
120
110
|
notes,
|
|
121
|
-
|
|
111
|
+
Tone.Types.Time.notation("4n"),
|
|
122
112
|
)
|
|
123
113
|
|
|
124
|
-
let _ = seq->
|
|
125
|
-
let _ =
|
|
114
|
+
let _ = seq->Tone.Sequence.start
|
|
115
|
+
let _ = Tone.Core.getTransport()->Tone.Transport.start
|
|
126
116
|
```
|
|
127
117
|
|
|
128
118
|
### Polyphonic Synth
|
|
129
119
|
|
|
130
120
|
```rescript
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
let poly = ToneJs_PolySynth.makeWithOptions({maxPolyphony: ?Some(4)})
|
|
134
|
-
let _ = poly->ToneJs_PolySynth.asAudioNode->ToneJs_AudioNode.toDestination
|
|
121
|
+
let poly = Tone.PolySynth.makeWithOptions({maxPolyphony: ?Some(4)})
|
|
122
|
+
let _ = poly->Tone.PolySynth.asAudioNode->Tone.AudioNode.toDestination
|
|
135
123
|
|
|
136
124
|
// Play a chord
|
|
137
|
-
let _ = poly->
|
|
125
|
+
let _ = poly->Tone.PolySynth.triggerAttackRelease(
|
|
138
126
|
[261.63, 329.63, 392.0],
|
|
139
|
-
|
|
127
|
+
Tone.Types.Time.seconds(1.0),
|
|
140
128
|
)
|
|
141
129
|
```
|
|
142
130
|
|
|
@@ -150,7 +138,7 @@ The library is organized into modules that mirror Tone.js's structure:
|
|
|
150
138
|
|
|
151
139
|
| Category | Modules |
|
|
152
140
|
|----------|---------|
|
|
153
|
-
| **Core** | `
|
|
141
|
+
| **Core** | `Core`, `Context`, `Transport`, `Destination`, `Param`, `AudioNode`, `Types` |
|
|
154
142
|
| **Instruments** | `Synth`, `AMSynth`, `FMSynth`, `MonoSynth`, `PolySynth` |
|
|
155
143
|
| **Sources** | `Oscillator`, `Player`, `Noise` |
|
|
156
144
|
| **Effects** | `Reverb`, `FeedbackDelay`, `Chorus`, `Distortion`, `AutoFilter`, `AutoPanner`, `AutoWah`, `BitCrusher`, `Chebyshev`, `Freeverb`, `JCReverb`, `Phaser`, `PingPongDelay`, `PitchShift`, `Tremolo`, `Vibrato`, `FrequencyShifter`, `StereoWidener` |
|
|
@@ -158,11 +146,13 @@ The library is organized into modules that mirror Tone.js's structure:
|
|
|
158
146
|
| **Signal & Channel** | `Signal`, `Volume`, `Gain`, `Channel`, `CrossFade` |
|
|
159
147
|
| **Scheduling** | `Loop`, `Event`, `Part`, `Sequence` |
|
|
160
148
|
|
|
149
|
+
All modules are accessible under the `Tone` namespace (e.g., `Tone.Synth.make()`, `Tone.Reverb.makeWithDecay(1.5)`).
|
|
150
|
+
|
|
161
151
|
Each Tone.js class maps to a ReScript module with an abstract `type t`. Modules expose:
|
|
162
152
|
- `make` / `makeWithOptions` constructors
|
|
163
153
|
- `@send` methods for instance operations
|
|
164
154
|
- `@get` / `@set` for properties
|
|
165
|
-
- `asAudioNode` for casting to the base `
|
|
155
|
+
- `asAudioNode` for casting to the base `AudioNode.t` type (for `connect`, `chain`, etc.)
|
|
166
156
|
|
|
167
157
|
## Requirements
|
|
168
158
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rescript-tone",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "ReScript bindings for Tone.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"url": "https://github.com/brnrdog/rescript-tone.git",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"files": [
|
|
20
20
|
"src/**/*.res"
|
|
21
21
|
],
|
|
22
|
-
"main": "src/
|
|
22
|
+
"main": "src/Tone.res.js",
|
|
23
23
|
"scripts": {
|
|
24
24
|
"res:build": "rescript",
|
|
25
25
|
"res:dev": "rescript -w",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.AMSynth - AM synthesis
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -23,12 +23,12 @@ type options = {
|
|
|
23
23
|
@send external triggerAttackReleaseAt: (t, frequency, time, ~time: time=?) => t = "triggerAttackRelease"
|
|
24
24
|
@send external triggerAttackReleaseAtVel: (t, frequency, time, ~time: time=?, ~velocity: normalRange=?) => t = "triggerAttackRelease"
|
|
25
25
|
|
|
26
|
-
@get external volume: t =>
|
|
27
|
-
@get external frequency: t =>
|
|
28
|
-
@get external detune: t =>
|
|
26
|
+
@get external volume: t => Param.t = "volume"
|
|
27
|
+
@get external frequency: t => Param.t = "frequency"
|
|
28
|
+
@get external detune: t => Param.t = "detune"
|
|
29
29
|
|
|
30
30
|
@send external dispose: t => t = "dispose"
|
|
31
31
|
@send external sync: t => t = "sync"
|
|
32
32
|
@send external unsync: t => t = "unsync"
|
|
33
33
|
|
|
34
|
-
external asAudioNode: t =>
|
|
34
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.AutoFilter
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -16,9 +16,9 @@ type options = {
|
|
|
16
16
|
@module("tone") @new external make: unit => t = "AutoFilter"
|
|
17
17
|
@module("tone") @new external makeWithOptions: options => t = "AutoFilter"
|
|
18
18
|
|
|
19
|
-
@get external frequency: t =>
|
|
20
|
-
@get external depth: t =>
|
|
21
|
-
@get external wet: t =>
|
|
19
|
+
@get external frequency: t => Param.t = "frequency"
|
|
20
|
+
@get external depth: t => Param.t = "depth"
|
|
21
|
+
@get external wet: t => Param.t = "wet"
|
|
22
22
|
@get external octaves: t => positive = "octaves"
|
|
23
23
|
@set external setOctaves: (t, positive) => unit = "octaves"
|
|
24
24
|
@get external baseFrequency: t => frequency = "baseFrequency"
|
|
@@ -30,4 +30,4 @@ type options = {
|
|
|
30
30
|
@send external unsync: t => t = "unsync"
|
|
31
31
|
@send external dispose: t => t = "dispose"
|
|
32
32
|
|
|
33
|
-
external asAudioNode: t =>
|
|
33
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.AutoPanner
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -13,9 +13,9 @@ type options = {
|
|
|
13
13
|
@module("tone") @new external make: unit => t = "AutoPanner"
|
|
14
14
|
@module("tone") @new external makeWithOptions: options => t = "AutoPanner"
|
|
15
15
|
|
|
16
|
-
@get external frequency: t =>
|
|
17
|
-
@get external depth: t =>
|
|
18
|
-
@get external wet: t =>
|
|
16
|
+
@get external frequency: t => Param.t = "frequency"
|
|
17
|
+
@get external depth: t => Param.t = "depth"
|
|
18
|
+
@get external wet: t => Param.t = "wet"
|
|
19
19
|
|
|
20
20
|
@send external start: (t, ~time: time=?) => t = "start"
|
|
21
21
|
@send external stop: (t, ~time: time=?) => t = "stop"
|
|
@@ -23,4 +23,4 @@ type options = {
|
|
|
23
23
|
@send external unsync: t => t = "unsync"
|
|
24
24
|
@send external dispose: t => t = "dispose"
|
|
25
25
|
|
|
26
|
-
external asAudioNode: t =>
|
|
26
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.AutoWah
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -16,9 +16,9 @@ type options = {
|
|
|
16
16
|
@module("tone") @new external make: unit => t = "AutoWah"
|
|
17
17
|
@module("tone") @new external makeWithOptions: options => t = "AutoWah"
|
|
18
18
|
|
|
19
|
-
@get external gain: t =>
|
|
20
|
-
@get external q: t =>
|
|
21
|
-
@get external wet: t =>
|
|
19
|
+
@get external gain: t => Param.t = "gain"
|
|
20
|
+
@get external q: t => Param.t = "Q"
|
|
21
|
+
@get external wet: t => Param.t = "wet"
|
|
22
22
|
@get external octaves: t => positive = "octaves"
|
|
23
23
|
@set external setOctaves: (t, positive) => unit = "octaves"
|
|
24
24
|
@get external baseFrequency: t => frequency = "baseFrequency"
|
|
@@ -28,4 +28,4 @@ type options = {
|
|
|
28
28
|
|
|
29
29
|
@send external dispose: t => t = "dispose"
|
|
30
30
|
|
|
31
|
-
external asAudioNode: t =>
|
|
31
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.BitCrusher
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -12,9 +12,9 @@ type options = {
|
|
|
12
12
|
@module("tone") @new external makeWithBits: positive => t = "BitCrusher"
|
|
13
13
|
@module("tone") @new external makeWithOptions: options => t = "BitCrusher"
|
|
14
14
|
|
|
15
|
-
@get external bits: t =>
|
|
16
|
-
@get external wet: t =>
|
|
15
|
+
@get external bits: t => Param.t = "bits"
|
|
16
|
+
@get external wet: t => Param.t = "wet"
|
|
17
17
|
|
|
18
18
|
@send external dispose: t => t = "dispose"
|
|
19
19
|
|
|
20
|
-
external asAudioNode: t =>
|
|
20
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.Channel - routing and mixing
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -16,18 +16,18 @@ type options = {
|
|
|
16
16
|
@module("tone") @new external makeWithVolumePan: (decibels, audioRange) => t = "Channel"
|
|
17
17
|
@module("tone") @new external makeWithOptions: options => t = "Channel"
|
|
18
18
|
|
|
19
|
-
@get external pan: t =>
|
|
20
|
-
@get external volume: t =>
|
|
19
|
+
@get external pan: t => Param.t = "pan"
|
|
20
|
+
@get external volume: t => Param.t = "volume"
|
|
21
21
|
@get external solo: t => bool = "solo"
|
|
22
22
|
@set external setSolo: (t, bool) => unit = "solo"
|
|
23
23
|
@get external mute: t => bool = "mute"
|
|
24
24
|
@set external setMute: (t, bool) => unit = "mute"
|
|
25
25
|
@get external muted: t => bool = "muted"
|
|
26
26
|
|
|
27
|
-
@send external send: (t, string) =>
|
|
28
|
-
@send external sendWithVolume: (t, string, ~volume: decibels=?) =>
|
|
27
|
+
@send external send: (t, string) => Gain.t = "send"
|
|
28
|
+
@send external sendWithVolume: (t, string, ~volume: decibels=?) => Gain.t = "send"
|
|
29
29
|
@send external receive: (t, string) => t = "receive"
|
|
30
30
|
|
|
31
31
|
@send external dispose: t => t = "dispose"
|
|
32
32
|
|
|
33
|
-
external asAudioNode: t =>
|
|
33
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.Chebyshev - waveshaping distortion
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -17,8 +17,8 @@ type options = {
|
|
|
17
17
|
@set external setOrder: (t, int) => unit = "order"
|
|
18
18
|
@get external oversample: t => oversampleType = "oversample"
|
|
19
19
|
@set external setOversample: (t, oversampleType) => unit = "oversample"
|
|
20
|
-
@get external wet: t =>
|
|
20
|
+
@get external wet: t => Param.t = "wet"
|
|
21
21
|
|
|
22
22
|
@send external dispose: t => t = "dispose"
|
|
23
23
|
|
|
24
|
-
external asAudioNode: t =>
|
|
24
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.Chorus
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -17,7 +17,7 @@ type options = {
|
|
|
17
17
|
@module("tone") @new external makeWithArgs: (frequency, milliseconds, normalRange) => t = "Chorus"
|
|
18
18
|
@module("tone") @new external makeWithOptions: options => t = "Chorus"
|
|
19
19
|
|
|
20
|
-
@get external frequency: t =>
|
|
20
|
+
@get external frequency: t => Param.t = "frequency"
|
|
21
21
|
@get external depth: t => normalRange = "depth"
|
|
22
22
|
@set external setDepth: (t, normalRange) => unit = "depth"
|
|
23
23
|
@get external delayTime: t => milliseconds = "delayTime"
|
|
@@ -26,7 +26,7 @@ type options = {
|
|
|
26
26
|
@set external setType: (t, oscillatorType) => unit = "type"
|
|
27
27
|
@get external spread: t => degrees = "spread"
|
|
28
28
|
@set external setSpread: (t, degrees) => unit = "spread"
|
|
29
|
-
@get external wet: t =>
|
|
29
|
+
@get external wet: t => Param.t = "wet"
|
|
30
30
|
|
|
31
31
|
@send external start: (t, ~time: time=?) => t = "start"
|
|
32
32
|
@send external stop: (t, ~time: time=?) => t = "stop"
|
|
@@ -34,4 +34,4 @@ type options = {
|
|
|
34
34
|
@send external unsync: t => t = "unsync"
|
|
35
35
|
@send external dispose: t => t = "dispose"
|
|
36
36
|
|
|
37
|
-
external asAudioNode: t =>
|
|
37
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.Compressor
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -16,13 +16,13 @@ type options = {
|
|
|
16
16
|
@module("tone") @new external makeWithThresholdRatio: (decibels, positive) => t = "Compressor"
|
|
17
17
|
@module("tone") @new external makeWithOptions: options => t = "Compressor"
|
|
18
18
|
|
|
19
|
-
@get external threshold: t =>
|
|
20
|
-
@get external ratio: t =>
|
|
21
|
-
@get external attack: t =>
|
|
22
|
-
@get external release: t =>
|
|
23
|
-
@get external knee: t =>
|
|
19
|
+
@get external threshold: t => Param.t = "threshold"
|
|
20
|
+
@get external ratio: t => Param.t = "ratio"
|
|
21
|
+
@get external attack: t => Param.t = "attack"
|
|
22
|
+
@get external release: t => Param.t = "release"
|
|
23
|
+
@get external knee: t => Param.t = "knee"
|
|
24
24
|
@get external reduction: t => decibels = "reduction"
|
|
25
25
|
|
|
26
26
|
@send external dispose: t => t = "dispose"
|
|
27
27
|
|
|
28
|
-
external asAudioNode: t =>
|
|
28
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// Top-level Tone.js module functions
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
@module("tone") external start: unit => promise<unit> = "start"
|
|
5
5
|
@module("tone") external now: unit => seconds = "now"
|
|
6
6
|
@module("tone") external immediate: unit => seconds = "immediate"
|
|
7
|
-
@module("tone") external getContext: unit =>
|
|
8
|
-
@module("tone") external getTransport: unit =>
|
|
9
|
-
@module("tone") external getDestination: unit =>
|
|
7
|
+
@module("tone") external getContext: unit => Context.t = "getContext"
|
|
8
|
+
@module("tone") external getTransport: unit => Transport.t = "getTransport"
|
|
9
|
+
@module("tone") external getDestination: unit => Destination.t = "getDestination"
|
|
10
10
|
@module("tone") external loaded: unit => promise<unit> = "loaded"
|
|
11
11
|
@module("tone") external supported: unit => bool = "supported"
|
|
12
12
|
@module("tone") external version: string = "version"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.CrossFade
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -11,10 +11,10 @@ type options = {
|
|
|
11
11
|
@module("tone") @new external makeWithFade: normalRange => t = "CrossFade"
|
|
12
12
|
@module("tone") @new external makeWithOptions: options => t = "CrossFade"
|
|
13
13
|
|
|
14
|
-
@get external fade: t =>
|
|
15
|
-
@get external a: t =>
|
|
16
|
-
@get external b: t =>
|
|
14
|
+
@get external fade: t => Param.t = "fade"
|
|
15
|
+
@get external a: t => Gain.t = "a"
|
|
16
|
+
@get external b: t => Gain.t = "b"
|
|
17
17
|
|
|
18
18
|
@send external dispose: t => t = "dispose"
|
|
19
19
|
|
|
20
|
-
external asAudioNode: t =>
|
|
20
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
type t
|
|
4
4
|
|
|
5
|
-
@get external volume: t =>
|
|
5
|
+
@get external volume: t => Param.t = "volume"
|
|
6
6
|
@get external mute: t => bool = "mute"
|
|
7
7
|
@set external setMute: (t, bool) => unit = "mute"
|
|
8
8
|
@get external maxChannelCount: t => int = "maxChannelCount"
|
|
9
9
|
@send external dispose: t => t = "dispose"
|
|
10
10
|
|
|
11
11
|
// Destination is also an AudioNode, so it can be connected to
|
|
12
|
-
external asAudioNode: t =>
|
|
12
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.Distortion
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -17,8 +17,8 @@ type options = {
|
|
|
17
17
|
@set external setDistortion: (t, float) => unit = "distortion"
|
|
18
18
|
@get external oversample: t => oversampleType = "oversample"
|
|
19
19
|
@set external setOversample: (t, oversampleType) => unit = "oversample"
|
|
20
|
-
@get external wet: t =>
|
|
20
|
+
@get external wet: t => Param.t = "wet"
|
|
21
21
|
|
|
22
22
|
@send external dispose: t => t = "dispose"
|
|
23
23
|
|
|
24
|
-
external asAudioNode: t =>
|
|
24
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.EQ3 - 3-band equalizer
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -14,12 +14,12 @@ type options = {
|
|
|
14
14
|
@module("tone") @new external make: unit => t = "EQ3"
|
|
15
15
|
@module("tone") @new external makeWithOptions: options => t = "EQ3"
|
|
16
16
|
|
|
17
|
-
@get external low: t =>
|
|
18
|
-
@get external mid: t =>
|
|
19
|
-
@get external high: t =>
|
|
20
|
-
@get external lowFrequency: t =>
|
|
21
|
-
@get external highFrequency: t =>
|
|
17
|
+
@get external low: t => Param.t = "low"
|
|
18
|
+
@get external mid: t => Param.t = "mid"
|
|
19
|
+
@get external high: t => Param.t = "high"
|
|
20
|
+
@get external lowFrequency: t => Param.t = "lowFrequency"
|
|
21
|
+
@get external highFrequency: t => Param.t = "highFrequency"
|
|
22
22
|
|
|
23
23
|
@send external dispose: t => t = "dispose"
|
|
24
24
|
|
|
25
|
-
external asAudioNode: t =>
|
|
25
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.FMSynth - FM synthesis
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -24,12 +24,12 @@ type options = {
|
|
|
24
24
|
@send external triggerAttackReleaseAt: (t, frequency, time, ~time: time=?) => t = "triggerAttackRelease"
|
|
25
25
|
@send external triggerAttackReleaseAtVel: (t, frequency, time, ~time: time=?, ~velocity: normalRange=?) => t = "triggerAttackRelease"
|
|
26
26
|
|
|
27
|
-
@get external volume: t =>
|
|
28
|
-
@get external frequency: t =>
|
|
29
|
-
@get external detune: t =>
|
|
27
|
+
@get external volume: t => Param.t = "volume"
|
|
28
|
+
@get external frequency: t => Param.t = "frequency"
|
|
29
|
+
@get external detune: t => Param.t = "detune"
|
|
30
30
|
|
|
31
31
|
@send external dispose: t => t = "dispose"
|
|
32
32
|
@send external sync: t => t = "sync"
|
|
33
33
|
@send external unsync: t => t = "unsync"
|
|
34
34
|
|
|
35
|
-
external asAudioNode: t =>
|
|
35
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.FeedbackDelay
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -15,10 +15,10 @@ type options = {
|
|
|
15
15
|
@module("tone") @new external makeWithTimeFeedback: (time, normalRange) => t = "FeedbackDelay"
|
|
16
16
|
@module("tone") @new external makeWithOptions: options => t = "FeedbackDelay"
|
|
17
17
|
|
|
18
|
-
@get external delayTime: t =>
|
|
19
|
-
@get external feedback: t =>
|
|
20
|
-
@get external wet: t =>
|
|
18
|
+
@get external delayTime: t => Param.t = "delayTime"
|
|
19
|
+
@get external feedback: t => Param.t = "feedback"
|
|
20
|
+
@get external wet: t => Param.t = "wet"
|
|
21
21
|
|
|
22
22
|
@send external dispose: t => t = "dispose"
|
|
23
23
|
|
|
24
|
-
external asAudioNode: t =>
|
|
24
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Bindings for Tone.Filter
|
|
2
|
-
open
|
|
2
|
+
open Types
|
|
3
3
|
|
|
4
4
|
type t
|
|
5
5
|
|
|
@@ -31,10 +31,10 @@ type options = {
|
|
|
31
31
|
@module("tone") @new external makeWithFreq: frequency => t = "Filter"
|
|
32
32
|
@module("tone") @new external makeWithOptions: options => t = "Filter"
|
|
33
33
|
|
|
34
|
-
@get external frequency: t =>
|
|
35
|
-
@get external q: t =>
|
|
36
|
-
@get external gain: t =>
|
|
37
|
-
@get external detune: t =>
|
|
34
|
+
@get external frequency: t => Param.t = "frequency"
|
|
35
|
+
@get external q: t => Param.t = "Q"
|
|
36
|
+
@get external gain: t => Param.t = "gain"
|
|
37
|
+
@get external detune: t => Param.t = "detune"
|
|
38
38
|
@get external getType: t => filterType = "type"
|
|
39
39
|
@set external setType: (t, filterType) => unit = "type"
|
|
40
40
|
@get external rolloff: t => rolloff = "rolloff"
|
|
@@ -43,4 +43,4 @@ type options = {
|
|
|
43
43
|
@send external getFrequencyResponse: (t, int) => array<float> = "getFrequencyResponse"
|
|
44
44
|
@send external dispose: t => t = "dispose"
|
|
45
45
|
|
|
46
|
-
external asAudioNode: t =>
|
|
46
|
+
external asAudioNode: t => AudioNode.t = "%identity"
|