1 module libwasm.bindings.BaseAudioContext;
2 
3 import libwasm.types;
4 
5 import memutils.ct: tuple;
6 import libwasm.bindings.AnalyserNode;
7 import libwasm.bindings.AudioBuffer;
8 import libwasm.bindings.AudioBufferSourceNode;
9 import libwasm.bindings.AudioDestinationNode;
10 import libwasm.bindings.AudioListener;
11 import libwasm.bindings.AudioWorklet;
12 import libwasm.bindings.BiquadFilterNode;
13 import libwasm.bindings.ChannelMergerNode;
14 import libwasm.bindings.ChannelSplitterNode;
15 import libwasm.bindings.ConstantSourceNode;
16 import libwasm.bindings.ConvolverNode;
17 import libwasm.bindings.DOMException;
18 import libwasm.bindings.DelayNode;
19 import libwasm.bindings.DynamicsCompressorNode;
20 import libwasm.bindings.EventHandler;
21 import libwasm.bindings.EventTarget;
22 import libwasm.bindings.GainNode;
23 import libwasm.bindings.IIRFilterNode;
24 import libwasm.bindings.OscillatorNode;
25 import libwasm.bindings.PannerNode;
26 import libwasm.bindings.PeriodicWave;
27 import libwasm.bindings.ScriptProcessorNode;
28 import libwasm.bindings.StereoPannerNode;
29 import libwasm.bindings.WaveShaperNode;
30 
31 @safe:
32 nothrow:
33 
34 enum AudioContextState {
35   suspended,
36   running,
37   closed
38 }
39 struct BaseAudioContext {
40   nothrow:
41   libwasm.bindings.EventTarget.EventTarget _parent;
42   alias _parent this;
43   this(Handle h) {
44     _parent = .EventTarget(h);
45   }
46   auto destination()() {
47     return AudioDestinationNode(Object_Getter__Handle(this._parent, "destination"));
48   }
49   float sampleRate()() {
50     return Object_Getter__float(this._parent, "sampleRate");
51   }
52   double currentTime()() {
53     return Object_Getter__double(this._parent, "currentTime");
54   }
55   auto listener()() {
56     return AudioListener(Object_Getter__Handle(this._parent, "listener"));
57   }
58   AudioContextState state()() {
59     return Object_Getter__int(this._parent, "state");
60   }
61   auto audioWorklet()() {
62     return AudioWorklet(Object_Getter__Handle(this._parent, "audioWorklet"));
63   }
64   auto resume()() {
65     return JsPromise!(void)(Object_Getter__Handle(this._parent, "resume"));
66   }
67   void onstatechange(T0)(scope auto ref Optional!(T0) onstatechange) if (isTOrPointer!(T0, EventHandlerNonNull)) {
68     Object_Call_EventHandler__void(this._parent, "onstatechange", !onstatechange.empty, onstatechange.front);
69   }
70   EventHandler onstatechange()() {
71     return Object_Getter__EventHandler(this._parent, "onstatechange");
72   }
73   auto createBuffer()(uint numberOfChannels, uint length, float sampleRate) {
74     return AudioBuffer(Serialize_Object_VarArgCall!Handle(this._parent, "createBuffer", "uint;uint;float", tuple(numberOfChannels, length, sampleRate)));
75   }
76   auto decodeAudioData()(scope ref ArrayBuffer audioData, DecodeSuccessCallback successCallback, DecodeErrorCallback errorCallback) {
77     return JsPromise!(AudioBuffer)(BaseAudioContext_decodeAudioData(this._parent, audioData.handle, successCallback, errorCallback));
78   }
79   auto decodeAudioData()(scope ref ArrayBuffer audioData, DecodeSuccessCallback successCallback) {
80     return JsPromise!(AudioBuffer)(BaseAudioContext_decodeAudioData_0(this._parent, audioData.handle, successCallback));
81   }
82   auto decodeAudioData()(scope ref ArrayBuffer audioData) {
83     return JsPromise!(AudioBuffer)(Object_Call_Handle__Handle(this._parent, "decodeAudioData", audioData.handle));
84   }
85   auto createBufferSource()() {
86     return AudioBufferSourceNode(Object_Getter__Handle(this._parent, "createBufferSource"));
87   }
88   auto createConstantSource()() {
89     return ConstantSourceNode(Object_Getter__Handle(this._parent, "createConstantSource"));
90   }
91   auto createScriptProcessor()(uint bufferSize /* = 0 */, uint numberOfInputChannels /* = 2 */, uint numberOfOutputChannels /* = 2 */) {
92     return ScriptProcessorNode(Serialize_Object_VarArgCall!Handle(this._parent, "createScriptProcessor", "uint;uint;uint", tuple(bufferSize, numberOfInputChannels, numberOfOutputChannels)));
93   }
94   auto createScriptProcessor()(uint bufferSize /* = 0 */, uint numberOfInputChannels /* = 2 */) {
95     return ScriptProcessorNode(Serialize_Object_VarArgCall!Handle(this._parent, "createScriptProcessor", "uint;uint", tuple(bufferSize, numberOfInputChannels)));
96   }
97   auto createScriptProcessor()(uint bufferSize /* = 0 */) {
98     return ScriptProcessorNode(Object_Call_uint__Handle(this._parent, "createScriptProcessor", bufferSize));
99   }
100   auto createScriptProcessor()() {
101     return ScriptProcessorNode(Object_Getter__Handle(this._parent, "createScriptProcessor"));
102   }
103   auto createAnalyser()() {
104     return AnalyserNode(Object_Getter__Handle(this._parent, "createAnalyser"));
105   }
106   auto createGain()() {
107     return GainNode(Object_Getter__Handle(this._parent, "createGain"));
108   }
109   auto createDelay()(double maxDelayTime /* = 1 */) {
110     return DelayNode(Serialize_Object_VarArgCall!Handle(this._parent, "createDelay", "double", tuple(maxDelayTime)));
111   }
112   auto createDelay()() {
113     return DelayNode(Object_Getter__Handle(this._parent, "createDelay"));
114   }
115   auto createBiquadFilter()() {
116     return BiquadFilterNode(Object_Getter__Handle(this._parent, "createBiquadFilter"));
117   }
118   auto createIIRFilter()(scope ref Sequence!(double) feedforward, scope ref Sequence!(double) feedback) {
119     return IIRFilterNode(Serialize_Object_VarArgCall!Handle(this._parent, "createIIRFilter", "Handle;Handle", tuple(cast(Handle)feedforward.handle, cast(Handle)feedback.handle)));
120   }
121   auto createWaveShaper()() {
122     return WaveShaperNode(Object_Getter__Handle(this._parent, "createWaveShaper"));
123   }
124   auto createPanner()() {
125     return PannerNode(Object_Getter__Handle(this._parent, "createPanner"));
126   }
127   auto createStereoPanner()() {
128     return StereoPannerNode(Object_Getter__Handle(this._parent, "createStereoPanner"));
129   }
130   auto createConvolver()() {
131     return ConvolverNode(Object_Getter__Handle(this._parent, "createConvolver"));
132   }
133   auto createChannelSplitter()(uint numberOfOutputs /* = 6 */) {
134     return ChannelSplitterNode(Object_Call_uint__Handle(this._parent, "createChannelSplitter", numberOfOutputs));
135   }
136   auto createChannelSplitter()() {
137     return ChannelSplitterNode(Object_Getter__Handle(this._parent, "createChannelSplitter"));
138   }
139   auto createChannelMerger()(uint numberOfInputs /* = 6 */) {
140     return ChannelMergerNode(Object_Call_uint__Handle(this._parent, "createChannelMerger", numberOfInputs));
141   }
142   auto createChannelMerger()() {
143     return ChannelMergerNode(Object_Getter__Handle(this._parent, "createChannelMerger"));
144   }
145   auto createDynamicsCompressor()() {
146     return DynamicsCompressorNode(Object_Getter__Handle(this._parent, "createDynamicsCompressor"));
147   }
148   auto createOscillator()() {
149     return OscillatorNode(Object_Getter__Handle(this._parent, "createOscillator"));
150   }
151   auto createPeriodicWave()(scope ref Float32Array real_, scope ref Float32Array imag, scope ref PeriodicWaveConstraints constraints) {
152     return PeriodicWave(Serialize_Object_VarArgCall!Handle(this._parent, "createPeriodicWave", "Handle;Handle;Handle", tuple(cast(Handle)real_.handle, cast(Handle)imag.handle, cast(Handle)constraints.handle)));
153   }
154   auto createPeriodicWave()(scope ref Float32Array real_, scope ref Float32Array imag) {
155     return PeriodicWave(Serialize_Object_VarArgCall!Handle(this._parent, "createPeriodicWave", "Handle;Handle", tuple(cast(Handle)real_.handle, cast(Handle)imag.handle)));
156   }
157 }
158 alias DecodeErrorCallback = void delegate(DOMException);
159 alias DecodeSuccessCallback = void delegate(AudioBuffer);
160 
161 
162 extern (C) Handle BaseAudioContext_decodeAudioData(Handle, Handle, DecodeSuccessCallback, DecodeErrorCallback);
163 extern (C) Handle BaseAudioContext_decodeAudioData_0(Handle, Handle, DecodeSuccessCallback);