diff --git a/Libraries/LibWeb/WebAudio/OscillatorNode.cpp b/Libraries/LibWeb/WebAudio/OscillatorNode.cpp index 6ee90e55a7d..95bff4e46a2 100644 --- a/Libraries/LibWeb/WebAudio/OscillatorNode.cpp +++ b/Libraries/LibWeb/WebAudio/OscillatorNode.cpp @@ -4,6 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include #include @@ -43,6 +44,7 @@ WebIDL::ExceptionOr> OscillatorNode::construct_impl(JS:: OscillatorNode::OscillatorNode(JS::Realm& realm, GC::Ref context, OscillatorOptions const& options) : AudioScheduledSourceNode(realm, context) , m_frequency(AudioParam::create(realm, options.frequency, -context->nyquist_frequency(), context->nyquist_frequency(), Bindings::AutomationRate::ARate)) + , m_detune(AudioParam::create(realm, options.detune, -1200 * AK::log2(NumericLimits::max()), 1200 * AK::log2(NumericLimits::max()), Bindings::AutomationRate::ARate)) { } @@ -83,6 +85,7 @@ void OscillatorNode::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(m_frequency); + visitor.visit(m_detune); } } diff --git a/Libraries/LibWeb/WebAudio/OscillatorNode.h b/Libraries/LibWeb/WebAudio/OscillatorNode.h index 29f8feeb23c..7426f6b6991 100644 --- a/Libraries/LibWeb/WebAudio/OscillatorNode.h +++ b/Libraries/LibWeb/WebAudio/OscillatorNode.h @@ -34,6 +34,8 @@ public: WebIDL::ExceptionOr set_type(Bindings::OscillatorType); GC::Ref frequency() const { return m_frequency; } + GC::Ref detune() const { return m_detune; } + WebIDL::UnsignedLong number_of_inputs() override { return 0; } WebIDL::UnsignedLong number_of_outputs() override { return 1; } @@ -51,6 +53,9 @@ private: // https://webaudio.github.io/web-audio-api/#dom-oscillatornode-frequency GC::Ref m_frequency; + + // https://webaudio.github.io/web-audio-api/#dom-oscillatornode-detune + GC::Ref m_detune; }; } diff --git a/Libraries/LibWeb/WebAudio/OscillatorNode.idl b/Libraries/LibWeb/WebAudio/OscillatorNode.idl index 7652226bb97..80df6124a63 100644 --- a/Libraries/LibWeb/WebAudio/OscillatorNode.idl +++ b/Libraries/LibWeb/WebAudio/OscillatorNode.idl @@ -24,6 +24,6 @@ interface OscillatorNode : AudioScheduledSourceNode { constructor(BaseAudioContext context, optional OscillatorOptions options = {}); attribute OscillatorType type; readonly attribute AudioParam frequency; - [FIXME] readonly attribute AudioParam detune; + readonly attribute AudioParam detune; [FIXME] undefined setPeriodicWave(PeriodicWave periodicWave); };