/* * Copyright (c) 2025, Tim Ledbetter * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace Web::WebAudio { // https://webaudio.github.io/web-audio-api/#DelayOptions struct DelayOptions : AudioNodeOptions { double max_delay_time { 1 }; double delay_time { 0 }; }; // https://webaudio.github.io/web-audio-api/#DelayNode class DelayNode final : public AudioNode { WEB_PLATFORM_OBJECT(DelayNode, AudioNode); GC_DECLARE_ALLOCATOR(DelayNode); public: virtual ~DelayNode() override; static WebIDL::ExceptionOr> create(JS::Realm&, GC::Ref, DelayOptions const& = {}); static WebIDL::ExceptionOr> construct_impl(JS::Realm&, GC::Ref, DelayOptions const& = {}); virtual WebIDL::UnsignedLong number_of_inputs() override { return 1; } virtual WebIDL::UnsignedLong number_of_outputs() override { return 1; } GC::Ref delay_time() const { return m_delay_time; } private: DelayNode(JS::Realm&, GC::Ref, DelayOptions const&); virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; // https://webaudio.github.io/web-audio-api/#dom-delaynode-delaytime GC::Ref m_delay_time; }; }