LibWeb: Implement BaseAudioContext.createGain

This commit is contained in:
Shannon Booth 2024-05-28 15:48:10 +12:00 committed by Andreas Kling
parent 1fa7235fec
commit 6466fca20a
5 changed files with 39 additions and 1 deletions

View file

@ -0,0 +1,5 @@
GainNode
AudioNode
EventTarget
Object
[object AudioParam] current: 1, default: 1, min: -3.4028234663852886e+38, max: 3.4028234663852886e+38, rate: a-rate

View file

@ -0,0 +1,23 @@
<script src="../include.js"></script>
<script>
function dumpAudioParam(param) {
println(`${param} current: ${param.value}, default: ${param.defaultValue}, min: ${param.minValue}, max: ${param.maxValue}, rate: ${param.automationRate}`);
}
test(() => {
const audioContext = new OfflineAudioContext(1, 5000, 44100);
const node = audioContext.createGain();
// Check prototype
let prototype = Object.getPrototypeOf(node);
while (prototype) {
println(prototype.constructor.name);
prototype = Object.getPrototypeOf(prototype);
}
// Audio Params
dumpAudioParam(node.gain);
});
</script>

View file

@ -11,6 +11,7 @@
#include <LibWeb/WebAudio/AudioBuffer.h>
#include <LibWeb/WebAudio/BaseAudioContext.h>
#include <LibWeb/WebAudio/DynamicsCompressorNode.h>
#include <LibWeb/WebAudio/GainNode.h>
#include <LibWeb/WebAudio/OscillatorNode.h>
namespace Web::WebAudio {
@ -61,6 +62,13 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<DynamicsCompressorNode>> BaseAudioContext::
return DynamicsCompressorNode::create(realm(), *this);
}
// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-creategain
JS::NonnullGCPtr<GainNode> BaseAudioContext::create_gain()
{
// Factory method for GainNode.
return GainNode::create(realm(), *this);
}
// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-createbuffer
WebIDL::ExceptionOr<void> BaseAudioContext::verify_audio_options_inside_nominal_range(JS::Realm& realm, WebIDL::UnsignedLong number_of_channels, WebIDL::UnsignedLong length, float sample_rate)
{

View file

@ -50,6 +50,7 @@ public:
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<DynamicsCompressorNode>> create_dynamics_compressor();
JS::NonnullGCPtr<GainNode> create_gain();
protected:
explicit BaseAudioContext(JS::Realm&, float m_sample_rate = 0);

View file

@ -2,6 +2,7 @@
#import <DOM/EventHandler.idl>
#import <WebAudio/AudioBuffer.idl>
#import <WebAudio/DynamicsCompressorNode.idl>
#import <WebAudio/GainNode.idl>
#import <WebAudio/OscillatorNode.idl>
// https://www.w3.org/TR/webaudio/#enumdef-audiocontextstate
@ -33,7 +34,7 @@ interface BaseAudioContext : EventTarget {
[FIXME] ConvolverNode createConvolver ();
[FIXME] DelayNode createDelay (optional double maxDelayTime = 1.0);
DynamicsCompressorNode createDynamicsCompressor();
[FIXME] GainNode createGain ();
GainNode createGain();
[FIXME] IIRFilterNode createIIRFilter (sequence<double> feedforward, sequence<double> feedback);
OscillatorNode createOscillator();
[FIXME] PannerNode createPanner ();