mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-21 23:20:20 +00:00
LibWeb: Implement AudioNode.channelCount
This commit is contained in:
parent
7b4f0d13ee
commit
cb21201550
Notes:
github-actions[bot]
2024-10-08 14:35:10 +00:00
Author: https://github.com/gmta Commit: https://github.com/LadybirdBrowser/ladybird/commit/cb212015505 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1679
4 changed files with 35 additions and 10 deletions
|
@ -7,9 +7,11 @@
|
|||
|
||||
#include <LibWeb/Bindings/AudioDestinationNodePrototype.h>
|
||||
#include <LibWeb/Bindings/Intrinsics.h>
|
||||
#include <LibWeb/WebAudio/AudioContext.h>
|
||||
#include <LibWeb/WebAudio/AudioDestinationNode.h>
|
||||
#include <LibWeb/WebAudio/AudioNode.h>
|
||||
#include <LibWeb/WebAudio/BaseAudioContext.h>
|
||||
#include <LibWeb/WebAudio/OfflineAudioContext.h>
|
||||
|
||||
namespace Web::WebAudio {
|
||||
|
||||
|
@ -45,4 +47,25 @@ void AudioDestinationNode::visit_edges(Cell::Visitor& visitor)
|
|||
Base::visit_edges(visitor);
|
||||
}
|
||||
|
||||
// https://webaudio.github.io/web-audio-api/#dom-audionode-channelcount
|
||||
WebIDL::ExceptionOr<void> AudioDestinationNode::set_channel_count(WebIDL::UnsignedLong channel_count)
|
||||
{
|
||||
// The behavior depends on whether the destination node is the destination of an AudioContext
|
||||
// or OfflineAudioContext:
|
||||
|
||||
// AudioContext: The channel count MUST be between 1 and maxChannelCount. An IndexSizeError
|
||||
// exception MUST be thrown for any attempt to set the count outside this range.
|
||||
if (is<AudioContext>(*context())) {
|
||||
if (channel_count < 1 || channel_count > max_channel_count())
|
||||
return WebIDL::IndexSizeError::create(realm(), "Channel index is out of range"_fly_string);
|
||||
}
|
||||
|
||||
// OfflineAudioContext: The channel count cannot be changed. An InvalidStateError exception MUST
|
||||
// be thrown for any attempt to change the value.
|
||||
if (is<OfflineAudioContext>(*context()))
|
||||
return WebIDL::InvalidStateError::create(realm(), "Cannot change channel count in an OfflineAudioContext"_fly_string);
|
||||
|
||||
return AudioNode::set_channel_count(channel_count);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ public:
|
|||
WebIDL::UnsignedLong max_channel_count();
|
||||
WebIDL::UnsignedLong number_of_inputs() override { return 1; }
|
||||
WebIDL::UnsignedLong number_of_outputs() override { return 1; }
|
||||
WebIDL::ExceptionOr<void> set_channel_count(WebIDL::UnsignedLong) override;
|
||||
|
||||
static JS::NonnullGCPtr<AudioDestinationNode> construct_impl(JS::Realm&, JS::NonnullGCPtr<BaseAudioContext>);
|
||||
|
||||
|
|
|
@ -101,15 +101,13 @@ void AudioNode::disconnect(JS::NonnullGCPtr<AudioParam> destination_param, WebID
|
|||
// https://webaudio.github.io/web-audio-api/#dom-audionode-channelcount
|
||||
WebIDL::ExceptionOr<void> AudioNode::set_channel_count(WebIDL::UnsignedLong channel_count)
|
||||
{
|
||||
(void)channel_count;
|
||||
return WebIDL::NotSupportedError::create(realm(), "FIXME: Implement AudioNode::set_channel_count(channel_count)"_fly_string);
|
||||
}
|
||||
// If this value is set to zero or to a value greater than the implementation’s maximum number
|
||||
// of channels the implementation MUST throw a NotSupportedError exception.
|
||||
if (channel_count == 0 || channel_count > BaseAudioContext::MAX_NUMBER_OF_CHANNELS)
|
||||
return WebIDL::NotSupportedError::create(realm(), "Invalid channel count"_fly_string);
|
||||
|
||||
// https://webaudio.github.io/web-audio-api/#dom-audionode-channelcount
|
||||
WebIDL::UnsignedLong AudioNode::channel_count()
|
||||
{
|
||||
dbgln("FIXME: Implement AudioNode::channel_count()");
|
||||
return 2;
|
||||
m_channel_count = channel_count;
|
||||
return {};
|
||||
}
|
||||
|
||||
// https://webaudio.github.io/web-audio-api/#dom-audionode-channelcountmode
|
||||
|
|
|
@ -53,8 +53,10 @@ public:
|
|||
// https://webaudio.github.io/web-audio-api/#dom-audionode-numberofoutputs
|
||||
virtual WebIDL::UnsignedLong number_of_outputs() = 0;
|
||||
|
||||
WebIDL::ExceptionOr<void> set_channel_count(WebIDL::UnsignedLong);
|
||||
WebIDL::UnsignedLong channel_count();
|
||||
// https://webaudio.github.io/web-audio-api/#dom-audionode-channelcount
|
||||
virtual WebIDL::ExceptionOr<void> set_channel_count(WebIDL::UnsignedLong);
|
||||
virtual WebIDL::UnsignedLong channel_count() const { return m_channel_count; }
|
||||
|
||||
WebIDL::ExceptionOr<void> set_channel_count_mode(Bindings::ChannelCountMode);
|
||||
Bindings::ChannelCountMode channel_count_mode();
|
||||
WebIDL::ExceptionOr<void> set_channel_interpretation(Bindings::ChannelInterpretation);
|
||||
|
@ -68,6 +70,7 @@ protected:
|
|||
|
||||
private:
|
||||
JS::NonnullGCPtr<BaseAudioContext> m_context;
|
||||
WebIDL::UnsignedLong m_channel_count { 2 };
|
||||
Bindings::ChannelCountMode m_channel_count_mode { Bindings::ChannelCountMode::Max };
|
||||
Bindings::ChannelInterpretation m_channel_interpretation { Bindings::ChannelInterpretation::Speakers };
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue