diff --git a/Tests/LibWeb/Text/expected/WebAudio/DynamicsCompressorNode.txt b/Tests/LibWeb/Text/expected/WebAudio/DynamicsCompressorNode.txt index 72ad4f051c3..65424fe705e 100644 --- a/Tests/LibWeb/Text/expected/WebAudio/DynamicsCompressorNode.txt +++ b/Tests/LibWeb/Text/expected/WebAudio/DynamicsCompressorNode.txt @@ -2,3 +2,8 @@ DynamicsCompressorNode AudioNode EventTarget Object +[object AudioParam] current: -24, default: -24, min: -100, max: 0, rate: k-rate +[object AudioParam] current: 30, default: 30, min: 0, max: 40, rate: k-rate +[object AudioParam] current: 12, default: 12, min: 1, max: 20, rate: k-rate +[object AudioParam] current: 0.003000000026077032, default: 0.003000000026077032, min: 0, max: 1, rate: k-rate +[object AudioParam] current: 0.25, default: 0.25, min: 0, max: 1, rate: k-rate diff --git a/Tests/LibWeb/Text/input/WebAudio/DynamicsCompressorNode.html b/Tests/LibWeb/Text/input/WebAudio/DynamicsCompressorNode.html index 2b3385e0612..68b7217365d 100644 --- a/Tests/LibWeb/Text/input/WebAudio/DynamicsCompressorNode.html +++ b/Tests/LibWeb/Text/input/WebAudio/DynamicsCompressorNode.html @@ -1,5 +1,9 @@ diff --git a/Userland/Libraries/LibWeb/WebAudio/DynamicsCompressorNode.cpp b/Userland/Libraries/LibWeb/WebAudio/DynamicsCompressorNode.cpp index cda26f52e05..5cf5342ee2a 100644 --- a/Userland/Libraries/LibWeb/WebAudio/DynamicsCompressorNode.cpp +++ b/Userland/Libraries/LibWeb/WebAudio/DynamicsCompressorNode.cpp @@ -6,6 +6,7 @@ #include #include +#include #include namespace Web::WebAudio { @@ -26,8 +27,13 @@ WebIDL::ExceptionOr> DynamicsCompressor return realm.vm().heap().allocate(realm, realm, context, options); } -DynamicsCompressorNode::DynamicsCompressorNode(JS::Realm& realm, JS::NonnullGCPtr context, DynamicsCompressorOptions const&) +DynamicsCompressorNode::DynamicsCompressorNode(JS::Realm& realm, JS::NonnullGCPtr context, DynamicsCompressorOptions const& options) : AudioNode(realm, context) + , m_threshold(AudioParam::create(realm, options.threshold, -100, 0, Bindings::AutomationRate::KRate)) + , m_knee(AudioParam::create(realm, options.knee, 0, 40, Bindings::AutomationRate::KRate)) + , m_ratio(AudioParam::create(realm, options.ratio, 1, 20, Bindings::AutomationRate::KRate)) + , m_attack(AudioParam::create(realm, options.attack, 0, 1, Bindings::AutomationRate::KRate)) + , m_release(AudioParam::create(realm, options.release, 0, 1, Bindings::AutomationRate::KRate)) { } @@ -40,6 +46,11 @@ void DynamicsCompressorNode::initialize(JS::Realm& realm) void DynamicsCompressorNode::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); + visitor.visit(m_threshold); + visitor.visit(m_knee); + visitor.visit(m_ratio); + visitor.visit(m_attack); + visitor.visit(m_release); } } diff --git a/Userland/Libraries/LibWeb/WebAudio/DynamicsCompressorNode.h b/Userland/Libraries/LibWeb/WebAudio/DynamicsCompressorNode.h index d0d9be54734..1aaa575bbb5 100644 --- a/Userland/Libraries/LibWeb/WebAudio/DynamicsCompressorNode.h +++ b/Userland/Libraries/LibWeb/WebAudio/DynamicsCompressorNode.h @@ -30,11 +30,33 @@ public: static WebIDL::ExceptionOr> create(JS::Realm&, JS::NonnullGCPtr, DynamicsCompressorOptions const& = {}); static WebIDL::ExceptionOr> construct_impl(JS::Realm&, JS::NonnullGCPtr, DynamicsCompressorOptions const& = {}); + JS::NonnullGCPtr threshold() const { return m_threshold; } + JS::NonnullGCPtr knee() const { return m_knee; } + JS::NonnullGCPtr ratio() const { return m_ratio; } + JS::NonnullGCPtr attack() const { return m_attack; } + JS::NonnullGCPtr release() const { return m_release; } + protected: DynamicsCompressorNode(JS::Realm&, JS::NonnullGCPtr, DynamicsCompressorOptions const& = {}); virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; + +private: + // https://webaudio.github.io/web-audio-api/#dom-dynamicscompressornode-threshold + JS::NonnullGCPtr m_threshold; + + // https://webaudio.github.io/web-audio-api/#dom-dynamicscompressornode-knee + JS::NonnullGCPtr m_knee; + + // https://webaudio.github.io/web-audio-api/#dom-dynamicscompressornode-ratio + JS::NonnullGCPtr m_ratio; + + // https://webaudio.github.io/web-audio-api/#dom-dynamicscompressornode-attack + JS::NonnullGCPtr m_attack; + + // https://webaudio.github.io/web-audio-api/#dom-dynamicscompressornode-release + JS::NonnullGCPtr m_release; }; } diff --git a/Userland/Libraries/LibWeb/WebAudio/DynamicsCompressorNode.idl b/Userland/Libraries/LibWeb/WebAudio/DynamicsCompressorNode.idl index 032cd953376..d2bda633394 100644 --- a/Userland/Libraries/LibWeb/WebAudio/DynamicsCompressorNode.idl +++ b/Userland/Libraries/LibWeb/WebAudio/DynamicsCompressorNode.idl @@ -16,10 +16,10 @@ dictionary DynamicsCompressorOptions : AudioNodeOptions { interface DynamicsCompressorNode : AudioNode { constructor(BaseAudioContext context, optional DynamicsCompressorOptions options = {}); - // FIXME: readonly attribute AudioParam threshold; - // FIXME: readonly attribute AudioParam knee; - // FIXME: readonly attribute AudioParam ratio; + readonly attribute AudioParam threshold; + readonly attribute AudioParam knee; + readonly attribute AudioParam ratio; // FIXME: readonly attribute float reduction; - // FIXME: readonly attribute AudioParam attack; - // FIXME: readonly attribute AudioParam release; + readonly attribute AudioParam attack; + readonly attribute AudioParam release; };