mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-27 21:42:53 +00:00
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.
49 lines
1.8 KiB
C++
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;
|
|
};
|
|
|
|
}
|