/* * Copyright (c) 2024, Bar Yemini * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Web::WebAudio { // https://webaudio.github.io/web-audio-api/#AudioBufferSourceOptions struct AudioBufferSourceOptions { JS::GCPtr buffer; float detune { 0 }; bool loop { false }; double loop_end { 0 }; double loop_start { 0 }; float playback_rate { 1 }; }; // https://webaudio.github.io/web-audio-api/#AudioBufferSourceNode class AudioBufferSourceNode : public AudioScheduledSourceNode { WEB_PLATFORM_OBJECT(AudioBufferSourceNode, AudioScheduledSourceNode); JS_DECLARE_ALLOCATOR(AudioBufferSourceNode); public: virtual ~AudioBufferSourceNode() override; static WebIDL::ExceptionOr> create(JS::Realm&, JS::NonnullGCPtr, AudioBufferSourceOptions const& = {}); static WebIDL::ExceptionOr> construct_impl(JS::Realm&, JS::NonnullGCPtr, AudioBufferSourceOptions const& = {}); protected: AudioBufferSourceNode(JS::Realm&, JS::NonnullGCPtr, AudioBufferSourceOptions const& = {}); virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; }; }