diff --git a/Libraries/LibWeb/WebAudio/BaseAudioContext.cpp b/Libraries/LibWeb/WebAudio/BaseAudioContext.cpp index 11326d7b584..8e47f721d5b 100644 --- a/Libraries/LibWeb/WebAudio/BaseAudioContext.cpp +++ b/Libraries/LibWeb/WebAudio/BaseAudioContext.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -111,6 +112,13 @@ WebIDL::ExceptionOr> BaseAudioContext::create_gain() return GainNode::create(realm(), *this); } +// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-createpanner +WebIDL::ExceptionOr> BaseAudioContext::create_panner() +{ + // Factory method for a PannerNode. + return PannerNode::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/Libraries/LibWeb/WebAudio/BaseAudioContext.h b/Libraries/LibWeb/WebAudio/BaseAudioContext.h index 9487e94b36d..c798ef38c80 100644 --- a/Libraries/LibWeb/WebAudio/BaseAudioContext.h +++ b/Libraries/LibWeb/WebAudio/BaseAudioContext.h @@ -62,6 +62,7 @@ public: WebIDL::ExceptionOr> create_oscillator(); WebIDL::ExceptionOr> create_dynamics_compressor(); WebIDL::ExceptionOr> create_gain(); + WebIDL::ExceptionOr> create_panner(); GC::Ref decode_audio_data(GC::Root, GC::Ptr, GC::Ptr); diff --git a/Libraries/LibWeb/WebAudio/BaseAudioContext.idl b/Libraries/LibWeb/WebAudio/BaseAudioContext.idl index 0153136015d..98afc2544a2 100644 --- a/Libraries/LibWeb/WebAudio/BaseAudioContext.idl +++ b/Libraries/LibWeb/WebAudio/BaseAudioContext.idl @@ -8,6 +8,7 @@ #import #import #import +#import #import // https://www.w3.org/TR/webaudio/#enumdef-audiocontextstate @@ -42,7 +43,7 @@ interface BaseAudioContext : EventTarget { GainNode createGain(); [FIXME] IIRFilterNode createIIRFilter (sequence feedforward, sequence feedback); OscillatorNode createOscillator(); - [FIXME] PannerNode createPanner (); + 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); [FIXME] StereoPannerNode createStereoPanner (); diff --git a/Tests/LibWeb/Text/expected/WebAudio/PannerNode.txt b/Tests/LibWeb/Text/expected/WebAudio/PannerNode.txt new file mode 100644 index 00000000000..e61103a78d4 --- /dev/null +++ b/Tests/LibWeb/Text/expected/WebAudio/PannerNode.txt @@ -0,0 +1,46 @@ +PannerNode +AudioNode +EventTarget +Object +[object AudioParam] current: 0, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: -52, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: 100000, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: -22051, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: 0, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: -52, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: 100000, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: -22051, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: 0, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: -52, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: 100000, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: -22051, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: 1, default: 1, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: -52, default: 1, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: 100000, default: 1, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: -22051, default: 1, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: 0, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: -52, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: 100000, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: -22051, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: 0, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: -52, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: 100000, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +[object AudioParam] current: -22051, default: 0, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate +default panningModel: equalpower +default distanceModel: inverse +default refDistance: 1 +default maxDistance: 10000 +default rolloffFactor: 1 +default coneInnerAngle: 360 +default coneOuterAngle: 360 +default coneOuterGain: 0 +Did throw RangeError: refDistance cannot be negative +Did throw RangeError: rolloffFactor cannot be negative +Did throw RangeError: maxDistance cannot be negative +Did throw InvalidStateError: coneOuterGain must be in the range of [0, 1] +Did throw InvalidStateError: coneOuterGain must be in the range of [0, 1] +Did throw RangeError: refDistance cannot be negative +Did throw RangeError: rolloffFactor cannot be negative +Did throw RangeError: maxDistance cannot be negative +Did throw InvalidStateError: coneOuterGain must be in the range of [0, 1] +Did throw InvalidStateError: coneOuterGain must be in the range of [0, 1] diff --git a/Tests/LibWeb/Text/input/WebAudio/PannerNode.html b/Tests/LibWeb/Text/input/WebAudio/PannerNode.html new file mode 100644 index 00000000000..81a540b5669 --- /dev/null +++ b/Tests/LibWeb/Text/input/WebAudio/PannerNode.html @@ -0,0 +1,99 @@ + +