diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/audiobuffer.rs | 14 | ||||
-rw-r--r-- | components/script/dom/audiobuffersourcenode.rs | 25 |
2 files changed, 34 insertions, 5 deletions
diff --git a/components/script/dom/audiobuffer.rs b/components/script/dom/audiobuffer.rs index b0772d8b2af..f8a3f27093e 100644 --- a/components/script/dom/audiobuffer.rs +++ b/components/script/dom/audiobuffer.rs @@ -115,8 +115,11 @@ impl AudioBuffer { // Initialize the underlying channels data with initial data provided by // the user or silence otherwise. fn set_initial_data(&self, initial_data: Option<&[Vec<f32>]>) { - let mut channels = - ServoMediaAudioBuffer::new(self.number_of_channels as u8, self.length as usize); + let mut channels = ServoMediaAudioBuffer::new( + self.number_of_channels as u8, + self.length as usize, + self.sample_rate, + ); for channel in 0..self.number_of_channels { channels.buffers[channel as usize] = match initial_data { Some(data) => data[channel as usize].clone(), @@ -164,8 +167,11 @@ impl AudioBuffer { // https://webaudio.github.io/web-audio-api/#acquire-the-content #[allow(unsafe_code)] fn acquire_contents(&self) -> Option<ServoMediaAudioBuffer> { - let mut result = - ServoMediaAudioBuffer::new(self.number_of_channels as u8, self.length as usize); + let mut result = ServoMediaAudioBuffer::new( + self.number_of_channels as u8, + self.length as usize, + self.sample_rate, + ); let cx = self.global().get_cx(); for (i, channel) in self.js_channels.borrow_mut().iter().enumerate() { // Step 1. diff --git a/components/script/dom/audiobuffersourcenode.rs b/components/script/dom/audiobuffersourcenode.rs index 9de2a6a14a8..7810199750c 100644 --- a/components/script/dom/audiobuffersourcenode.rs +++ b/components/script/dom/audiobuffersourcenode.rs @@ -171,6 +171,10 @@ impl AudioBufferSourceNodeMethods for AudioBufferSourceNode { // https://webaudio.github.io/web-audio-api/#dom-audiobuffersourcenode-loop fn SetLoop(&self, should_loop: bool) { self.loop_enabled.set(should_loop); + let msg = AudioNodeMessage::AudioBufferSourceNode( + AudioBufferSourceNodeMessage::SetLoopEnabled(should_loop), + ); + self.source_node.node().message(msg); } // https://webaudio.github.io/web-audio-api/#dom-audiobuffersourcenode-loopstart @@ -181,6 +185,10 @@ impl AudioBufferSourceNodeMethods for AudioBufferSourceNode { // https://webaudio.github.io/web-audio-api/#dom-audiobuffersourcenode-loopstart fn SetLoopStart(&self, loop_start: Finite<f64>) { self.loop_start.set(*loop_start); + let msg = AudioNodeMessage::AudioBufferSourceNode( + AudioBufferSourceNodeMessage::SetLoopStart(*loop_start), + ); + self.source_node.node().message(msg); } // https://webaudio.github.io/web-audio-api/#dom-audiobuffersourcenode-loopend @@ -190,7 +198,11 @@ impl AudioBufferSourceNodeMethods for AudioBufferSourceNode { // https://webaudio.github.io/web-audio-api/#dom-audiobuffersourcenode-loopend fn SetLoopEnd(&self, loop_end: Finite<f64>) { - self.loop_end.set(*loop_end) + self.loop_end.set(*loop_end); + let msg = AudioNodeMessage::AudioBufferSourceNode( + AudioBufferSourceNodeMessage::SetLoopEnd(*loop_end), + ); + self.source_node.node().message(msg); } // https://webaudio.github.io/web-audio-api/#dom-audiobuffersourcenode-start @@ -224,6 +236,17 @@ impl AudioBufferSourceNodeMethods for AudioBufferSourceNode { )); } } + + self.source_node + .node() + .message(AudioNodeMessage::AudioBufferSourceNode( + AudioBufferSourceNodeMessage::SetStartParams( + *when, + offset.map(|f| *f), + duration.map(|f| *f), + ), + )); + self.source_node .upcast::<AudioScheduledSourceNode>() .Start(when) |