aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/audiobuffer.rs14
-rw-r--r--components/script/dom/audiobuffersourcenode.rs25
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)