WebAudio: Initialize BiquadFilterNode properly

That helps to pass WPT tests
under webaudio/the-audio-api/the-biquadfilternode-interface/ctor-biquadfilter.html
This commit is contained in:
Pavel Shliak 2024-10-30 20:48:22 +04:00 committed by Andreas Kling
parent 51912bf0da
commit c78c706422
Notes: github-actions[bot] 2024-10-31 08:19:56 +00:00
2 changed files with 14 additions and 3 deletions

View file

@ -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;
}

View file

@ -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;