LibWeb: Add stub IDL interface for OscillatorNode
This source node generates a periodic wave form.
This commit is contained in:
parent
c9b2c1c747
commit
a83f4216a5
Notes:
sideshowbarker
2024-07-17 11:30:05 +09:00
Author: https://github.com/shannonbooth Commit: https://github.com/SerenityOS/serenity/commit/a83f4216a5 Pull-request: https://github.com/SerenityOS/serenity/pull/24143
6 changed files with 109 additions and 0 deletions
Userland/Libraries/LibWeb
|
@ -664,6 +664,7 @@ set(SOURCES
|
|||
WebAudio/AudioScheduledSourceNode.cpp
|
||||
WebAudio/BaseAudioContext.cpp
|
||||
WebAudio/OfflineAudioContext.cpp
|
||||
WebAudio/OscillatorNode.cpp
|
||||
WebAudio/PeriodicWave.cpp
|
||||
WebDriver/Capabilities.cpp
|
||||
WebDriver/Client.cpp
|
||||
|
|
|
@ -686,6 +686,7 @@ class AudioParam;
|
|||
class AudioScheduledSourceNode;
|
||||
class BaseAudioContext;
|
||||
class OfflineAudioContext;
|
||||
class OscillatorNode;
|
||||
class PeriodicWave;
|
||||
|
||||
enum class AudioContextState;
|
||||
|
|
39
Userland/Libraries/LibWeb/WebAudio/OscillatorNode.cpp
Normal file
39
Userland/Libraries/LibWeb/WebAudio/OscillatorNode.cpp
Normal file
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Shannon Booth <shannon@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibWeb/Bindings/Intrinsics.h>
|
||||
#include <LibWeb/Bindings/OscillatorNodePrototype.h>
|
||||
#include <LibWeb/WebAudio/OscillatorNode.h>
|
||||
|
||||
namespace Web::WebAudio {
|
||||
|
||||
JS_DEFINE_ALLOCATOR(OscillatorNode);
|
||||
|
||||
OscillatorNode::~OscillatorNode() = default;
|
||||
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<OscillatorNode>> OscillatorNode::create(JS::Realm& realm, JS::NonnullGCPtr<BaseAudioContext> context, OscillatorOptions const& options)
|
||||
{
|
||||
return construct_impl(realm, context, options);
|
||||
}
|
||||
|
||||
// https://webaudio.github.io/web-audio-api/#dom-oscillatornode-oscillatornode
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<OscillatorNode>> OscillatorNode::construct_impl(JS::Realm& realm, JS::NonnullGCPtr<BaseAudioContext>, OscillatorOptions const&)
|
||||
{
|
||||
return WebIDL::NotSupportedError::create(realm, "FIXME: Implement OscillatorNode::construct_impl"_fly_string);
|
||||
}
|
||||
|
||||
void OscillatorNode::initialize(JS::Realm& realm)
|
||||
{
|
||||
Base::initialize(realm);
|
||||
WEB_SET_PROTOTYPE_FOR_INTERFACE(OscillatorNode);
|
||||
}
|
||||
|
||||
void OscillatorNode::visit_edges(Cell::Visitor& visitor)
|
||||
{
|
||||
Base::visit_edges(visitor);
|
||||
}
|
||||
|
||||
}
|
38
Userland/Libraries/LibWeb/WebAudio/OscillatorNode.h
Normal file
38
Userland/Libraries/LibWeb/WebAudio/OscillatorNode.h
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* Copyright (c) 2024, Shannon Booth <shannon@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibWeb/Bindings/OscillatorNodePrototype.h>
|
||||
#include <LibWeb/WebAudio/AudioScheduledSourceNode.h>
|
||||
|
||||
namespace Web::WebAudio {
|
||||
|
||||
// https://webaudio.github.io/web-audio-api/#OscillatorOptions
|
||||
struct OscillatorOptions : AudioNodeOptions {
|
||||
Bindings::OscillatorType type { Bindings::OscillatorType::Sine };
|
||||
float frequency { 440 };
|
||||
float detune { 0 };
|
||||
JS::GCPtr<PeriodicWave> periodic_wave;
|
||||
};
|
||||
|
||||
// https://webaudio.github.io/web-audio-api/#OscillatorNode
|
||||
class OscillatorNode : public AudioScheduledSourceNode {
|
||||
WEB_PLATFORM_OBJECT(OscillatorNode, AudioScheduledSourceNode);
|
||||
JS_DECLARE_ALLOCATOR(OscillatorNode);
|
||||
|
||||
public:
|
||||
virtual ~OscillatorNode() override;
|
||||
|
||||
static WebIDL::ExceptionOr<JS::NonnullGCPtr<OscillatorNode>> create(JS::Realm&, JS::NonnullGCPtr<BaseAudioContext>, OscillatorOptions const& = {});
|
||||
static WebIDL::ExceptionOr<JS::NonnullGCPtr<OscillatorNode>> construct_impl(JS::Realm&, JS::NonnullGCPtr<BaseAudioContext>, OscillatorOptions const& = {});
|
||||
|
||||
protected:
|
||||
virtual void initialize(JS::Realm&) override;
|
||||
virtual void visit_edges(Cell::Visitor&) override;
|
||||
};
|
||||
|
||||
}
|
29
Userland/Libraries/LibWeb/WebAudio/OscillatorNode.idl
Normal file
29
Userland/Libraries/LibWeb/WebAudio/OscillatorNode.idl
Normal file
|
@ -0,0 +1,29 @@
|
|||
#import <WebAudio/AudioScheduledSourceNode.idl>
|
||||
#import <WebAudio/PeriodicWave.idl>
|
||||
|
||||
// https://webaudio.github.io/web-audio-api/#enumdef-oscillatortype
|
||||
enum OscillatorType {
|
||||
"sine",
|
||||
"square",
|
||||
"sawtooth",
|
||||
"triangle",
|
||||
"custom"
|
||||
};
|
||||
|
||||
// https://webaudio.github.io/web-audio-api/#OscillatorOptions
|
||||
dictionary OscillatorOptions : AudioNodeOptions {
|
||||
OscillatorType type = "sine";
|
||||
float frequency = 440;
|
||||
float detune = 0;
|
||||
PeriodicWave periodicWave;
|
||||
};
|
||||
|
||||
// https://webaudio.github.io/web-audio-api/#OscillatorNode
|
||||
[Exposed=Window]
|
||||
interface OscillatorNode : AudioScheduledSourceNode {
|
||||
constructor(BaseAudioContext context, optional OscillatorOptions options = {});
|
||||
// FIXME: attribute OscillatorType type;
|
||||
// FIXME: readonly attribute AudioParam frequency;
|
||||
// FIXME: readonly attribute AudioParam detune;
|
||||
// FIXME: undefined setPeriodicWave(PeriodicWave periodicWave);
|
||||
};
|
|
@ -300,6 +300,7 @@ libweb_js_bindings(WebAudio/AudioParam)
|
|||
libweb_js_bindings(WebAudio/AudioScheduledSourceNode)
|
||||
libweb_js_bindings(WebAudio/BaseAudioContext)
|
||||
libweb_js_bindings(WebAudio/OfflineAudioContext)
|
||||
libweb_js_bindings(WebAudio/OscillatorNode)
|
||||
libweb_js_bindings(WebAudio/PeriodicWave)
|
||||
libweb_js_bindings(WebGL/WebGLContextEvent)
|
||||
libweb_js_bindings(WebGL/WebGLRenderingContext)
|
||||
|
|
Loading…
Add table
Reference in a new issue