diff --git a/Libraries/LibWeb/WebAudio/AudioBufferSourceNode.cpp b/Libraries/LibWeb/WebAudio/AudioBufferSourceNode.cpp index 3980ebab55a..ca0d9758e7d 100644 --- a/Libraries/LibWeb/WebAudio/AudioBufferSourceNode.cpp +++ b/Libraries/LibWeb/WebAudio/AudioBufferSourceNode.cpp @@ -129,6 +129,17 @@ WebIDL::ExceptionOr> AudioBufferSourceNode::const // MUST initialize the AudioNode this, with context and options as arguments. auto node = realm.create(realm, context, options); + + // Default options for channel count and interpretation + // https://webaudio.github.io/web-audio-api/#AudioBufferSourceNode + AudioNodeDefaultOptions default_options; + default_options.channel_count = 2; + default_options.channel_count_mode = Bindings::ChannelCountMode::Max; + default_options.channel_interpretation = Bindings::ChannelInterpretation::Speakers; + // FIXME: Set tail-time to no + + TRY(node->initialize_audio_node_options(options, default_options)); + return node; } diff --git a/Libraries/LibWeb/WebAudio/AudioBufferSourceNode.h b/Libraries/LibWeb/WebAudio/AudioBufferSourceNode.h index e0fb0782fe5..6de1696a3b6 100644 --- a/Libraries/LibWeb/WebAudio/AudioBufferSourceNode.h +++ b/Libraries/LibWeb/WebAudio/AudioBufferSourceNode.h @@ -14,7 +14,7 @@ namespace Web::WebAudio { // https://webaudio.github.io/web-audio-api/#AudioBufferSourceOptions -struct AudioBufferSourceOptions { +struct AudioBufferSourceOptions : AudioNodeOptions { GC::Ptr buffer; float detune { 0 }; bool loop { false }; @@ -42,7 +42,7 @@ public: WebIDL::ExceptionOr set_loop_end(double); double loop_end() const; WebIDL::UnsignedLong number_of_inputs() override { return 0; } - WebIDL::UnsignedLong number_of_outputs() override { return 2; } + WebIDL::UnsignedLong number_of_outputs() override { return 1; } WebIDL::ExceptionOr start(Optional, Optional, Optional); diff --git a/Tests/LibWeb/Text/expected/wpt-import/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.txt b/Tests/LibWeb/Text/expected/wpt-import/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.txt new file mode 100644 index 00000000000..a5e7b419a24 --- /dev/null +++ b/Tests/LibWeb/Text/expected/wpt-import/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.txt @@ -0,0 +1,49 @@ +Harness status: OK + +Found 44 tests + +44 Pass +Pass # AUDIT TASK RUNNER STARTED. +Pass Executing "initialize" +Pass Executing "invalid constructor" +Pass Executing "default constructor" +Pass Executing "nullable buffer" +Pass Executing "constructor options" +Pass Audit report +Pass > [initialize] +Pass context = new OfflineAudioContext(...) did not throw an exception. +Pass < [initialize] All assertions passed. (total 1 assertions) +Pass > [invalid constructor] +Pass new AudioBufferSourceNode() threw TypeError: "AudioBufferSourceNode() needs one argument". +Pass new AudioBufferSourceNode(1) threw TypeError: "Not an object of type BaseAudioContext". +Pass new AudioBufferSourceNode(context, 42) threw TypeError: "Not an object of type AudioBufferSourceOptions". +Pass < [invalid constructor] All assertions passed. (total 3 assertions) +Pass > [default constructor] +Pass node0 = new AudioBufferSourceNode(context) did not throw an exception. +Pass node0 instanceof AudioBufferSourceNode is equal to true. +Pass node0.numberOfInputs is equal to 0. +Pass node0.numberOfOutputs is equal to 1. +Pass node0.channelCount is equal to 2. +Pass node0.channelCountMode is equal to max. +Pass node0.channelInterpretation is equal to speakers. +Pass node0.buffer is equal to null. +Pass node0.detune.value is equal to 0. +Pass node0.loop is equal to false. +Pass node0.loopEnd is equal to 0. +Pass node0.loopStart is equal to 0. +Pass node0.playbackRate.value is equal to 1. +Pass < [default constructor] All assertions passed. (total 13 assertions) +Pass > [nullable buffer] +Pass node1 = new AudioBufferSourceNode(c, {"buffer":null} did not throw an exception. +Pass node1.buffer is equal to null. +Pass < [nullable buffer] All assertions passed. (total 2 assertions) +Pass > [constructor options] +Pass node = new AudioBufferSourceNode(c, {"buffer":{},"detune":0.5,"loop":true,"loopEnd":0.010416666666666666,"loopStart":0.00010416666666666667,"playbackRate":0.75}) did not throw an exception. +Pass node2.buffer === buffer is equal to true. +Pass node2.detune.value is equal to 0.5. +Pass node2.loop is equal to true. +Pass node2.loopEnd is equal to 0.010416666666666666. +Pass node2.loopStart is equal to 0.00010416666666666667. +Pass node2.playbackRate.value is equal to 0.75. +Pass < [constructor options] All assertions passed. (total 7 assertions) +Pass # AUDIT TASK RUNNER FINISHED: 5 tasks ran successfully. \ No newline at end of file diff --git a/Tests/LibWeb/Text/input/wpt-import/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html b/Tests/LibWeb/Text/input/wpt-import/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html new file mode 100644 index 00000000000..846d7203939 --- /dev/null +++ b/Tests/LibWeb/Text/input/wpt-import/webaudio/the-audio-api/the-audiobuffersourcenode-interface/ctor-audiobuffersource.html @@ -0,0 +1,116 @@ + + + + + Test Constructor: AudioBufferSource + + + + + + + + + + +