mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
Auto merge of #21750 - Manishearth:biquad, r=ferjm
Implement BiquadFilterNode A bunch of tests still fail but some of it may be a timing issue, looking at it the tests are *at least* affected by https://github.com/servo/servo/issues/21659 (changing how they work to avoid problems from that does not make them pass but does change the exact value of the error), so I feel like I should fix that first before investigating these. r? @ferjm <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21750) <!-- Reviewable:end -->
This commit is contained in:
commit
ac331c6663
22 changed files with 326 additions and 154 deletions
12
Cargo.lock
generated
12
Cargo.lock
generated
|
@ -2856,7 +2856,7 @@ dependencies = [
|
||||||
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"num_cpus 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num_cpus 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -3279,7 +3279,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "servo-media"
|
name = "servo-media"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/servo/media#8f65e32617b068e8a0d152236848fd98cc08a3ae"
|
source = "git+https://github.com/servo/media#3292937b8bec7daed12b2f1b5739eb293610f5a2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"servo-media-audio 0.1.0 (git+https://github.com/servo/media)",
|
"servo-media-audio 0.1.0 (git+https://github.com/servo/media)",
|
||||||
"servo-media-gstreamer 0.1.0 (git+https://github.com/servo/media)",
|
"servo-media-gstreamer 0.1.0 (git+https://github.com/servo/media)",
|
||||||
|
@ -3289,7 +3289,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "servo-media-audio"
|
name = "servo-media-audio"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/servo/media#8f65e32617b068e8a0d152236848fd98cc08a3ae"
|
source = "git+https://github.com/servo/media#3292937b8bec7daed12b2f1b5739eb293610f5a2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"boxfnonce 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"boxfnonce 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"byte-slice-cast 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"byte-slice-cast 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -3305,7 +3305,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "servo-media-gstreamer"
|
name = "servo-media-gstreamer"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/servo/media#8f65e32617b068e8a0d152236848fd98cc08a3ae"
|
source = "git+https://github.com/servo/media#3292937b8bec7daed12b2f1b5739eb293610f5a2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"byte-slice-cast 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"byte-slice-cast 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"glib 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"glib 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -3323,7 +3323,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "servo-media-player"
|
name = "servo-media-player"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/servo/media#8f65e32617b068e8a0d152236848fd98cc08a3ae"
|
source = "git+https://github.com/servo/media#3292937b8bec7daed12b2f1b5739eb293610f5a2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ipc-channel 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"ipc-channel 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -3418,7 +3418,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "servo_media_derive"
|
name = "servo_media_derive"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/servo/media#8f65e32617b068e8a0d152236848fd98cc08a3ae"
|
source = "git+https://github.com/servo/media#3292937b8bec7daed12b2f1b5739eb293610f5a2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"quote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"quote 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
|
|
@ -18,6 +18,7 @@ use dom::bindings::codegen::Bindings::BaseAudioContextBinding::AudioContextState
|
||||||
use dom::bindings::codegen::Bindings::BaseAudioContextBinding::BaseAudioContextMethods;
|
use dom::bindings::codegen::Bindings::BaseAudioContextBinding::BaseAudioContextMethods;
|
||||||
use dom::bindings::codegen::Bindings::BaseAudioContextBinding::DecodeErrorCallback;
|
use dom::bindings::codegen::Bindings::BaseAudioContextBinding::DecodeErrorCallback;
|
||||||
use dom::bindings::codegen::Bindings::BaseAudioContextBinding::DecodeSuccessCallback;
|
use dom::bindings::codegen::Bindings::BaseAudioContextBinding::DecodeSuccessCallback;
|
||||||
|
use dom::bindings::codegen::Bindings::BiquadFilterNodeBinding::BiquadFilterOptions;
|
||||||
use dom::bindings::codegen::Bindings::ChannelMergerNodeBinding::ChannelMergerOptions;
|
use dom::bindings::codegen::Bindings::ChannelMergerNodeBinding::ChannelMergerOptions;
|
||||||
use dom::bindings::codegen::Bindings::GainNodeBinding::GainOptions;
|
use dom::bindings::codegen::Bindings::GainNodeBinding::GainOptions;
|
||||||
use dom::bindings::codegen::Bindings::OscillatorNodeBinding::OscillatorOptions;
|
use dom::bindings::codegen::Bindings::OscillatorNodeBinding::OscillatorOptions;
|
||||||
|
@ -28,6 +29,7 @@ use dom::bindings::num::Finite;
|
||||||
use dom::bindings::refcounted::Trusted;
|
use dom::bindings::refcounted::Trusted;
|
||||||
use dom::bindings::reflector::DomObject;
|
use dom::bindings::reflector::DomObject;
|
||||||
use dom::bindings::root::{DomRoot, MutNullableDom};
|
use dom::bindings::root::{DomRoot, MutNullableDom};
|
||||||
|
use dom::biquadfilternode::BiquadFilterNode;
|
||||||
use dom::channelmergernode::ChannelMergerNode;
|
use dom::channelmergernode::ChannelMergerNode;
|
||||||
use dom::domexception::{DOMErrorName, DOMException};
|
use dom::domexception::{DOMErrorName, DOMException};
|
||||||
use dom::eventtarget::EventTarget;
|
use dom::eventtarget::EventTarget;
|
||||||
|
@ -344,6 +346,11 @@ impl BaseAudioContextMethods for BaseAudioContext {
|
||||||
AnalyserNode::new(&self.global().as_window(), &self, &AnalyserOptions::empty())
|
AnalyserNode::new(&self.global().as_window(), &self, &AnalyserOptions::empty())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-createbiquadfilter
|
||||||
|
fn CreateBiquadFilter(&self) -> Fallible<DomRoot<BiquadFilterNode>> {
|
||||||
|
BiquadFilterNode::new(&self.global().as_window(), &self, &BiquadFilterOptions::empty())
|
||||||
|
}
|
||||||
|
|
||||||
/// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-createchannelmerger
|
/// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-createchannelmerger
|
||||||
fn CreateChannelMerger(&self, count: u32) -> Fallible<DomRoot<ChannelMergerNode>> {
|
fn CreateChannelMerger(&self, count: u32) -> Fallible<DomRoot<ChannelMergerNode>> {
|
||||||
let mut opts = ChannelMergerOptions::empty();
|
let mut opts = ChannelMergerOptions::empty();
|
||||||
|
|
184
components/script/dom/biquadfilternode.rs
Normal file
184
components/script/dom/biquadfilternode.rs
Normal file
|
@ -0,0 +1,184 @@
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
use dom::audionode::AudioNode;
|
||||||
|
use dom::audioparam::AudioParam;
|
||||||
|
use dom::baseaudiocontext::BaseAudioContext;
|
||||||
|
use dom::bindings::codegen::Bindings::AudioNodeBinding::{ChannelCountMode, ChannelInterpretation};
|
||||||
|
use dom::bindings::codegen::Bindings::AudioParamBinding::AutomationRate;
|
||||||
|
use dom::bindings::codegen::Bindings::BiquadFilterNodeBinding::{self, BiquadFilterNodeMethods};
|
||||||
|
use dom::bindings::codegen::Bindings::BiquadFilterNodeBinding::BiquadFilterOptions;
|
||||||
|
use dom::bindings::codegen::Bindings::BiquadFilterNodeBinding::BiquadFilterType;
|
||||||
|
use dom::bindings::error::Fallible;
|
||||||
|
use dom::bindings::reflector::reflect_dom_object;
|
||||||
|
use dom::bindings::root::{Dom, DomRoot};
|
||||||
|
use dom::window::Window;
|
||||||
|
use dom_struct::dom_struct;
|
||||||
|
use servo_media::audio::biquad_filter_node::{BiquadFilterNodeOptions, FilterType};
|
||||||
|
use servo_media::audio::biquad_filter_node::BiquadFilterNodeMessage;
|
||||||
|
use servo_media::audio::node::{AudioNodeInit, AudioNodeMessage};
|
||||||
|
use servo_media::audio::param::ParamType;
|
||||||
|
use std::cell::Cell;
|
||||||
|
use std::f32;
|
||||||
|
|
||||||
|
#[dom_struct]
|
||||||
|
pub struct BiquadFilterNode {
|
||||||
|
node: AudioNode,
|
||||||
|
gain: Dom<AudioParam>,
|
||||||
|
frequency: Dom<AudioParam>,
|
||||||
|
q: Dom<AudioParam>,
|
||||||
|
detune: Dom<AudioParam>,
|
||||||
|
filter: Cell<BiquadFilterType>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BiquadFilterNode {
|
||||||
|
#[allow(unrooted_must_root)]
|
||||||
|
pub fn new_inherited(
|
||||||
|
window: &Window,
|
||||||
|
context: &BaseAudioContext,
|
||||||
|
options: &BiquadFilterOptions,
|
||||||
|
) -> Fallible<BiquadFilterNode> {
|
||||||
|
let node_options = options.parent
|
||||||
|
.unwrap_or(2, ChannelCountMode::Max,
|
||||||
|
ChannelInterpretation::Speakers);
|
||||||
|
let filter = Cell::new(options.type_);
|
||||||
|
let options = options.into();
|
||||||
|
let node = AudioNode::new_inherited(
|
||||||
|
AudioNodeInit::BiquadFilterNode(options),
|
||||||
|
context,
|
||||||
|
node_options,
|
||||||
|
1, // inputs
|
||||||
|
1, // outputs
|
||||||
|
)?;
|
||||||
|
let gain = AudioParam::new(
|
||||||
|
window,
|
||||||
|
context,
|
||||||
|
node.node_id(),
|
||||||
|
ParamType::Gain,
|
||||||
|
AutomationRate::A_rate,
|
||||||
|
options.gain, // default value
|
||||||
|
f32::MIN, // min value
|
||||||
|
f32::MAX, // max value
|
||||||
|
);
|
||||||
|
let q = AudioParam::new(
|
||||||
|
window,
|
||||||
|
context,
|
||||||
|
node.node_id(),
|
||||||
|
ParamType::Q,
|
||||||
|
AutomationRate::A_rate,
|
||||||
|
options.q, // default value
|
||||||
|
f32::MIN, // min value
|
||||||
|
f32::MAX, // max value
|
||||||
|
);
|
||||||
|
let frequency = AudioParam::new(
|
||||||
|
window,
|
||||||
|
context,
|
||||||
|
node.node_id(),
|
||||||
|
ParamType::Frequency,
|
||||||
|
AutomationRate::A_rate,
|
||||||
|
options.frequency, // default value
|
||||||
|
f32::MIN, // min value
|
||||||
|
f32::MAX, // max value
|
||||||
|
);
|
||||||
|
let detune = AudioParam::new(
|
||||||
|
window,
|
||||||
|
context,
|
||||||
|
node.node_id(),
|
||||||
|
ParamType::Detune,
|
||||||
|
AutomationRate::A_rate,
|
||||||
|
options.detune, // default value
|
||||||
|
f32::MIN, // min value
|
||||||
|
f32::MAX, // max value
|
||||||
|
);
|
||||||
|
Ok(BiquadFilterNode {
|
||||||
|
node,
|
||||||
|
filter,
|
||||||
|
gain: Dom::from_ref(&gain),
|
||||||
|
q: Dom::from_ref(&q),
|
||||||
|
frequency: Dom::from_ref(&frequency),
|
||||||
|
detune: Dom::from_ref(&detune),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(unrooted_must_root)]
|
||||||
|
pub fn new(
|
||||||
|
window: &Window,
|
||||||
|
context: &BaseAudioContext,
|
||||||
|
options: &BiquadFilterOptions,
|
||||||
|
) -> Fallible<DomRoot<BiquadFilterNode>> {
|
||||||
|
let node = BiquadFilterNode::new_inherited(window, context, options)?;
|
||||||
|
Ok(reflect_dom_object(Box::new(node), window, BiquadFilterNodeBinding::Wrap))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn Constructor(
|
||||||
|
window: &Window,
|
||||||
|
context: &BaseAudioContext,
|
||||||
|
options: &BiquadFilterOptions,
|
||||||
|
) -> Fallible<DomRoot<BiquadFilterNode>> {
|
||||||
|
BiquadFilterNode::new(window, context, options)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl BiquadFilterNodeMethods for BiquadFilterNode {
|
||||||
|
// https://webaudio.github.io/web-audio-api/#dom-biquadfilternode-gain
|
||||||
|
fn Gain(&self) -> DomRoot<AudioParam> {
|
||||||
|
DomRoot::from_ref(&self.gain)
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://webaudio.github.io/web-audio-api/#dom-biquadfilternode-q
|
||||||
|
fn Q(&self) -> DomRoot<AudioParam> {
|
||||||
|
DomRoot::from_ref(&self.q)
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://webaudio.github.io/web-audio-api/#dom-biquadfilternode-detune
|
||||||
|
fn Detune(&self) -> DomRoot<AudioParam> {
|
||||||
|
DomRoot::from_ref(&self.detune)
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://webaudio.github.io/web-audio-api/#dom-biquadfilternode-frequency
|
||||||
|
fn Frequency(&self) -> DomRoot<AudioParam> {
|
||||||
|
DomRoot::from_ref(&self.frequency)
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://webaudio.github.io/web-audio-api/#dom-biquadfilternode-type
|
||||||
|
fn Type(&self) -> BiquadFilterType {
|
||||||
|
self.filter.get()
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://webaudio.github.io/web-audio-api/#dom-biquadfilternode-type
|
||||||
|
fn SetType(&self, filter: BiquadFilterType) {
|
||||||
|
self.filter.set(filter);
|
||||||
|
self.node
|
||||||
|
.message(AudioNodeMessage::BiquadFilterNode(
|
||||||
|
BiquadFilterNodeMessage::SetFilterType(filter.into()),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> From<&'a BiquadFilterOptions> for BiquadFilterNodeOptions {
|
||||||
|
fn from(options: &'a BiquadFilterOptions) -> Self {
|
||||||
|
Self {
|
||||||
|
gain: *options.gain,
|
||||||
|
q: *options.Q,
|
||||||
|
frequency: *options.frequency,
|
||||||
|
detune: *options.detune,
|
||||||
|
filter: options.type_.into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<BiquadFilterType> for FilterType {
|
||||||
|
fn from(filter: BiquadFilterType) -> FilterType {
|
||||||
|
match filter {
|
||||||
|
BiquadFilterType::Lowpass => FilterType::LowPass,
|
||||||
|
BiquadFilterType::Highpass => FilterType::HighPass,
|
||||||
|
BiquadFilterType::Bandpass => FilterType::BandPass,
|
||||||
|
BiquadFilterType::Lowshelf => FilterType::LowShelf,
|
||||||
|
BiquadFilterType::Highshelf => FilterType::HighShelf,
|
||||||
|
BiquadFilterType::Peaking => FilterType::Peaking,
|
||||||
|
BiquadFilterType::Allpass => FilterType::AllPass,
|
||||||
|
BiquadFilterType::Notch => FilterType::Notch,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -48,7 +48,7 @@ impl GainNode {
|
||||||
node.node_id(),
|
node.node_id(),
|
||||||
ParamType::Gain,
|
ParamType::Gain,
|
||||||
AutomationRate::A_rate,
|
AutomationRate::A_rate,
|
||||||
1., // default value
|
*options.gain, // default value
|
||||||
f32::MIN, // min value
|
f32::MIN, // min value
|
||||||
f32::MAX, // max value
|
f32::MAX, // max value
|
||||||
);
|
);
|
||||||
|
|
|
@ -228,6 +228,7 @@ pub mod audioscheduledsourcenode;
|
||||||
pub mod baseaudiocontext;
|
pub mod baseaudiocontext;
|
||||||
pub mod beforeunloadevent;
|
pub mod beforeunloadevent;
|
||||||
pub mod bindings;
|
pub mod bindings;
|
||||||
|
pub mod biquadfilternode;
|
||||||
pub mod blob;
|
pub mod blob;
|
||||||
pub mod bluetooth;
|
pub mod bluetooth;
|
||||||
pub mod bluetoothadvertisingevent;
|
pub mod bluetoothadvertisingevent;
|
||||||
|
|
|
@ -38,7 +38,7 @@ interface BaseAudioContext : EventTarget {
|
||||||
[Throws] AnalyserNode createAnalyser();
|
[Throws] AnalyserNode createAnalyser();
|
||||||
[Throws] GainNode createGain();
|
[Throws] GainNode createGain();
|
||||||
// DelayNode createDelay(optional double maxDelayTime = 1);
|
// DelayNode createDelay(optional double maxDelayTime = 1);
|
||||||
// BiquadFilterNode createBiquadFilter();
|
[Throws] BiquadFilterNode createBiquadFilter();
|
||||||
// IIRFilterNode createIIRFilter(sequence<double> feedforward,
|
// IIRFilterNode createIIRFilter(sequence<double> feedforward,
|
||||||
// sequence<double> feedback);
|
// sequence<double> feedback);
|
||||||
// WaveShaperNode createWaveShaper();
|
// WaveShaperNode createWaveShaper();
|
||||||
|
|
39
components/script/dom/webidls/BiquadFilterNode.webidl
Normal file
39
components/script/dom/webidls/BiquadFilterNode.webidl
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
/*
|
||||||
|
* The origin of this IDL file is
|
||||||
|
* https://webaudio.github.io/web-audio-api/#biquadfilternode
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum BiquadFilterType {
|
||||||
|
"lowpass",
|
||||||
|
"highpass",
|
||||||
|
"bandpass",
|
||||||
|
"lowshelf",
|
||||||
|
"highshelf",
|
||||||
|
"peaking",
|
||||||
|
"notch",
|
||||||
|
"allpass"
|
||||||
|
};
|
||||||
|
|
||||||
|
dictionary BiquadFilterOptions : AudioNodeOptions {
|
||||||
|
BiquadFilterType type = "lowpass";
|
||||||
|
float Q = 1;
|
||||||
|
float detune = 0;
|
||||||
|
float frequency = 350;
|
||||||
|
float gain = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
[Exposed=Window,
|
||||||
|
Constructor (BaseAudioContext context, optional BiquadFilterOptions options)]
|
||||||
|
interface BiquadFilterNode : AudioNode {
|
||||||
|
attribute BiquadFilterType type;
|
||||||
|
readonly attribute AudioParam frequency;
|
||||||
|
readonly attribute AudioParam detune;
|
||||||
|
readonly attribute AudioParam Q;
|
||||||
|
readonly attribute AudioParam gain;
|
||||||
|
// the AudioParam model of https://github.com/servo/servo/issues/21659 needs to
|
||||||
|
// be implemented before we implement this
|
||||||
|
// void getFrequencyResponse (Float32Array frequencyHz, Float32Array magResponse, Float32Array phaseResponse);
|
||||||
|
};
|
|
@ -8,9 +8,6 @@
|
||||||
[BaseAudioContext interface: attribute audioWorklet]
|
[BaseAudioContext interface: attribute audioWorklet]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[BaseAudioContext interface: operation createBiquadFilter()]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BaseAudioContext interface: operation createChannelSplitter(unsigned long)]
|
[BaseAudioContext interface: operation createChannelSplitter(unsigned long)]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -89,9 +86,6 @@
|
||||||
[BaseAudioContext interface: context must inherit property "audioWorklet" with the proper type]
|
[BaseAudioContext interface: context must inherit property "audioWorklet" with the proper type]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[BaseAudioContext interface: context must inherit property "createBiquadFilter()" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BaseAudioContext interface: context must inherit property "createChannelSplitter(unsigned long)" with the proper type]
|
[BaseAudioContext interface: context must inherit property "createChannelSplitter(unsigned long)" with the proper type]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -155,9 +149,6 @@
|
||||||
[BaseAudioContext interface: new OfflineAudioContext(1, 1, sample_rate) must inherit property "audioWorklet" with the proper type]
|
[BaseAudioContext interface: new OfflineAudioContext(1, 1, sample_rate) must inherit property "audioWorklet" with the proper type]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[BaseAudioContext interface: new OfflineAudioContext(1, 1, sample_rate) must inherit property "createBiquadFilter()" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BaseAudioContext interface: new OfflineAudioContext(1, 1, sample_rate) must inherit property "createChannelSplitter(unsigned long)" with the proper type]
|
[BaseAudioContext interface: new OfflineAudioContext(1, 1, sample_rate) must inherit property "createChannelSplitter(unsigned long)" with the proper type]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -275,138 +266,15 @@
|
||||||
[AudioProcessingEvent interface: new AudioProcessingEvent('', {\n playbackTime: 0, inputBuffer: buffer, outputBuffer: buffer\n }) must inherit property "outputBuffer" with the proper type]
|
[AudioProcessingEvent interface: new AudioProcessingEvent('', {\n playbackTime: 0, inputBuffer: buffer, outputBuffer: buffer\n }) must inherit property "outputBuffer" with the proper type]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[BiquadFilterNode interface: existence and properties of interface object]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface object length]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface object name]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: existence and properties of interface prototype object]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: existence and properties of interface prototype object's "constructor" property]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: existence and properties of interface prototype object's @@unscopables property]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: attribute type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: attribute frequency]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: attribute detune]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: attribute Q]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: attribute gain]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: operation getFrequencyResponse(Float32Array, Float32Array, Float32Array)]
|
[BiquadFilterNode interface: operation getFrequencyResponse(Float32Array, Float32Array, Float32Array)]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[BiquadFilterNode must be primary interface of new BiquadFilterNode(context)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Stringification of new BiquadFilterNode(context)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: new BiquadFilterNode(context) must inherit property "type" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: new BiquadFilterNode(context) must inherit property "frequency" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: new BiquadFilterNode(context) must inherit property "detune" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: new BiquadFilterNode(context) must inherit property "Q" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: new BiquadFilterNode(context) must inherit property "gain" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BiquadFilterNode interface: new BiquadFilterNode(context) must inherit property "getFrequencyResponse(Float32Array, Float32Array, Float32Array)" with the proper type]
|
[BiquadFilterNode interface: new BiquadFilterNode(context) must inherit property "getFrequencyResponse(Float32Array, Float32Array, Float32Array)" with the proper type]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[BiquadFilterNode interface: calling getFrequencyResponse(Float32Array, Float32Array, Float32Array) on new BiquadFilterNode(context) with too few arguments must throw TypeError]
|
[BiquadFilterNode interface: calling getFrequencyResponse(Float32Array, Float32Array, Float32Array) on new BiquadFilterNode(context) with too few arguments must throw TypeError]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "connect(AudioNode, unsigned long, unsigned long)" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: calling connect(AudioNode, unsigned long, unsigned long) on new BiquadFilterNode(context) with too few arguments must throw TypeError]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "connect(AudioParam, unsigned long)" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: calling connect(AudioParam, unsigned long) on new BiquadFilterNode(context) with too few arguments must throw TypeError]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "disconnect()" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "disconnect(unsigned long)" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: calling disconnect(unsigned long) on new BiquadFilterNode(context) with too few arguments must throw TypeError]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "disconnect(AudioNode)" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: calling disconnect(AudioNode) on new BiquadFilterNode(context) with too few arguments must throw TypeError]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "disconnect(AudioNode, unsigned long)" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: calling disconnect(AudioNode, unsigned long) on new BiquadFilterNode(context) with too few arguments must throw TypeError]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "disconnect(AudioNode, unsigned long, unsigned long)" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: calling disconnect(AudioNode, unsigned long, unsigned long) on new BiquadFilterNode(context) with too few arguments must throw TypeError]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "disconnect(AudioParam)" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: calling disconnect(AudioParam) on new BiquadFilterNode(context) with too few arguments must throw TypeError]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "disconnect(AudioParam, unsigned long)" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: calling disconnect(AudioParam, unsigned long) on new BiquadFilterNode(context) with too few arguments must throw TypeError]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "context" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "numberOfInputs" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "numberOfOutputs" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "channelCount" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "channelCountMode" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[AudioNode interface: new BiquadFilterNode(context) must inherit property "channelInterpretation" with the proper type]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[ChannelSplitterNode interface: existence and properties of interface object]
|
[ChannelSplitterNode interface: existence and properties of interface object]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,10 @@
|
||||||
[biquad-allpass.html]
|
[biquad-allpass.html]
|
||||||
expected: ERROR
|
[X Max error in Allpass filter response is not less than or equal to 3.9337e-8. Got 2.805464744567871.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[< [test\] 1 out of 3 assertions were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[# AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
[biquad-automation.html]
|
[biquad-automation.html]
|
||||||
expected: ERROR
|
expected: CRASH
|
||||||
|
|
|
@ -1,2 +1,10 @@
|
||||||
[biquad-bandpass.html]
|
[biquad-bandpass.html]
|
||||||
expected: ERROR
|
[< [test\] 1 out of 3 assertions were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X Max error in Bandpass filter response is not less than or equal to 2.2501e-8. Got 1.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[# AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,19 @@
|
||||||
[biquad-basic.html]
|
[biquad-basic.html]
|
||||||
expected: ERROR
|
|
||||||
[< [existence\] 1 out of 1 assertions were failed.]
|
[< [existence\] 1 out of 1 assertions were failed.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[X context.createBiquadFilter does not exist. Got undefined.]
|
[X context.createBiquadFilter does not exist. Got undefined.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[X getFrequencyResponse(new Float32Array(10), new Float32Array(1), new Float32Array(20)) threw "TypeError" instead of InvalidAccessError.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[# AUDIT TASK RUNNER FINISHED: 1 out of 5 tasks were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X getFrequencyResponse(new Float32Array(10), new Float32Array(20), new Float32Array(1)) threw "TypeError" instead of InvalidAccessError.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[< [exceptions-getFrequencyData\] 2 out of 5 assertions were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,10 @@
|
||||||
[biquad-highpass.html]
|
[biquad-highpass.html]
|
||||||
expected: ERROR
|
[< [test\] 1 out of 3 assertions were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X Max error in Highpass filter response is not less than or equal to 1.5487e-8. Got 1.9329860210418701.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[# AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,10 @@
|
||||||
[biquad-highshelf.html]
|
[biquad-highshelf.html]
|
||||||
expected: ERROR
|
[< [test\] 1 out of 3 assertions were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X Max error in Highshelf filter response is not less than or equal to 6.2577e-8. Got 2.3278465244357536.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[# AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,10 @@
|
||||||
[biquad-lowpass.html]
|
[biquad-lowpass.html]
|
||||||
expected: ERROR
|
[< [test\] 1 out of 3 assertions were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X Max error in Lowpass filter response is not less than or equal to 9.7869e-8. Got 1.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[# AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,10 @@
|
||||||
[biquad-lowshelf.html]
|
[biquad-lowshelf.html]
|
||||||
expected: ERROR
|
[< [test\] 1 out of 3 assertions were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X Max error in Lowshelf filter response is not less than or equal to 3.8349e-8. Got 3.162277660168379.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[# AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,10 @@
|
||||||
[biquad-notch.html]
|
[biquad-notch.html]
|
||||||
expected: ERROR
|
[< [test\] 1 out of 3 assertions were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X Max error in Notch filter response is not less than or equal to 1.9669e-8. Got 2.9027323722839355.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[# AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1,10 @@
|
||||||
[biquad-peaking.html]
|
[biquad-peaking.html]
|
||||||
expected: ERROR
|
[< [test\] 1 out of 3 assertions were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[X Max error in Peaking filter response is not less than or equal to 5.8234e-8. Got 3.162277660168379.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[# AUDIT TASK RUNNER FINISHED: 1 out of 1 tasks were failed.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[biquadfilternode-basic.html]
|
|
||||||
expected: ERROR
|
|
|
@ -1,5 +1,4 @@
|
||||||
[ctor-biquadfilter.html]
|
[ctor-biquadfilter.html]
|
||||||
expected: ERROR
|
|
||||||
[X node0 = new BiquadFilterNode(context) incorrectly threw TypeError: "window[name\] is not a constructor".]
|
[X node0 = new BiquadFilterNode(context) incorrectly threw TypeError: "window[name\] is not a constructor".]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -27038,7 +27038,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"mozilla/interfaces.html": [
|
"mozilla/interfaces.html": [
|
||||||
"840c233a14c3d041e43a125a6d1452670aa4fbb4",
|
"4863f4d1036e945cfaae1f112981fac3367b2e49",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"mozilla/interfaces.js": [
|
"mozilla/interfaces.js": [
|
||||||
|
|
|
@ -23,6 +23,7 @@ test_interfaces([
|
||||||
"AudioScheduledSourceNode",
|
"AudioScheduledSourceNode",
|
||||||
"BaseAudioContext",
|
"BaseAudioContext",
|
||||||
"BeforeUnloadEvent",
|
"BeforeUnloadEvent",
|
||||||
|
"BiquadFilterNode",
|
||||||
"Blob",
|
"Blob",
|
||||||
"CanvasGradient",
|
"CanvasGradient",
|
||||||
"CanvasRenderingContext2D",
|
"CanvasRenderingContext2D",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue