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
package/README.md
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# rescript-tone
|
|
2
|
+
|
|
3
|
+
ReScript bindings for [Tone.js](https://tonejs.github.io/), a Web Audio framework for creating interactive music in the browser.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install rescript-tone tone
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Add to your `rescript.json`:
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"bs-dependencies": ["rescript-tone"]
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Quick Start
|
|
20
|
+
|
|
21
|
+
```rescript
|
|
22
|
+
open RescriptTone
|
|
23
|
+
|
|
24
|
+
// Create a synth and connect it to the speakers
|
|
25
|
+
let synth = ToneJs_Synth.make()
|
|
26
|
+
let node = synth->ToneJs_Synth.asAudioNode->ToneJs_AudioNode.toDestination
|
|
27
|
+
|
|
28
|
+
// Play a note
|
|
29
|
+
let _ = synth->ToneJs_Synth.triggerAttackRelease(440.0, ToneJs_Types.Time.seconds(0.5))
|
|
30
|
+
|
|
31
|
+
// Start the audio context (required by browsers)
|
|
32
|
+
let _ = ToneJs_Tone.start()
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Usage Examples
|
|
36
|
+
|
|
37
|
+
### Playing Notes with a Synth
|
|
38
|
+
|
|
39
|
+
```rescript
|
|
40
|
+
open RescriptTone
|
|
41
|
+
|
|
42
|
+
let synth = ToneJs_Synth.makeWithOptions({
|
|
43
|
+
oscillator: ?Some({\"type": ?Some(ToneJs_Types.Sawtooth)}),
|
|
44
|
+
envelope: ?Some({
|
|
45
|
+
attack: ?Some(ToneJs_Types.Time.seconds(0.1)),
|
|
46
|
+
decay: ?Some(ToneJs_Types.Time.seconds(0.2)),
|
|
47
|
+
sustain: ?Some(0.5),
|
|
48
|
+
release: ?Some(ToneJs_Types.Time.seconds(0.8)),
|
|
49
|
+
}),
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
let _ = synth->ToneJs_Synth.asAudioNode->ToneJs_AudioNode.toDestination
|
|
53
|
+
let _ = synth->ToneJs_Synth.triggerAttackRelease(440.0, ToneJs_Types.Time.seconds(0.5))
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Chaining Effects
|
|
57
|
+
|
|
58
|
+
```rescript
|
|
59
|
+
open RescriptTone
|
|
60
|
+
|
|
61
|
+
let synth = ToneJs_Synth.make()
|
|
62
|
+
let reverb = ToneJs_Reverb.makeWithDecay(1.5)
|
|
63
|
+
let delay = ToneJs_FeedbackDelay.makeWithTimeFeedback(ToneJs_Types.Time.notation("8n"), 0.5)
|
|
64
|
+
let dest = ToneJs_Tone.getDestination()
|
|
65
|
+
|
|
66
|
+
// Chain: synth -> delay -> reverb -> destination
|
|
67
|
+
let _ = synth
|
|
68
|
+
->ToneJs_Synth.asAudioNode
|
|
69
|
+
->ToneJs_AudioNode.chain([
|
|
70
|
+
delay->ToneJs_FeedbackDelay.asAudioNode,
|
|
71
|
+
reverb->ToneJs_Reverb.asAudioNode,
|
|
72
|
+
dest->ToneJs_Destination.asAudioNode,
|
|
73
|
+
])
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Scheduling with Transport
|
|
77
|
+
|
|
78
|
+
```rescript
|
|
79
|
+
open RescriptTone
|
|
80
|
+
|
|
81
|
+
let synth = ToneJs_Synth.make()
|
|
82
|
+
let _ = synth->ToneJs_Synth.asAudioNode->ToneJs_AudioNode.toDestination
|
|
83
|
+
|
|
84
|
+
let transport = ToneJs_Tone.getTransport()
|
|
85
|
+
|
|
86
|
+
// Set BPM
|
|
87
|
+
let bpm = transport->ToneJs_Transport.bpm
|
|
88
|
+
ToneJs_Param.setValue(bpm, 120.0)
|
|
89
|
+
|
|
90
|
+
// Schedule a repeating note
|
|
91
|
+
let _ = transport->ToneJs_Transport.scheduleRepeat(
|
|
92
|
+
_time => {
|
|
93
|
+
let _ = synth->ToneJs_Synth.triggerAttackRelease(440.0, ToneJs_Types.Time.notation("8n"))
|
|
94
|
+
},
|
|
95
|
+
ToneJs_Types.Time.notation("4n"),
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
// Start the transport
|
|
99
|
+
let _ = transport->ToneJs_Transport.start
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Looping Patterns
|
|
103
|
+
|
|
104
|
+
```rescript
|
|
105
|
+
open RescriptTone
|
|
106
|
+
|
|
107
|
+
let synth = ToneJs_Synth.make()
|
|
108
|
+
let _ = synth->ToneJs_Synth.asAudioNode->ToneJs_AudioNode.toDestination
|
|
109
|
+
|
|
110
|
+
let notes = ["C4", "E4", "G4", "B4"]
|
|
111
|
+
|
|
112
|
+
let seq = ToneJs_Sequence.makeWithSubdivision(
|
|
113
|
+
(time, note) => {
|
|
114
|
+
let _ = synth->ToneJs_Synth.triggerAttackReleaseAt(
|
|
115
|
+
ToneJs_Types.Frequency.fromNotation(note),
|
|
116
|
+
ToneJs_Types.Time.notation("8n"),
|
|
117
|
+
~time=ToneJs_Types.Time.fromFloat(time),
|
|
118
|
+
)
|
|
119
|
+
},
|
|
120
|
+
notes,
|
|
121
|
+
ToneJs_Types.Time.notation("4n"),
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
let _ = seq->ToneJs_Sequence.start
|
|
125
|
+
let _ = ToneJs_Tone.getTransport()->ToneJs_Transport.start
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Polyphonic Synth
|
|
129
|
+
|
|
130
|
+
```rescript
|
|
131
|
+
open RescriptTone
|
|
132
|
+
|
|
133
|
+
let poly = ToneJs_PolySynth.makeWithOptions({maxPolyphony: ?Some(4)})
|
|
134
|
+
let _ = poly->ToneJs_PolySynth.asAudioNode->ToneJs_AudioNode.toDestination
|
|
135
|
+
|
|
136
|
+
// Play a chord
|
|
137
|
+
let _ = poly->ToneJs_PolySynth.triggerAttackRelease(
|
|
138
|
+
[261.63, 329.63, 392.0],
|
|
139
|
+
ToneJs_Types.Time.seconds(1.0),
|
|
140
|
+
)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## API Reference
|
|
144
|
+
|
|
145
|
+
See [docs/API.md](docs/API.md) for the complete API reference.
|
|
146
|
+
|
|
147
|
+
## Architecture
|
|
148
|
+
|
|
149
|
+
The library is organized into modules that mirror Tone.js's structure:
|
|
150
|
+
|
|
151
|
+
| Category | Modules |
|
|
152
|
+
|----------|---------|
|
|
153
|
+
| **Core** | `Tone`, `Context`, `Transport`, `Destination`, `Param`, `AudioNode`, `Types` |
|
|
154
|
+
| **Instruments** | `Synth`, `AMSynth`, `FMSynth`, `MonoSynth`, `PolySynth` |
|
|
155
|
+
| **Sources** | `Oscillator`, `Player`, `Noise` |
|
|
156
|
+
| **Effects** | `Reverb`, `FeedbackDelay`, `Chorus`, `Distortion`, `AutoFilter`, `AutoPanner`, `AutoWah`, `BitCrusher`, `Chebyshev`, `Freeverb`, `JCReverb`, `Phaser`, `PingPongDelay`, `PitchShift`, `Tremolo`, `Vibrato`, `FrequencyShifter`, `StereoWidener` |
|
|
157
|
+
| **Components** | `Compressor`, `Limiter`, `Gate`, `Filter`, `EQ3`, `Panner` |
|
|
158
|
+
| **Signal & Channel** | `Signal`, `Volume`, `Gain`, `Channel`, `CrossFade` |
|
|
159
|
+
| **Scheduling** | `Loop`, `Event`, `Part`, `Sequence` |
|
|
160
|
+
|
|
161
|
+
Each Tone.js class maps to a ReScript module with an abstract `type t`. Modules expose:
|
|
162
|
+
- `make` / `makeWithOptions` constructors
|
|
163
|
+
- `@send` methods for instance operations
|
|
164
|
+
- `@get` / `@set` for properties
|
|
165
|
+
- `asAudioNode` for casting to the base `ToneJs_AudioNode.t` type (for `connect`, `chain`, etc.)
|
|
166
|
+
|
|
167
|
+
## Requirements
|
|
168
|
+
|
|
169
|
+
- ReScript >= 12.0.0
|
|
170
|
+
- Tone.js >= 15.0.0
|
|
171
|
+
- A browser environment with Web Audio API support
|
|
172
|
+
|
|
173
|
+
## License
|
|
174
|
+
|
|
175
|
+
MIT
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "rescript-tone",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "ReScript bindings for Tone.js",
|
|
5
|
+
"repository": {
|
|
6
|
+
"url": "https://github.com/brnrdog/rescript-tone.git",
|
|
7
|
+
"type": "git"
|
|
8
|
+
},
|
|
9
|
+
"keywords": [
|
|
10
|
+
"rescript",
|
|
11
|
+
"tonejs",
|
|
12
|
+
"tone",
|
|
13
|
+
"audio",
|
|
14
|
+
"web-audio",
|
|
15
|
+
"bindings"
|
|
16
|
+
],
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"type": "module",
|
|
19
|
+
"files": [
|
|
20
|
+
"src/**/*.res"
|
|
21
|
+
],
|
|
22
|
+
"main": "src/ToneJs.res.js",
|
|
23
|
+
"scripts": {
|
|
24
|
+
"res:build": "rescript",
|
|
25
|
+
"res:dev": "rescript -w",
|
|
26
|
+
"test": "rescript && node tests/Tests.res.js",
|
|
27
|
+
"vite:dev": "vite",
|
|
28
|
+
"vite:build": "vite build",
|
|
29
|
+
"semantic-release": "semantic-release"
|
|
30
|
+
},
|
|
31
|
+
"peerDependencies": {
|
|
32
|
+
"rescript": "^12.0.0",
|
|
33
|
+
"tone": "^15.0.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
37
|
+
"@semantic-release/git": "^10.0.1",
|
|
38
|
+
"rescript": "^12.2.0",
|
|
39
|
+
"semantic-release": "^25.0.3",
|
|
40
|
+
"tone": "^15.1.22",
|
|
41
|
+
"vite": "^6.0.0",
|
|
42
|
+
"zekr": "^1.8.0"
|
|
43
|
+
}
|
|
44
|
+
}
|
package/src/ToneJs.res
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// ReScript bindings for Tone.js
|
|
2
|
+
// This is the main entry point - re-exports all modules
|
|
3
|
+
|
|
4
|
+
// Core
|
|
5
|
+
module Types = ToneJs_Types
|
|
6
|
+
module Tone = ToneJs_Tone
|
|
7
|
+
module Context = ToneJs_Context
|
|
8
|
+
module Transport = ToneJs_Transport
|
|
9
|
+
module Destination = ToneJs_Destination
|
|
10
|
+
module Param = ToneJs_Param
|
|
11
|
+
module AudioNode = ToneJs_AudioNode
|
|
12
|
+
|
|
13
|
+
// Instruments
|
|
14
|
+
module Synth = ToneJs_Synth
|
|
15
|
+
module AMSynth = ToneJs_AMSynth
|
|
16
|
+
module FMSynth = ToneJs_FMSynth
|
|
17
|
+
module MonoSynth = ToneJs_MonoSynth
|
|
18
|
+
module PolySynth = ToneJs_PolySynth
|
|
19
|
+
|
|
20
|
+
// Sources
|
|
21
|
+
module Oscillator = ToneJs_Oscillator
|
|
22
|
+
module Player = ToneJs_Player
|
|
23
|
+
module Noise = ToneJs_Noise
|
|
24
|
+
|
|
25
|
+
// Effects
|
|
26
|
+
module Reverb = ToneJs_Reverb
|
|
27
|
+
module FeedbackDelay = ToneJs_FeedbackDelay
|
|
28
|
+
module Chorus = ToneJs_Chorus
|
|
29
|
+
module Distortion = ToneJs_Distortion
|
|
30
|
+
module AutoFilter = ToneJs_AutoFilter
|
|
31
|
+
module AutoPanner = ToneJs_AutoPanner
|
|
32
|
+
module AutoWah = ToneJs_AutoWah
|
|
33
|
+
module BitCrusher = ToneJs_BitCrusher
|
|
34
|
+
module Chebyshev = ToneJs_Chebyshev
|
|
35
|
+
module Freeverb = ToneJs_Freeverb
|
|
36
|
+
module JCReverb = ToneJs_JCReverb
|
|
37
|
+
module Phaser = ToneJs_Phaser
|
|
38
|
+
module PingPongDelay = ToneJs_PingPongDelay
|
|
39
|
+
module PitchShift = ToneJs_PitchShift
|
|
40
|
+
module Tremolo = ToneJs_Tremolo
|
|
41
|
+
module Vibrato = ToneJs_Vibrato
|
|
42
|
+
module FrequencyShifter = ToneJs_FrequencyShifter
|
|
43
|
+
module StereoWidener = ToneJs_StereoWidener
|
|
44
|
+
|
|
45
|
+
// Components
|
|
46
|
+
module Compressor = ToneJs_Compressor
|
|
47
|
+
module Limiter = ToneJs_Limiter
|
|
48
|
+
module Gate = ToneJs_Gate
|
|
49
|
+
module Filter = ToneJs_Filter
|
|
50
|
+
module EQ3 = ToneJs_EQ3
|
|
51
|
+
module Panner = ToneJs_Panner
|
|
52
|
+
|
|
53
|
+
// Signal & Channel
|
|
54
|
+
module Signal = ToneJs_Signal
|
|
55
|
+
module Volume = ToneJs_Volume
|
|
56
|
+
module Gain = ToneJs_Gain
|
|
57
|
+
module Channel = ToneJs_Channel
|
|
58
|
+
module CrossFade = ToneJs_CrossFade
|
|
59
|
+
|
|
60
|
+
// Scheduling
|
|
61
|
+
module Loop = ToneJs_Loop
|
|
62
|
+
module Event = ToneJs_Event
|
|
63
|
+
module Part = ToneJs_Part
|
|
64
|
+
module Sequence = ToneJs_Sequence
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
let Types;
|
|
5
|
+
|
|
6
|
+
let Tone;
|
|
7
|
+
|
|
8
|
+
let Context;
|
|
9
|
+
|
|
10
|
+
let Transport;
|
|
11
|
+
|
|
12
|
+
let Destination;
|
|
13
|
+
|
|
14
|
+
let Param;
|
|
15
|
+
|
|
16
|
+
let AudioNode;
|
|
17
|
+
|
|
18
|
+
let Synth;
|
|
19
|
+
|
|
20
|
+
let AMSynth;
|
|
21
|
+
|
|
22
|
+
let FMSynth;
|
|
23
|
+
|
|
24
|
+
let MonoSynth;
|
|
25
|
+
|
|
26
|
+
let PolySynth;
|
|
27
|
+
|
|
28
|
+
let Oscillator;
|
|
29
|
+
|
|
30
|
+
let Player;
|
|
31
|
+
|
|
32
|
+
let Noise;
|
|
33
|
+
|
|
34
|
+
let Reverb;
|
|
35
|
+
|
|
36
|
+
let FeedbackDelay;
|
|
37
|
+
|
|
38
|
+
let Chorus;
|
|
39
|
+
|
|
40
|
+
let Distortion;
|
|
41
|
+
|
|
42
|
+
let AutoFilter;
|
|
43
|
+
|
|
44
|
+
let AutoPanner;
|
|
45
|
+
|
|
46
|
+
let AutoWah;
|
|
47
|
+
|
|
48
|
+
let BitCrusher;
|
|
49
|
+
|
|
50
|
+
let Chebyshev;
|
|
51
|
+
|
|
52
|
+
let Freeverb;
|
|
53
|
+
|
|
54
|
+
let JCReverb;
|
|
55
|
+
|
|
56
|
+
let Phaser;
|
|
57
|
+
|
|
58
|
+
let PingPongDelay;
|
|
59
|
+
|
|
60
|
+
let PitchShift;
|
|
61
|
+
|
|
62
|
+
let Tremolo;
|
|
63
|
+
|
|
64
|
+
let Vibrato;
|
|
65
|
+
|
|
66
|
+
let FrequencyShifter;
|
|
67
|
+
|
|
68
|
+
let StereoWidener;
|
|
69
|
+
|
|
70
|
+
let Compressor;
|
|
71
|
+
|
|
72
|
+
let Limiter;
|
|
73
|
+
|
|
74
|
+
let Gate;
|
|
75
|
+
|
|
76
|
+
let Filter;
|
|
77
|
+
|
|
78
|
+
let EQ3;
|
|
79
|
+
|
|
80
|
+
let Panner;
|
|
81
|
+
|
|
82
|
+
let Signal;
|
|
83
|
+
|
|
84
|
+
let Volume;
|
|
85
|
+
|
|
86
|
+
let Gain;
|
|
87
|
+
|
|
88
|
+
let Channel;
|
|
89
|
+
|
|
90
|
+
let CrossFade;
|
|
91
|
+
|
|
92
|
+
let Loop;
|
|
93
|
+
|
|
94
|
+
let Event;
|
|
95
|
+
|
|
96
|
+
let Part;
|
|
97
|
+
|
|
98
|
+
let Sequence;
|
|
99
|
+
|
|
100
|
+
export {
|
|
101
|
+
Types,
|
|
102
|
+
Tone,
|
|
103
|
+
Context,
|
|
104
|
+
Transport,
|
|
105
|
+
Destination,
|
|
106
|
+
Param,
|
|
107
|
+
AudioNode,
|
|
108
|
+
Synth,
|
|
109
|
+
AMSynth,
|
|
110
|
+
FMSynth,
|
|
111
|
+
MonoSynth,
|
|
112
|
+
PolySynth,
|
|
113
|
+
Oscillator,
|
|
114
|
+
Player,
|
|
115
|
+
Noise,
|
|
116
|
+
Reverb,
|
|
117
|
+
FeedbackDelay,
|
|
118
|
+
Chorus,
|
|
119
|
+
Distortion,
|
|
120
|
+
AutoFilter,
|
|
121
|
+
AutoPanner,
|
|
122
|
+
AutoWah,
|
|
123
|
+
BitCrusher,
|
|
124
|
+
Chebyshev,
|
|
125
|
+
Freeverb,
|
|
126
|
+
JCReverb,
|
|
127
|
+
Phaser,
|
|
128
|
+
PingPongDelay,
|
|
129
|
+
PitchShift,
|
|
130
|
+
Tremolo,
|
|
131
|
+
Vibrato,
|
|
132
|
+
FrequencyShifter,
|
|
133
|
+
StereoWidener,
|
|
134
|
+
Compressor,
|
|
135
|
+
Limiter,
|
|
136
|
+
Gate,
|
|
137
|
+
Filter,
|
|
138
|
+
EQ3,
|
|
139
|
+
Panner,
|
|
140
|
+
Signal,
|
|
141
|
+
Volume,
|
|
142
|
+
Gain,
|
|
143
|
+
Channel,
|
|
144
|
+
CrossFade,
|
|
145
|
+
Loop,
|
|
146
|
+
Event,
|
|
147
|
+
Part,
|
|
148
|
+
Sequence,
|
|
149
|
+
}
|
|
150
|
+
/* No side effect */
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Bindings for Tone.AMSynth - AM synthesis
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
harmonicity?: positive,
|
|
8
|
+
oscillator?: oscillatorOptions,
|
|
9
|
+
modulation?: oscillatorOptions,
|
|
10
|
+
envelope?: envelopeOptions,
|
|
11
|
+
modulationEnvelope?: envelopeOptions,
|
|
12
|
+
volume?: decibels,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@module("tone") @new external make: unit => t = "AMSynth"
|
|
16
|
+
@module("tone") @new external makeWithOptions: options => t = "AMSynth"
|
|
17
|
+
|
|
18
|
+
@send external triggerAttack: (t, frequency) => t = "triggerAttack"
|
|
19
|
+
@send external triggerAttackAt: (t, frequency, ~time: time=?) => t = "triggerAttack"
|
|
20
|
+
@send external triggerAttackAtVel: (t, frequency, ~time: time=?, ~velocity: normalRange=?) => t = "triggerAttack"
|
|
21
|
+
@send external triggerRelease: (t, ~time: time=?) => t = "triggerRelease"
|
|
22
|
+
@send external triggerAttackRelease: (t, frequency, time) => t = "triggerAttackRelease"
|
|
23
|
+
@send external triggerAttackReleaseAt: (t, frequency, time, ~time: time=?) => t = "triggerAttackRelease"
|
|
24
|
+
@send external triggerAttackReleaseAtVel: (t, frequency, time, ~time: time=?, ~velocity: normalRange=?) => t = "triggerAttackRelease"
|
|
25
|
+
|
|
26
|
+
@get external volume: t => ToneJs_Param.t = "volume"
|
|
27
|
+
@get external frequency: t => ToneJs_Param.t = "frequency"
|
|
28
|
+
@get external detune: t => ToneJs_Param.t = "detune"
|
|
29
|
+
|
|
30
|
+
@send external dispose: t => t = "dispose"
|
|
31
|
+
@send external sync: t => t = "sync"
|
|
32
|
+
@send external unsync: t => t = "unsync"
|
|
33
|
+
|
|
34
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Bindings for ToneAudioNode - the base class for all audio nodes
|
|
2
|
+
// All audio nodes (instruments, effects, sources, etc.) extend this
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
@send external connect: (t, t) => t = "connect"
|
|
7
|
+
@send external connectWithOutput: (t, t, ~outputNum: int) => t = "connect"
|
|
8
|
+
@send external connectWithOutputInput: (t, t, ~outputNum: int, ~inputNum: int) => t = "connect"
|
|
9
|
+
@send external disconnect: t => t = "disconnect"
|
|
10
|
+
@send external disconnectFrom: (t, t) => t = "disconnect"
|
|
11
|
+
@send external toDestination: t => t = "toDestination"
|
|
12
|
+
@send external dispose: t => t = "dispose"
|
|
13
|
+
|
|
14
|
+
@send @variadic external chain: (t, array<t>) => t = "chain"
|
|
15
|
+
@send @variadic external fan: (t, array<t>) => t = "fan"
|
|
16
|
+
|
|
17
|
+
@get external numberOfInputs: t => int = "numberOfInputs"
|
|
18
|
+
@get external numberOfOutputs: t => int = "numberOfOutputs"
|
|
19
|
+
@get external channelCount: t => int = "channelCount"
|
|
20
|
+
@set external setChannelCount: (t, int) => unit = "channelCount"
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Bindings for Tone.AutoFilter
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
frequency?: frequency,
|
|
8
|
+
\"type"?: oscillatorType,
|
|
9
|
+
depth?: normalRange,
|
|
10
|
+
baseFrequency?: frequency,
|
|
11
|
+
octaves?: positive,
|
|
12
|
+
filter?: filterOptions,
|
|
13
|
+
wet?: normalRange,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@module("tone") @new external make: unit => t = "AutoFilter"
|
|
17
|
+
@module("tone") @new external makeWithOptions: options => t = "AutoFilter"
|
|
18
|
+
|
|
19
|
+
@get external frequency: t => ToneJs_Param.t = "frequency"
|
|
20
|
+
@get external depth: t => ToneJs_Param.t = "depth"
|
|
21
|
+
@get external wet: t => ToneJs_Param.t = "wet"
|
|
22
|
+
@get external octaves: t => positive = "octaves"
|
|
23
|
+
@set external setOctaves: (t, positive) => unit = "octaves"
|
|
24
|
+
@get external baseFrequency: t => frequency = "baseFrequency"
|
|
25
|
+
@set external setBaseFrequency: (t, frequency) => unit = "baseFrequency"
|
|
26
|
+
|
|
27
|
+
@send external start: (t, ~time: time=?) => t = "start"
|
|
28
|
+
@send external stop: (t, ~time: time=?) => t = "stop"
|
|
29
|
+
@send external sync: t => t = "sync"
|
|
30
|
+
@send external unsync: t => t = "unsync"
|
|
31
|
+
@send external dispose: t => t = "dispose"
|
|
32
|
+
|
|
33
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Bindings for Tone.AutoPanner
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
frequency?: frequency,
|
|
8
|
+
\"type"?: oscillatorType,
|
|
9
|
+
depth?: normalRange,
|
|
10
|
+
wet?: normalRange,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@module("tone") @new external make: unit => t = "AutoPanner"
|
|
14
|
+
@module("tone") @new external makeWithOptions: options => t = "AutoPanner"
|
|
15
|
+
|
|
16
|
+
@get external frequency: t => ToneJs_Param.t = "frequency"
|
|
17
|
+
@get external depth: t => ToneJs_Param.t = "depth"
|
|
18
|
+
@get external wet: t => ToneJs_Param.t = "wet"
|
|
19
|
+
|
|
20
|
+
@send external start: (t, ~time: time=?) => t = "start"
|
|
21
|
+
@send external stop: (t, ~time: time=?) => t = "stop"
|
|
22
|
+
@send external sync: t => t = "sync"
|
|
23
|
+
@send external unsync: t => t = "unsync"
|
|
24
|
+
@send external dispose: t => t = "dispose"
|
|
25
|
+
|
|
26
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Bindings for Tone.AutoWah
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
baseFrequency?: frequency,
|
|
8
|
+
octaves?: positive,
|
|
9
|
+
sensitivity?: decibels,
|
|
10
|
+
q?: positive,
|
|
11
|
+
gain?: float,
|
|
12
|
+
follower?: float,
|
|
13
|
+
wet?: normalRange,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@module("tone") @new external make: unit => t = "AutoWah"
|
|
17
|
+
@module("tone") @new external makeWithOptions: options => t = "AutoWah"
|
|
18
|
+
|
|
19
|
+
@get external gain: t => ToneJs_Param.t = "gain"
|
|
20
|
+
@get external q: t => ToneJs_Param.t = "Q"
|
|
21
|
+
@get external wet: t => ToneJs_Param.t = "wet"
|
|
22
|
+
@get external octaves: t => positive = "octaves"
|
|
23
|
+
@set external setOctaves: (t, positive) => unit = "octaves"
|
|
24
|
+
@get external baseFrequency: t => frequency = "baseFrequency"
|
|
25
|
+
@set external setBaseFrequency: (t, frequency) => unit = "baseFrequency"
|
|
26
|
+
@get external sensitivity: t => decibels = "sensitivity"
|
|
27
|
+
@set external setSensitivity: (t, decibels) => unit = "sensitivity"
|
|
28
|
+
|
|
29
|
+
@send external dispose: t => t = "dispose"
|
|
30
|
+
|
|
31
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Bindings for Tone.BitCrusher
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
bits?: positive,
|
|
8
|
+
wet?: normalRange,
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@module("tone") @new external make: unit => t = "BitCrusher"
|
|
12
|
+
@module("tone") @new external makeWithBits: positive => t = "BitCrusher"
|
|
13
|
+
@module("tone") @new external makeWithOptions: options => t = "BitCrusher"
|
|
14
|
+
|
|
15
|
+
@get external bits: t => ToneJs_Param.t = "bits"
|
|
16
|
+
@get external wet: t => ToneJs_Param.t = "wet"
|
|
17
|
+
|
|
18
|
+
@send external dispose: t => t = "dispose"
|
|
19
|
+
|
|
20
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Bindings for Tone.Channel - routing and mixing
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
pan?: audioRange,
|
|
8
|
+
volume?: decibels,
|
|
9
|
+
solo?: bool,
|
|
10
|
+
mute?: bool,
|
|
11
|
+
channelCount?: int,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
@module("tone") @new external make: unit => t = "Channel"
|
|
15
|
+
@module("tone") @new external makeWithVolume: decibels => t = "Channel"
|
|
16
|
+
@module("tone") @new external makeWithVolumePan: (decibels, audioRange) => t = "Channel"
|
|
17
|
+
@module("tone") @new external makeWithOptions: options => t = "Channel"
|
|
18
|
+
|
|
19
|
+
@get external pan: t => ToneJs_Param.t = "pan"
|
|
20
|
+
@get external volume: t => ToneJs_Param.t = "volume"
|
|
21
|
+
@get external solo: t => bool = "solo"
|
|
22
|
+
@set external setSolo: (t, bool) => unit = "solo"
|
|
23
|
+
@get external mute: t => bool = "mute"
|
|
24
|
+
@set external setMute: (t, bool) => unit = "mute"
|
|
25
|
+
@get external muted: t => bool = "muted"
|
|
26
|
+
|
|
27
|
+
@send external send: (t, string) => ToneJs_Gain.t = "send"
|
|
28
|
+
@send external sendWithVolume: (t, string, ~volume: decibels=?) => ToneJs_Gain.t = "send"
|
|
29
|
+
@send external receive: (t, string) => t = "receive"
|
|
30
|
+
|
|
31
|
+
@send external dispose: t => t = "dispose"
|
|
32
|
+
|
|
33
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Bindings for Tone.Chebyshev - waveshaping distortion
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
order?: int,
|
|
8
|
+
oversample?: oversampleType,
|
|
9
|
+
wet?: normalRange,
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@module("tone") @new external make: unit => t = "Chebyshev"
|
|
13
|
+
@module("tone") @new external makeWithOrder: int => t = "Chebyshev"
|
|
14
|
+
@module("tone") @new external makeWithOptions: options => t = "Chebyshev"
|
|
15
|
+
|
|
16
|
+
@get external order: t => int = "order"
|
|
17
|
+
@set external setOrder: (t, int) => unit = "order"
|
|
18
|
+
@get external oversample: t => oversampleType = "oversample"
|
|
19
|
+
@set external setOversample: (t, oversampleType) => unit = "oversample"
|
|
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,37 @@
|
|
|
1
|
+
// Bindings for Tone.Chorus
|
|
2
|
+
open ToneJs_Types
|
|
3
|
+
|
|
4
|
+
type t
|
|
5
|
+
|
|
6
|
+
type options = {
|
|
7
|
+
frequency?: frequency,
|
|
8
|
+
delayTime?: milliseconds,
|
|
9
|
+
depth?: normalRange,
|
|
10
|
+
\"type"?: oscillatorType,
|
|
11
|
+
spread?: degrees,
|
|
12
|
+
feedback?: normalRange,
|
|
13
|
+
wet?: normalRange,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@module("tone") @new external make: unit => t = "Chorus"
|
|
17
|
+
@module("tone") @new external makeWithArgs: (frequency, milliseconds, normalRange) => t = "Chorus"
|
|
18
|
+
@module("tone") @new external makeWithOptions: options => t = "Chorus"
|
|
19
|
+
|
|
20
|
+
@get external frequency: t => ToneJs_Param.t = "frequency"
|
|
21
|
+
@get external depth: t => normalRange = "depth"
|
|
22
|
+
@set external setDepth: (t, normalRange) => unit = "depth"
|
|
23
|
+
@get external delayTime: t => milliseconds = "delayTime"
|
|
24
|
+
@set external setDelayTime: (t, milliseconds) => unit = "delayTime"
|
|
25
|
+
@get external getType: t => oscillatorType = "type"
|
|
26
|
+
@set external setType: (t, oscillatorType) => unit = "type"
|
|
27
|
+
@get external spread: t => degrees = "spread"
|
|
28
|
+
@set external setSpread: (t, degrees) => unit = "spread"
|
|
29
|
+
@get external wet: t => ToneJs_Param.t = "wet"
|
|
30
|
+
|
|
31
|
+
@send external start: (t, ~time: time=?) => t = "start"
|
|
32
|
+
@send external stop: (t, ~time: time=?) => t = "stop"
|
|
33
|
+
@send external sync: t => t = "sync"
|
|
34
|
+
@send external unsync: t => t = "unsync"
|
|
35
|
+
@send external dispose: t => t = "dispose"
|
|
36
|
+
|
|
37
|
+
external asAudioNode: t => ToneJs_AudioNode.t = "%identity"
|