AudioParam automation rate setter

This commit is contained in:
Fernando Jiménez Moreno 2018-07-11 15:21:09 +02:00
parent 758ae94aa1
commit 3dde730f9b
2 changed files with 29 additions and 3 deletions

View file

@ -236,7 +236,7 @@ impl AudioNodeMethods for AudioNode {
fn SetChannelInterpretation(&self, value: ChannelInterpretation) { fn SetChannelInterpretation(&self, value: ChannelInterpretation) {
// Channel interpretation mode has no effect for nodes with no inputs. // Channel interpretation mode has no effect for nodes with no inputs.
if self.number_of_inputs == 0 { if self.number_of_inputs == 0 {
return Ok(()); return;
} }
self.channel_interpretation.set(value); self.channel_interpretation.set(value);

View file

@ -12,7 +12,7 @@ use dom::window::Window;
use dom_struct::dom_struct; use dom_struct::dom_struct;
use servo_media::audio::graph::NodeId; use servo_media::audio::graph::NodeId;
use servo_media::audio::node::AudioNodeMessage; use servo_media::audio::node::AudioNodeMessage;
use servo_media::audio::param::{ParamType, RampKind, UserAutomationEvent}; use servo_media::audio::param::{ParamRate, ParamType, RampKind, UserAutomationEvent};
use std::cell::Cell; use std::cell::Cell;
#[dom_struct] #[dom_struct]
@ -76,20 +76,27 @@ impl AudioParam {
} }
impl AudioParamMethods for AudioParam { impl AudioParamMethods for AudioParam {
// https://webaudio.github.io/web-audio-api/#dom-audioparam-automationrate
fn AutomationRate(&self) -> AutomationRate { fn AutomationRate(&self) -> AutomationRate {
self.automation_rate.get() self.automation_rate.get()
} }
// https://webaudio.github.io/web-audio-api/#dom-audioparam-automationrate
fn SetAutomationRate(&self, automation_rate: AutomationRate) { fn SetAutomationRate(&self, automation_rate: AutomationRate) {
self.automation_rate.set(automation_rate); self.automation_rate.set(automation_rate);
// XXX set servo-media param automation rate self.context.audio_context_impl().message_node(
self.node,
AudioNodeMessage::SetParamRate(self.param, automation_rate.into()),
);
} }
// https://webaudio.github.io/web-audio-api/#dom-audioparam-value
fn Value(&self) -> Finite<f32> { fn Value(&self) -> Finite<f32> {
// XXX // XXX
Finite::wrap(0.) Finite::wrap(0.)
} }
// https://webaudio.github.io/web-audio-api/#dom-audioparam-value
fn SetValue(&self, value: Finite<f32>) { fn SetValue(&self, value: Finite<f32>) {
self.context.audio_context_impl().message_node( self.context.audio_context_impl().message_node(
self.node, self.node,
@ -97,18 +104,22 @@ impl AudioParamMethods for AudioParam {
); );
} }
// https://webaudio.github.io/web-audio-api/#dom-audioparam-defaultvalue
fn DefaultValue(&self) -> Finite<f32> { fn DefaultValue(&self) -> Finite<f32> {
Finite::wrap(self.default_value) Finite::wrap(self.default_value)
} }
// https://webaudio.github.io/web-audio-api/#dom-audioparam-minvalue
fn MinValue(&self) -> Finite<f32> { fn MinValue(&self) -> Finite<f32> {
Finite::wrap(self.min_value) Finite::wrap(self.min_value)
} }
// https://webaudio.github.io/web-audio-api/#dom-audioparam-maxvalue
fn MaxValue(&self) -> Finite<f32> { fn MaxValue(&self) -> Finite<f32> {
Finite::wrap(self.max_value) Finite::wrap(self.max_value)
} }
// https://webaudio.github.io/web-audio-api/#dom-audioparam-setvalueattime
fn SetValueAtTime(&self, value: Finite<f32>, start_time: Finite<f64>) -> DomRoot<AudioParam> { fn SetValueAtTime(&self, value: Finite<f32>, start_time: Finite<f64>) -> DomRoot<AudioParam> {
self.context.audio_context_impl().message_node( self.context.audio_context_impl().message_node(
self.node, self.node,
@ -120,6 +131,7 @@ impl AudioParamMethods for AudioParam {
DomRoot::from_ref(self) DomRoot::from_ref(self)
} }
// https://webaudio.github.io/web-audio-api/#dom-audioparam-linearramptovalueattime
fn LinearRampToValueAtTime( fn LinearRampToValueAtTime(
&self, &self,
value: Finite<f32>, value: Finite<f32>,
@ -135,6 +147,7 @@ impl AudioParamMethods for AudioParam {
DomRoot::from_ref(self) DomRoot::from_ref(self)
} }
// https://webaudio.github.io/web-audio-api/#dom-audioparam-exponentialramptovalueattime
fn ExponentialRampToValueAtTime( fn ExponentialRampToValueAtTime(
&self, &self,
value: Finite<f32>, value: Finite<f32>,
@ -150,6 +163,7 @@ impl AudioParamMethods for AudioParam {
DomRoot::from_ref(self) DomRoot::from_ref(self)
} }
// https://webaudio.github.io/web-audio-api/#dom-audioparam-settargetattime
fn SetTargetAtTime( fn SetTargetAtTime(
&self, &self,
target: Finite<f32>, target: Finite<f32>,
@ -166,6 +180,7 @@ impl AudioParamMethods for AudioParam {
DomRoot::from_ref(self) DomRoot::from_ref(self)
} }
// https://webaudio.github.io/web-audio-api/#dom-audioparam-cancelscheduledvalues
fn CancelScheduledValues(&self, cancel_time: Finite<f64>) -> DomRoot<AudioParam> { fn CancelScheduledValues(&self, cancel_time: Finite<f64>) -> DomRoot<AudioParam> {
self.context.audio_context_impl().message_node( self.context.audio_context_impl().message_node(
self.node, self.node,
@ -177,6 +192,7 @@ impl AudioParamMethods for AudioParam {
DomRoot::from_ref(self) DomRoot::from_ref(self)
} }
// https://webaudio.github.io/web-audio-api/#dom-audioparam-cancelandholdattime
fn CancelAndHoldAtTime(&self, cancel_time: Finite<f64>) -> DomRoot<AudioParam> { fn CancelAndHoldAtTime(&self, cancel_time: Finite<f64>) -> DomRoot<AudioParam> {
self.context.audio_context_impl().message_node( self.context.audio_context_impl().message_node(
self.node, self.node,
@ -188,3 +204,13 @@ impl AudioParamMethods for AudioParam {
DomRoot::from_ref(self) DomRoot::from_ref(self)
} }
} }
// https://webaudio.github.io/web-audio-api/#enumdef-automationrate
impl From<AutomationRate> for ParamRate {
fn from(rate: AutomationRate) -> Self {
match rate {
AutomationRate::A_rate => ParamRate::ARate,
AutomationRate::K_rate => ParamRate::KRate,
}
}
}