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
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"