AudioParam value getter

This commit is contained in:
Fernando Jiménez Moreno 2018-07-13 09:15:18 +02:00
parent f7e79d286a
commit 562e58ac49

View file

@ -14,6 +14,7 @@ use servo_media::audio::graph::NodeId;
use servo_media::audio::node::AudioNodeMessage; use servo_media::audio::node::AudioNodeMessage;
use servo_media::audio::param::{ParamRate, ParamType, RampKind, UserAutomationEvent}; use servo_media::audio::param::{ParamRate, ParamType, RampKind, UserAutomationEvent};
use std::cell::Cell; use std::cell::Cell;
use std::sync::mpsc;
#[dom_struct] #[dom_struct]
pub struct AudioParam { pub struct AudioParam {
@ -73,6 +74,10 @@ impl AudioParam {
); );
reflect_dom_object(Box::new(audio_param), window, AudioParamBinding::Wrap) reflect_dom_object(Box::new(audio_param), window, AudioParamBinding::Wrap)
} }
fn message_node(&self, message: AudioNodeMessage) {
self.context.audio_context_impl().message_node(self.node, message);
}
} }
impl AudioParamMethods for AudioParam { impl AudioParamMethods for AudioParam {
@ -84,22 +89,23 @@ impl AudioParamMethods for AudioParam {
// https://webaudio.github.io/web-audio-api/#dom-audioparam-automationrate // 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);
self.context.audio_context_impl().message_node( self.message_node(
self.node, AudioNodeMessage::SetParamRate(self.param, automation_rate.into())
AudioNodeMessage::SetParamRate(self.param, automation_rate.into()),
); );
} }
// https://webaudio.github.io/web-audio-api/#dom-audioparam-value // https://webaudio.github.io/web-audio-api/#dom-audioparam-value
fn Value(&self) -> Finite<f32> { fn Value(&self) -> Finite<f32> {
// XXX let (tx, rx) = mpsc::channel();
Finite::wrap(0.) self.message_node(
AudioNodeMessage::GetParamValue(self.param, tx)
);
Finite::wrap(rx.recv().unwrap())
} }
// https://webaudio.github.io/web-audio-api/#dom-audioparam-value // 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.message_node(
self.node,
AudioNodeMessage::SetParam(self.param, UserAutomationEvent::SetValue(*value)), AudioNodeMessage::SetParam(self.param, UserAutomationEvent::SetValue(*value)),
); );
} }
@ -121,12 +127,11 @@ impl AudioParamMethods for AudioParam {
// https://webaudio.github.io/web-audio-api/#dom-audioparam-setvalueattime // 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.message_node(
self.node,
AudioNodeMessage::SetParam( AudioNodeMessage::SetParam(
self.param, self.param,
UserAutomationEvent::SetValueAtTime(*value, *start_time), UserAutomationEvent::SetValueAtTime(*value, *start_time),
), )
); );
DomRoot::from_ref(self) DomRoot::from_ref(self)
} }
@ -137,8 +142,7 @@ impl AudioParamMethods for AudioParam {
value: Finite<f32>, value: Finite<f32>,
end_time: Finite<f64>, end_time: Finite<f64>,
) -> DomRoot<AudioParam> { ) -> DomRoot<AudioParam> {
self.context.audio_context_impl().message_node( self.message_node(
self.node,
AudioNodeMessage::SetParam( AudioNodeMessage::SetParam(
self.param, self.param,
UserAutomationEvent::RampToValueAtTime(RampKind::Linear, *value, *end_time), UserAutomationEvent::RampToValueAtTime(RampKind::Linear, *value, *end_time),
@ -153,8 +157,7 @@ impl AudioParamMethods for AudioParam {
value: Finite<f32>, value: Finite<f32>,
end_time: Finite<f64>, end_time: Finite<f64>,
) -> DomRoot<AudioParam> { ) -> DomRoot<AudioParam> {
self.context.audio_context_impl().message_node( self.message_node(
self.node,
AudioNodeMessage::SetParam( AudioNodeMessage::SetParam(
self.param, self.param,
UserAutomationEvent::RampToValueAtTime(RampKind::Exponential, *value, *end_time), UserAutomationEvent::RampToValueAtTime(RampKind::Exponential, *value, *end_time),
@ -170,8 +173,7 @@ impl AudioParamMethods for AudioParam {
start_time: Finite<f64>, start_time: Finite<f64>,
time_constant: Finite<f32>, time_constant: Finite<f32>,
) -> DomRoot<AudioParam> { ) -> DomRoot<AudioParam> {
self.context.audio_context_impl().message_node( self.message_node(
self.node,
AudioNodeMessage::SetParam( AudioNodeMessage::SetParam(
self.param, self.param,
UserAutomationEvent::SetTargetAtTime(*target, *start_time, (*time_constant).into()), UserAutomationEvent::SetTargetAtTime(*target, *start_time, (*time_constant).into()),
@ -182,8 +184,7 @@ impl AudioParamMethods for AudioParam {
// https://webaudio.github.io/web-audio-api/#dom-audioparam-cancelscheduledvalues // 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.message_node(
self.node,
AudioNodeMessage::SetParam( AudioNodeMessage::SetParam(
self.param, self.param,
UserAutomationEvent::CancelScheduledValues(*cancel_time), UserAutomationEvent::CancelScheduledValues(*cancel_time),
@ -194,8 +195,7 @@ impl AudioParamMethods for AudioParam {
// https://webaudio.github.io/web-audio-api/#dom-audioparam-cancelandholdattime // 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.message_node(
self.node,
AudioNodeMessage::SetParam( AudioNodeMessage::SetParam(
self.param, self.param,
UserAutomationEvent::CancelAndHoldAtTime(*cancel_time), UserAutomationEvent::CancelAndHoldAtTime(*cancel_time),