diff --git a/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.cpp b/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.cpp index 814a90616d0fb6..bf44a87c1a4bc1 100644 --- a/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.cpp +++ b/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.cpp @@ -9,6 +9,7 @@ #include #include #include +#include namespace Web::WebAudio { @@ -35,6 +36,13 @@ WebIDL::CallbackType* BaseAudioContext::onstatechange() return event_handler_attribute(HTML::EventNames::statechange); } +// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-createoscillator +WebIDL::ExceptionOr> BaseAudioContext::create_oscillator() +{ + // Factory method for an OscillatorNode. + return OscillatorNode::create(realm(), *this); +} + // https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-createbuffer WebIDL::ExceptionOr BaseAudioContext::verify_audio_options_inside_nominal_range(JS::Realm& realm, WebIDL::UnsignedLong number_of_channels, WebIDL::UnsignedLong length, float sample_rate) { diff --git a/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.h b/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.h index 36cb826c37e230..75c9f9503ec2e5 100644 --- a/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.h +++ b/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.h @@ -44,6 +44,8 @@ class BaseAudioContext : public DOM::EventTarget { static WebIDL::ExceptionOr verify_audio_options_inside_nominal_range(JS::Realm&, WebIDL::UnsignedLong number_of_channels, WebIDL::UnsignedLong length, float sample_rate); + WebIDL::ExceptionOr> create_oscillator(); + protected: explicit BaseAudioContext(JS::Realm&); diff --git a/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.idl b/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.idl index c28354fc3feb9f..22929aa13dcb17 100644 --- a/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.idl +++ b/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.idl @@ -1,5 +1,6 @@ #import #import +#import // https://www.w3.org/TR/webaudio/#enumdef-audiocontextstate enum AudioContextState { "suspended", "running", "closed" }; @@ -32,7 +33,7 @@ interface BaseAudioContext : EventTarget { // FIXME: DynamicsCompressorNode createDynamicsCompressor (); // FIXME: GainNode createGain (); // FIXME: IIRFilterNode createIIRFilter (sequence feedforward, sequence feedback); - // FIXME: OscillatorNode createOscillator (); + OscillatorNode createOscillator(); // FIXME: PannerNode createPanner (); // FIXME: PeriodicWave createPeriodicWave (sequence real, sequence imag, optional PeriodicWaveConstraints constraints = {}); // FIXME: ScriptProcessorNode createScriptProcessor(optional unsigned long bufferSize = 0, optional unsigned long numberOfInputChannels = 2, optional unsigned long numberOfOutputChannels = 2);