WebAudio: Stub BiquadFilterNode
This commit is contained in:
parent
6672fb4b47
commit
64663d53fa
Notes:
github-actions[bot]
2024-07-23 07:25:59 +00:00
Author: https://github.com/bbb651 Commit: https://github.com/LadybirdBrowser/ladybird/commit/64663d53fa4 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/750
11 changed files with 140 additions and 1 deletions
|
@ -18,6 +18,8 @@ source_set("WebAudio") {
|
|||
"AudioScheduledSourceNode.h",
|
||||
"BaseAudioContext.cpp",
|
||||
"BaseAudioContext.h",
|
||||
"BiquadFilterNode.cpp",
|
||||
"BiquadFilterNode.h",
|
||||
"DynamicsCompressorNode.cpp",
|
||||
"DynamicsCompressorNode.h",
|
||||
"GainNode.cpp",
|
||||
|
|
|
@ -325,6 +325,7 @@ standard_idl_files = [
|
|||
"//Userland/Libraries/LibWeb/WebAudio/AudioParam.idl",
|
||||
"//Userland/Libraries/LibWeb/WebAudio/AudioScheduledSourceNode.idl",
|
||||
"//Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.idl",
|
||||
"//Userland/Libraries/LibWeb/WebAudio/BiquadFilterNode.idl",
|
||||
"//Userland/Libraries/LibWeb/WebAudio/DynamicsCompressorNode.idl",
|
||||
"//Userland/Libraries/LibWeb/WebAudio/GainNode.idl",
|
||||
"//Userland/Libraries/LibWeb/WebAudio/OfflineAudioContext.idl",
|
||||
|
|
|
@ -688,6 +688,7 @@ set(SOURCES
|
|||
WebAudio/AudioParam.cpp
|
||||
WebAudio/AudioScheduledSourceNode.cpp
|
||||
WebAudio/BaseAudioContext.cpp
|
||||
WebAudio/BiquadFilterNode.cpp
|
||||
WebAudio/DynamicsCompressorNode.cpp
|
||||
WebAudio/GainNode.cpp
|
||||
WebAudio/OfflineAudioContext.cpp
|
||||
|
|
|
@ -717,6 +717,7 @@ class AudioNode;
|
|||
class AudioParam;
|
||||
class AudioScheduledSourceNode;
|
||||
class BaseAudioContext;
|
||||
class BiquadFilterNode;
|
||||
class DynamicsCompressorNode;
|
||||
class GainNode;
|
||||
class OfflineAudioContext;
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include <LibWeb/WebAudio/AudioBuffer.h>
|
||||
#include <LibWeb/WebAudio/AudioBufferSourceNode.h>
|
||||
#include <LibWeb/WebAudio/BaseAudioContext.h>
|
||||
#include <LibWeb/WebAudio/BiquadFilterNode.h>
|
||||
#include <LibWeb/WebAudio/DynamicsCompressorNode.h>
|
||||
#include <LibWeb/WebAudio/GainNode.h>
|
||||
#include <LibWeb/WebAudio/OscillatorNode.h>
|
||||
|
@ -41,6 +42,13 @@ WebIDL::CallbackType* BaseAudioContext::onstatechange()
|
|||
return event_handler_attribute(HTML::EventNames::statechange);
|
||||
}
|
||||
|
||||
// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-createbiquadfilter
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<BiquadFilterNode>> BaseAudioContext::create_biquad_filter()
|
||||
{
|
||||
// Factory method for a BiquadFilterNode representing a second order filter which can be configured as one of several common filter types.
|
||||
return BiquadFilterNode::create(realm(), *this);
|
||||
}
|
||||
|
||||
// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-createbuffer
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioBuffer>> BaseAudioContext::create_buffer(WebIDL::UnsignedLong number_of_channels, WebIDL::UnsignedLong length, float sample_rate)
|
||||
{
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
|
||||
#include <LibWeb/Bindings/BaseAudioContextPrototype.h>
|
||||
#include <LibWeb/DOM/EventTarget.h>
|
||||
#include <LibWeb/WebAudio/BiquadFilterNode.h>
|
||||
#include <LibWeb/WebIDL/Types.h>
|
||||
|
||||
namespace Web::WebAudio {
|
||||
|
@ -47,6 +48,7 @@ public:
|
|||
|
||||
static WebIDL::ExceptionOr<void> verify_audio_options_inside_nominal_range(JS::Realm&, WebIDL::UnsignedLong number_of_channels, WebIDL::UnsignedLong length, float sample_rate);
|
||||
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<BiquadFilterNode>> create_biquad_filter();
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioBuffer>> create_buffer(WebIDL::UnsignedLong number_of_channels, WebIDL::UnsignedLong length, float sample_rate);
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioBufferSourceNode>> create_buffer_source();
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<OscillatorNode>> create_oscillator();
|
||||
|
|
|
@ -26,7 +26,7 @@ interface BaseAudioContext : EventTarget {
|
|||
attribute EventHandler onstatechange;
|
||||
|
||||
[FIXME] AnalyserNode createAnalyser ();
|
||||
[FIXME] BiquadFilterNode createBiquadFilter ();
|
||||
BiquadFilterNode createBiquadFilter ();
|
||||
AudioBuffer createBuffer(unsigned long numberOfChannels, unsigned long length, float sampleRate);
|
||||
AudioBufferSourceNode createBufferSource ();
|
||||
[FIXME] ChannelMergerNode createChannelMerger (optional unsigned long numberOfInputs = 6);
|
||||
|
|
49
Userland/Libraries/LibWeb/WebAudio/BiquadFilterNode.cpp
Normal file
49
Userland/Libraries/LibWeb/WebAudio/BiquadFilterNode.cpp
Normal file
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Bar Yemini <bar.ye651@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibWeb/Bindings/BiquadFilterNodePrototype.h>
|
||||
#include <LibWeb/Bindings/Intrinsics.h>
|
||||
#include <LibWeb/WebAudio/AudioNode.h>
|
||||
#include <LibWeb/WebAudio/BiquadFilterNode.h>
|
||||
|
||||
namespace Web::WebAudio {
|
||||
|
||||
JS_DEFINE_ALLOCATOR(BiquadFilterNode);
|
||||
|
||||
BiquadFilterNode::BiquadFilterNode(JS::Realm& realm, JS::NonnullGCPtr<BaseAudioContext> context, BiquadFilterOptions const&)
|
||||
: AudioNode(realm, context)
|
||||
{
|
||||
}
|
||||
|
||||
BiquadFilterNode::~BiquadFilterNode() = default;
|
||||
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<BiquadFilterNode>> BiquadFilterNode::create(JS::Realm& realm, JS::NonnullGCPtr<BaseAudioContext> context, BiquadFilterOptions const& options)
|
||||
{
|
||||
return construct_impl(realm, context, options);
|
||||
}
|
||||
|
||||
// https://webaudio.github.io/web-audio-api/#dom-biquadfilternode-biquadfilternode
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<BiquadFilterNode>> BiquadFilterNode::construct_impl(JS::Realm& realm, JS::NonnullGCPtr<BaseAudioContext> context, BiquadFilterOptions const& options)
|
||||
{
|
||||
// When the constructor is called with a BaseAudioContext c and an option object option, the user agent
|
||||
// MUST initialize the AudioNode this, with context and options as arguments.
|
||||
|
||||
auto node = realm.vm().heap().allocate<BiquadFilterNode>(realm, realm, context, options);
|
||||
return node;
|
||||
}
|
||||
|
||||
void BiquadFilterNode::initialize(JS::Realm& realm)
|
||||
{
|
||||
Base::initialize(realm);
|
||||
WEB_SET_PROTOTYPE_FOR_INTERFACE(BiquadFilterNode);
|
||||
}
|
||||
|
||||
void BiquadFilterNode::visit_edges(Cell::Visitor& visitor)
|
||||
{
|
||||
Base::visit_edges(visitor);
|
||||
}
|
||||
|
||||
}
|
41
Userland/Libraries/LibWeb/WebAudio/BiquadFilterNode.h
Normal file
41
Userland/Libraries/LibWeb/WebAudio/BiquadFilterNode.h
Normal file
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Bar Yemini <bar.ye651@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibWeb/Bindings/BiquadFilterNodePrototype.h>
|
||||
#include <LibWeb/WebAudio/AudioNode.h>
|
||||
|
||||
namespace Web::WebAudio {
|
||||
|
||||
// https://webaudio.github.io/web-audio-api/#BiquadFilterOptions
|
||||
struct BiquadFilterOptions : AudioNodeOptions {
|
||||
Bindings::BiquadFilterType type { Bindings::BiquadFilterType::Lowpass };
|
||||
float q { 1 };
|
||||
float detune { 0 };
|
||||
float frequency { 350 };
|
||||
float gain { 0 };
|
||||
};
|
||||
|
||||
// https://webaudio.github.io/web-audio-api/#BiquadFilterNode
|
||||
class BiquadFilterNode : public AudioNode {
|
||||
WEB_PLATFORM_OBJECT(BiquadFilterNode, AudioNode);
|
||||
JS_DECLARE_ALLOCATOR(BiquadFilterNode);
|
||||
|
||||
public:
|
||||
virtual ~BiquadFilterNode() override;
|
||||
|
||||
static WebIDL::ExceptionOr<JS::NonnullGCPtr<BiquadFilterNode>> create(JS::Realm&, JS::NonnullGCPtr<BaseAudioContext>, BiquadFilterOptions const& = {});
|
||||
static WebIDL::ExceptionOr<JS::NonnullGCPtr<BiquadFilterNode>> construct_impl(JS::Realm&, JS::NonnullGCPtr<BaseAudioContext>, BiquadFilterOptions const& = {});
|
||||
|
||||
protected:
|
||||
BiquadFilterNode(JS::Realm&, JS::NonnullGCPtr<BaseAudioContext>, BiquadFilterOptions const& = {});
|
||||
|
||||
virtual void initialize(JS::Realm&) override;
|
||||
virtual void visit_edges(Cell::Visitor&) override;
|
||||
};
|
||||
|
||||
}
|
33
Userland/Libraries/LibWeb/WebAudio/BiquadFilterNode.idl
Normal file
33
Userland/Libraries/LibWeb/WebAudio/BiquadFilterNode.idl
Normal file
|
@ -0,0 +1,33 @@
|
|||
#import <WebAudio/AudioParam.idl>
|
||||
#import <WebAudio/AudioNode.idl>
|
||||
#import <WebAudio/BaseAudioContext.idl>
|
||||
|
||||
enum BiquadFilterType {
|
||||
"lowpass",
|
||||
"highpass",
|
||||
"bandpass",
|
||||
"lowshelf",
|
||||
"highshelf",
|
||||
"peaking",
|
||||
"notch",
|
||||
"allpass"
|
||||
};
|
||||
|
||||
dictionary BiquadFilterOptions : AudioNodeOptions {
|
||||
BiquadFilterType type = "lowpass";
|
||||
float Q = 1;
|
||||
float detune = 0;
|
||||
float frequency = 350;
|
||||
float gain = 0;
|
||||
};
|
||||
|
||||
[Exposed=Window]
|
||||
interface BiquadFilterNode : AudioNode {
|
||||
constructor (BaseAudioContext context, optional BiquadFilterOptions options = {});
|
||||
[FIXME] attribute BiquadFilterType type;
|
||||
[FIXME] readonly attribute AudioParam frequency;
|
||||
[FIXME] readonly attribute AudioParam detune;
|
||||
[FIXME] readonly attribute AudioParam Q;
|
||||
[FIXME] readonly attribute AudioParam gain;
|
||||
[FIXME] undefined getFrequencyResponse (Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse);
|
||||
};
|
|
@ -316,6 +316,7 @@ libweb_js_bindings(WebAudio/AudioNode)
|
|||
libweb_js_bindings(WebAudio/AudioParam)
|
||||
libweb_js_bindings(WebAudio/AudioScheduledSourceNode)
|
||||
libweb_js_bindings(WebAudio/BaseAudioContext)
|
||||
libweb_js_bindings(WebAudio/BiquadFilterNode)
|
||||
libweb_js_bindings(WebAudio/DynamicsCompressorNode)
|
||||
libweb_js_bindings(WebAudio/GainNode)
|
||||
libweb_js_bindings(WebAudio/OfflineAudioContext)
|
||||
|
|
Loading…
Add table
Reference in a new issue