mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-29 06:22:53 +00:00
LibWeb: Implement BaseAudioContext.createBuffer
This is a simple factory function which effectively just calls the AudioBuffer constructor.
This commit is contained in:
parent
17ae65cedc
commit
71ccd8ad25
Notes:
sideshowbarker
2024-07-17 06:35:16 +09:00
Author: https://github.com/shannonbooth
Commit: 71ccd8ad25
Pull-request: https://github.com/SerenityOS/serenity/pull/24447
6 changed files with 19 additions and 1 deletions
|
@ -691,6 +691,7 @@ class Table;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Web::WebAudio {
|
namespace Web::WebAudio {
|
||||||
|
class AudioBuffer;
|
||||||
class AudioContext;
|
class AudioContext;
|
||||||
class AudioNode;
|
class AudioNode;
|
||||||
class AudioParam;
|
class AudioParam;
|
||||||
|
|
|
@ -18,6 +18,11 @@ namespace Web::WebAudio {
|
||||||
|
|
||||||
JS_DEFINE_ALLOCATOR(AudioBuffer);
|
JS_DEFINE_ALLOCATOR(AudioBuffer);
|
||||||
|
|
||||||
|
WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioBuffer>> AudioBuffer::create(JS::Realm& realm, WebIDL::UnsignedLong number_of_channels, WebIDL::UnsignedLong length, float sample_rate)
|
||||||
|
{
|
||||||
|
return construct_impl(realm, { number_of_channels, length, sample_rate });
|
||||||
|
}
|
||||||
|
|
||||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioBuffer>> AudioBuffer::construct_impl(JS::Realm& realm, AudioBufferOptions const& options)
|
WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioBuffer>> AudioBuffer::construct_impl(JS::Realm& realm, AudioBufferOptions const& options)
|
||||||
{
|
{
|
||||||
auto& vm = realm.vm();
|
auto& vm = realm.vm();
|
||||||
|
|
|
@ -28,6 +28,7 @@ class AudioBuffer final : public Bindings::PlatformObject {
|
||||||
JS_DECLARE_ALLOCATOR(AudioBuffer);
|
JS_DECLARE_ALLOCATOR(AudioBuffer);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
static WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioBuffer>> create(JS::Realm&, WebIDL::UnsignedLong number_of_channels, WebIDL::UnsignedLong length, float sample_rate);
|
||||||
static WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioBuffer>> construct_impl(JS::Realm&, AudioBufferOptions const&);
|
static WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioBuffer>> construct_impl(JS::Realm&, AudioBufferOptions const&);
|
||||||
|
|
||||||
virtual ~AudioBuffer() override;
|
virtual ~AudioBuffer() override;
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <LibWeb/Bindings/BaseAudioContextPrototype.h>
|
#include <LibWeb/Bindings/BaseAudioContextPrototype.h>
|
||||||
#include <LibWeb/Bindings/Intrinsics.h>
|
#include <LibWeb/Bindings/Intrinsics.h>
|
||||||
#include <LibWeb/HTML/EventNames.h>
|
#include <LibWeb/HTML/EventNames.h>
|
||||||
|
#include <LibWeb/WebAudio/AudioBuffer.h>
|
||||||
#include <LibWeb/WebAudio/BaseAudioContext.h>
|
#include <LibWeb/WebAudio/BaseAudioContext.h>
|
||||||
#include <LibWeb/WebAudio/DynamicsCompressorNode.h>
|
#include <LibWeb/WebAudio/DynamicsCompressorNode.h>
|
||||||
#include <LibWeb/WebAudio/OscillatorNode.h>
|
#include <LibWeb/WebAudio/OscillatorNode.h>
|
||||||
|
@ -38,6 +39,14 @@ WebIDL::CallbackType* BaseAudioContext::onstatechange()
|
||||||
return event_handler_attribute(HTML::EventNames::statechange);
|
return event_handler_attribute(HTML::EventNames::statechange);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-createbuffer
|
||||||
|
WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioBuffer>> BaseAudioContext::create_buffer(WebIDL::UnsignedLong number_of_channels, WebIDL::UnsignedLong length, float sample_rate)
|
||||||
|
{
|
||||||
|
// Creates an AudioBuffer of the given size. The audio data in the buffer will be zero-initialized (silent).
|
||||||
|
// A NotSupportedError exception MUST be thrown if any of the arguments is negative, zero, or outside its nominal range.
|
||||||
|
return AudioBuffer::create(realm(), number_of_channels, length, sample_rate);
|
||||||
|
}
|
||||||
|
|
||||||
// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-createoscillator
|
// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-createoscillator
|
||||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<OscillatorNode>> BaseAudioContext::create_oscillator()
|
WebIDL::ExceptionOr<JS::NonnullGCPtr<OscillatorNode>> BaseAudioContext::create_oscillator()
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,6 +47,7 @@ public:
|
||||||
|
|
||||||
static WebIDL::ExceptionOr<void> verify_audio_options_inside_nominal_range(JS::Realm&, WebIDL::UnsignedLong number_of_channels, WebIDL::UnsignedLong length, float sample_rate);
|
static WebIDL::ExceptionOr<void> verify_audio_options_inside_nominal_range(JS::Realm&, WebIDL::UnsignedLong number_of_channels, WebIDL::UnsignedLong length, float sample_rate);
|
||||||
|
|
||||||
|
WebIDL::ExceptionOr<JS::NonnullGCPtr<AudioBuffer>> create_buffer(WebIDL::UnsignedLong number_of_channels, WebIDL::UnsignedLong length, float sample_rate);
|
||||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<OscillatorNode>> create_oscillator();
|
WebIDL::ExceptionOr<JS::NonnullGCPtr<OscillatorNode>> create_oscillator();
|
||||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<DynamicsCompressorNode>> create_dynamics_compressor();
|
WebIDL::ExceptionOr<JS::NonnullGCPtr<DynamicsCompressorNode>> create_dynamics_compressor();
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#import <DOM/EventTarget.idl>
|
#import <DOM/EventTarget.idl>
|
||||||
#import <DOM/EventHandler.idl>
|
#import <DOM/EventHandler.idl>
|
||||||
|
#import <WebAudio/AudioBuffer.idl>
|
||||||
#import <WebAudio/DynamicsCompressorNode.idl>
|
#import <WebAudio/DynamicsCompressorNode.idl>
|
||||||
#import <WebAudio/OscillatorNode.idl>
|
#import <WebAudio/OscillatorNode.idl>
|
||||||
|
|
||||||
|
@ -24,7 +25,7 @@ interface BaseAudioContext : EventTarget {
|
||||||
|
|
||||||
[FIXME] AnalyserNode createAnalyser ();
|
[FIXME] AnalyserNode createAnalyser ();
|
||||||
[FIXME] BiquadFilterNode createBiquadFilter ();
|
[FIXME] BiquadFilterNode createBiquadFilter ();
|
||||||
[FIXME] AudioBuffer createBuffer (unsigned long numberOfChannels, unsigned long length, float sampleRate);
|
AudioBuffer createBuffer(unsigned long numberOfChannels, unsigned long length, float sampleRate);
|
||||||
[FIXME] AudioBufferSourceNode createBufferSource ();
|
[FIXME] AudioBufferSourceNode createBufferSource ();
|
||||||
[FIXME] ChannelMergerNode createChannelMerger (optional unsigned long numberOfInputs = 6);
|
[FIXME] ChannelMergerNode createChannelMerger (optional unsigned long numberOfInputs = 6);
|
||||||
[FIXME] ChannelSplitterNode createChannelSplitter (optional unsigned long numberOfOutputs = 6);
|
[FIXME] ChannelSplitterNode createChannelSplitter (optional unsigned long numberOfOutputs = 6);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue