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);