Преглед на файлове

WebAudio: Initialize BiquadFilterNode properly

That helps to pass WPT tests
under webaudio/the-audio-api/the-biquadfilternode-interface/ctor-biquadfilter.html
Pavel Shliak преди 9 месеца
родител
ревизия
c78c706422
променени са 2 файла, в които са добавени 14 реда и са изтрити 3 реда
  1. 13 2
      Userland/Libraries/LibWeb/WebAudio/BiquadFilterNode.cpp
  2. 1 1
      Userland/Libraries/LibWeb/WebAudio/BiquadFilterNode.h

+ 13 - 2
Userland/Libraries/LibWeb/WebAudio/BiquadFilterNode.cpp

@@ -17,6 +17,7 @@ JS_DEFINE_ALLOCATOR(BiquadFilterNode);
 
 BiquadFilterNode::BiquadFilterNode(JS::Realm& realm, JS::NonnullGCPtr<BaseAudioContext> context, BiquadFilterOptions const& options)
     : AudioNode(realm, context)
+    , m_type(options.type)
     , m_frequency(AudioParam::create(realm, options.frequency, NumericLimits<float>::lowest(), NumericLimits<float>::max(), Bindings::AutomationRate::ARate))
     , m_detune(AudioParam::create(realm, options.detune, NumericLimits<float>::lowest(), NumericLimits<float>::max(), Bindings::AutomationRate::ARate))
     , m_q(AudioParam::create(realm, options.q, NumericLimits<float>::lowest(), NumericLimits<float>::max(), Bindings::AutomationRate::ARate))
@@ -27,10 +28,9 @@ BiquadFilterNode::BiquadFilterNode(JS::Realm& realm, JS::NonnullGCPtr<BaseAudioC
 BiquadFilterNode::~BiquadFilterNode() = default;
 
 // https://webaudio.github.io/web-audio-api/#dom-biquadfilternode-type
-WebIDL::ExceptionOr<void> BiquadFilterNode::set_type(Bindings::BiquadFilterType type)
+void BiquadFilterNode::set_type(Bindings::BiquadFilterType type)
 {
     m_type = type;
-    return {};
 }
 
 // https://webaudio.github.io/web-audio-api/#dom-biquadfilternode-type
@@ -85,6 +85,17 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<BiquadFilterNode>> BiquadFilterNode::constr
     // MUST initialize the AudioNode this, with context and options as arguments.
 
     auto node = realm.vm().heap().allocate<BiquadFilterNode>(realm, realm, context, options);
+
+    // Default options for channel count and interpretation
+    // https://webaudio.github.io/web-audio-api/#BiquadFilterNode
+    AudioNodeDefaultOptions default_options;
+    default_options.channel_count_mode = Bindings::ChannelCountMode::Max;
+    default_options.channel_interpretation = Bindings::ChannelInterpretation::Speakers;
+    default_options.channel_count = 2;
+    // FIXME: Set tail-time to yes
+
+    TRY(node->initialize_audio_node_options(options, default_options));
+
     return node;
 }
 

+ 1 - 1
Userland/Libraries/LibWeb/WebAudio/BiquadFilterNode.h

@@ -32,7 +32,7 @@ public:
     WebIDL::UnsignedLong number_of_inputs() override { return 1; }
     WebIDL::UnsignedLong number_of_outputs() override { return 1; }
 
-    WebIDL::ExceptionOr<void> set_type(Bindings::BiquadFilterType);
+    void set_type(Bindings::BiquadFilterType);
     Bindings::BiquadFilterType type() const;
     JS::NonnullGCPtr<AudioParam> frequency() const;
     JS::NonnullGCPtr<AudioParam> detune() const;