diff --git a/components/script/dom/audiobuffer.rs b/components/script/dom/audiobuffer.rs index a7b7467f14c..dd396f3aab9 100644 --- a/components/script/dom/audiobuffer.rs +++ b/components/script/dom/audiobuffer.rs @@ -20,10 +20,10 @@ use servo_media::audio::buffer_source_node::AudioBuffer as ServoMediaAudioBuffer use std::cmp::min; use std::ptr::{self, NonNull}; -// This range is defined by the spec. +// Spec mandates at least [8000, 96000], we use [8000, 192000] to match Firefox // https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-createbuffer pub const MIN_SAMPLE_RATE: f32 = 8000.; -pub const MAX_SAMPLE_RATE: f32 = 96000.; +pub const MAX_SAMPLE_RATE: f32 = 192000.; type JSAudioChannel = Heap<*mut JSObject>; diff --git a/components/script/dom/offlineaudiocontext.rs b/components/script/dom/offlineaudiocontext.rs index 32aaa926ec9..7e967d0078a 100644 --- a/components/script/dom/offlineaudiocontext.rs +++ b/components/script/dom/offlineaudiocontext.rs @@ -151,10 +151,14 @@ impl OfflineAudioContextMethods for OfflineAudioContext { task!(resolve: move || { let this = this.root(); let processed_audio = processed_audio.lock().unwrap(); - let processed_audio: Vec<_> = processed_audio + let mut processed_audio: Vec<_> = processed_audio .chunks(this.length as usize) .map(|channel| channel.to_vec()) .collect(); + // it can end up being empty if the task failed + if processed_audio.len() != this.length as usize { + processed_audio.resize(this.length as usize, Vec::new()) + } let buffer = AudioBuffer::new( &this.global().as_window(), this.channel_count, diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail.html.ini deleted file mode 100644 index 98840c3cb20..00000000000 --- a/tests/wpt/metadata/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-tail.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[biquad-tail.html] - expected: ERROR