ladybird/Userland/Libraries/LibWeb/WebAudio/AudioNode.h
Shannon Booth 6661c68b28 LibWeb: Add stub IDL interface for AudioNode
An AudioNode is the fundamental building block used in 'Audio
Contexts'. In our immediate case, the audio node we are working towards
implementing is an oscillating source node.
2024-05-02 07:49:23 +02:00

49 lines
1.8 KiB
C++

/*
* Copyright (c) 2024, Shannon Booth <shannon@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Optional.h>
#include <LibJS/Forward.h>
#include <LibWeb/Bindings/AudioNodePrototype.h>
#include <LibWeb/Bindings/PlatformObject.h>
#include <LibWeb/DOM/EventTarget.h>
#include <LibWeb/WebIDL/Types.h>
namespace Web::WebAudio {
// https://webaudio.github.io/web-audio-api/#AudioNodeOptions
struct AudioNodeOptions {
Optional<WebIDL::UnsignedLong> channel_count;
Bindings::ChannelCountMode channel_count_mode;
Bindings::ChannelInterpretation channel_interpretation;
};
// https://webaudio.github.io/web-audio-api/#AudioNode
class AudioNode : public DOM::EventTarget {
WEB_PLATFORM_OBJECT(AudioNode, DOM::EventTarget);
JS_DECLARE_ALLOCATOR(AudioNode);
public:
virtual ~AudioNode() override;
WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioNode>> connect(JS::NonnullGCPtr<AudioNode> destination_node, WebIDL::UnsignedLong output = 0, WebIDL::UnsignedLong input = 0);
WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioNode>> connect(JS::NonnullGCPtr<AudioParam> destination_param, WebIDL::UnsignedLong output = 0);
void disconnect();
void disconnect(WebIDL::UnsignedLong output);
void disconnect(JS::NonnullGCPtr<AudioNode> destination_node);
void disconnect(JS::NonnullGCPtr<AudioNode> destination_node, WebIDL::UnsignedLong output);
void disconnect(JS::NonnullGCPtr<AudioNode> destination_node, WebIDL::UnsignedLong output, WebIDL::UnsignedLong input);
void disconnect(JS::NonnullGCPtr<AudioParam> destination_param);
void disconnect(JS::NonnullGCPtr<AudioParam> destination_param, WebIDL::UnsignedLong output);
protected:
virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Cell::Visitor&) override;
};
}