-
Notifications
You must be signed in to change notification settings - Fork 1
/
audio_web_api.ml
269 lines (180 loc) · 7.02 KB
/
audio_web_api.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
open Js
open ArrayBuffer
class type audioListener = object
method gain : float t prop
method dopplerFactor : float t prop
method speedOfSound : float t prop
method setPosition : float -> float -> float -> unit meth
method setOriention :
float -> float -> float -> float -> float -> float -> unit meth
method setVelocity : float -> float -> float -> unit meth
end
class type audioParam = object
method value : float t prop
method minValue : float t readonly_prop
method maxValue : float t readonly_prop
method defaultValue : float t readonly_prop
method name : js_string t readonly_prop
method unit : int readonly_prop
method setValueAtTime : float -> float -> unit meth
method linearRampToValueAtTime : float -> float -> unit meth
method exponentialRampToValueAtTime : float -> float -> unit meth
method setTragetValueAtTime : float -> float -> float -> unit meth
method setValueCurveAtTime :
float t js_array t -> float -> float -> unit meth
method cancelScheduledValues : float -> unit meth
end
class type audioGain = object
inherit audioParam
end
class type audioBuffer = object
method gain : audioGain t prop
method sampleRate : float t readonly_prop
method length : float t readonly_prop
method numberOfChannels : int readonly_prop
method getChannelData : int -> float t js_array t
end
class type audioNode = object ('self)
method connect : 'self t -> int -> int -> unit meth
method disconnect : int -> unit meth
method context : audioContext t readonly_prop
method numberOfInputs : int readonly_prop
method numberOfOutputs : int readonly_prop
end
and audioSourceNode = object
inherit audioNode
end
and audioBufferSourceNode = object
inherit audioSourceNode
method buffer : audioBuffer t prop
method gain : audioGain t readonly_prop
method playbackRate : audioParam t prop
method loop : bool t prop
method noteOn : float -> unit meth
method noteGrainOn : float -> float -> float -> unit meth
method noteOff : float -> unit meth
end
and dynamicsCompressorNode = object
inherit audioNode
end
and audioChannelMerger = object
inherit audioNode
end
and audioChannelSplitter = object
inherit audioNode
end
and audioGainNode = object
inherit audioNode
method gain : audioGain t prop
end
and audioPannerNode =object
inherit audioNode
method _EQUALPOWER : int prop
method _HRTF : int prop
method _SOUNDFIELD : int prop
method panningModel : int prop
method setPosition : float -> float -> float -> unit meth
method setOriention : float -> float -> float -> unit meth
method setVelocity : float -> float -> float -> unit meth
method distanceModel : int prop
method refDistance : float t prop
method maxDistance : float t prop
method rolloffFactor : float t prop
method coneInnerAngle : float t prop
method coneOuterAngle : float t prop
method coneOuterGain : float t prop
method coneGain : audioGain t readonly_prop
method distanceGain : audioGain t readonly_prop
end
and biquadFilterNode = object
inherit audioNode
method type_ : int prop
method frequency : audioParam t readonly_prop
method q : audioParam t readonly_prop
method gain : audioParam t readonly_prop
end
and convolverNode = object
inherit audioNode
method buffer : audioBuffer t prop
end
and audioDestinationNode = object
inherit audioNode
method numberOfChannels : int readonly_prop
end
and delayNode = object
inherit audioNode
method delayTime : audioParam t prop
end
and realtimeAnalyserNode = object
inherit audioNode
method getFloatFrequencyData : float t js_array t -> unit meth
method getByteFrequencyData : int js_array t -> unit meth
method getByteTimeDomainData : int js_array t -> unit meth
method fftSize : int prop
method frequencyBinCount : int readonly_prop
method minDecibels : float t prop
method maxDecibels : float t prop
method smoothingTimeConstant : float t prop
end
and javaScriptAudioNode = object ('self)
inherit audioNode
method onaudioprocess : ('self t, Dom_html.event t) Dom_html.event_listener prop
method bufferSize : int readonly_prop
end
(** This interface represents a set of AudioNode objects and their connections.
It allows for arbitrary routing of signals to the AudioDestinationNode
(what the user ultimately hears). Nodes are created from the context and are
then connected together. In most use cases, only a single AudioContext is
used per document. An AudioContext is constructed as follows:
let context = jsnew AudioContext(); *)
and audioContext = object
method destination : audioDestinationNode t readonly_prop
(** An AudioDestinationNode with a single input representing the final
destination for all audio (to be rendered to the audio hardware). All
AudioNodes actively rendering audio will directly or indirectly connect
to destination. *)
method sampleRate : float t readonly_prop
(** The sample rate (in sample-frames per second) at which the AudioContext
handles audio. It is assumed that all AudioNodes in the context run at
this rate. In making this assumption, sample-rate converters or
"varispeed" processors are not supported in real-time processing. *)
method currentTime : float t readonly_prop
(** This is a time in seconds which starts at zero when the context is created
and increases in real-time. All scheduled times are relative to it. This
is not a "transport" time which can be started, paused, and re-positioned.
It is always moving forward. *)
method listener : audioListener t readonly_prop
(** An AudioListener which is used for 3D spatialization. *)
method createBuffer_ : int -> int -> float -> audioBuffer t meth
method createBuffer : arrayBuffer t -> bool t -> audioBuffer t meth
method decodeAudioData :
arrayBuffer t -> (unit -> unit) callback -> (unit -> unit) callback opt
-> unit meth
method createBufferSource : audioBufferSourceNode t meth
method createJavaScriptNode : int -> int -> int -> javaScriptAudioNode t meth
method createAnalyser : realtimeAnalyserNode t meth
method createGainNode : audioGainNode t meth
method createDelayNode : delayNode t meth
method createBiquadFilter : biquadFilterNode t meth
method createPanner : audioPannerNode t meth
method createConvolver : convolverNode t meth
method createChannelSplitter : audioChannelSplitter t meth
method createChannelMerger : audioChannelMerger t meth
method createDynamicsCompressor : dynamicsCompressorNode t meth
end
let audioContext : audioContext t constr =
Unsafe.variable "webkitAudioContext"
class type mediaElementAudioSourceNode = object
inherit audioSourceNode
end
class type waveSharperNode = object
inherit audioNode
method curve : float t js_array t prop
end
class type audioProcessingEvent = object
inherit Dom_html.event
method node : javaScriptAudioNode t prop
method playbackTime : float t readonly_prop
method inputBuffer : audioBuffer t js_array t readonly_prop
method outputBuffer : audioBuffer t js_array t readonly_prop
end