Skip to content

Commit 81144bf

Browse files
authored
Merge pull request #442 from orottier/bugfix/audio_param_values_in_ctor
Fix: AudioParam initial values should be visible immediately
2 parents f5ae678 + ca0296e commit 81144bf

File tree

4 files changed

+58
-8
lines changed

4 files changed

+58
-8
lines changed

src/node/constant_source.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,16 @@ mod tests {
235235

236236
use float_eq::assert_float_eq;
237237

238+
use super::*;
239+
240+
#[test]
241+
fn test_audioparam_value_applies_immediately() {
242+
let context = OfflineAudioContext::new(1, 128, 48000.);
243+
let options = ConstantSourceOptions { offset: 12. };
244+
let src = ConstantSourceNode::new(&context, options);
245+
assert_float_eq!(src.offset.value(), 12., abs_all <= 0.);
246+
}
247+
238248
#[test]
239249
fn test_start_stop() {
240250
let sample_rate = 48000.;

src/node/delay.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ impl DelayNode {
236236
};
237237
let (param, proc) = context.create_audio_param(param_opts, &reader_registration);
238238

239-
param.set_value_at_time(options.delay_time as f32, 0.);
239+
param.set_value(options.delay_time as f32);
240240

241241
let reader_render = DelayReader {
242242
delay_time: proc,
@@ -660,6 +660,17 @@ mod tests {
660660

661661
use super::*;
662662

663+
#[test]
664+
fn test_audioparam_value_applies_immediately() {
665+
let context = OfflineAudioContext::new(1, 128, 48000.);
666+
let options = DelayOptions {
667+
delay_time: 0.12,
668+
..Default::default()
669+
};
670+
let src = DelayNode::new(&context, options);
671+
assert_float_eq!(src.delay_time.value(), 0.12, abs_all <= 0.);
672+
}
673+
663674
#[test]
664675
fn test_sample_accurate() {
665676
for delay_in_samples in [128., 131., 197.].iter() {

src/node/gain.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ impl GainNode {
6060
};
6161
let (param, proc) = context.create_audio_param(param_opts, &registration);
6262

63-
param.set_value_at_time(options.gain, 0.);
63+
param.set_value(options.gain);
6464

6565
let render = GainRenderer { gain: proc };
6666

@@ -141,3 +141,21 @@ impl AudioProcessor for GainRenderer {
141141
false
142142
}
143143
}
144+
145+
#[cfg(test)]
146+
mod tests {
147+
use super::*;
148+
use crate::context::OfflineAudioContext;
149+
use float_eq::assert_float_eq;
150+
151+
#[test]
152+
fn test_audioparam_value_applies_immediately() {
153+
let context = OfflineAudioContext::new(1, 128, 48000.);
154+
let options = GainOptions {
155+
gain: 0.12,
156+
..Default::default()
157+
};
158+
let src = GainNode::new(&context, options);
159+
assert_float_eq!(src.gain.value(), 0.12, abs_all <= 0.);
160+
}
161+
}

src/node/panner.rs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -429,9 +429,9 @@ impl PannerNode {
429429
let (param_px, render_px) = context.create_audio_param(PARAM_OPTS, &registration);
430430
let (param_py, render_py) = context.create_audio_param(PARAM_OPTS, &registration);
431431
let (param_pz, render_pz) = context.create_audio_param(PARAM_OPTS, &registration);
432-
param_px.set_value_at_time(position_x, 0.);
433-
param_py.set_value_at_time(position_y, 0.);
434-
param_pz.set_value_at_time(position_z, 0.);
432+
param_px.set_value(position_x);
433+
param_py.set_value(position_y);
434+
param_pz.set_value(position_z);
435435

436436
// orientation params
437437
let orientation_x_opts = AudioParamDescriptor {
@@ -442,9 +442,9 @@ impl PannerNode {
442442
context.create_audio_param(orientation_x_opts, &registration);
443443
let (param_oy, render_oy) = context.create_audio_param(PARAM_OPTS, &registration);
444444
let (param_oz, render_oz) = context.create_audio_param(PARAM_OPTS, &registration);
445-
param_ox.set_value_at_time(orientation_x, 0.);
446-
param_oy.set_value_at_time(orientation_y, 0.);
447-
param_oz.set_value_at_time(orientation_z, 0.);
445+
param_ox.set_value(orientation_x);
446+
param_oy.set_value(orientation_y);
447+
param_oz.set_value(orientation_z);
448448

449449
let render = PannerRenderer {
450450
position_x: render_px,
@@ -1059,6 +1059,17 @@ mod tests {
10591059

10601060
use super::*;
10611061

1062+
#[test]
1063+
fn test_audioparam_value_applies_immediately() {
1064+
let context = OfflineAudioContext::new(1, 128, 48000.);
1065+
let options = PannerOptions {
1066+
position_x: 12.,
1067+
..Default::default()
1068+
};
1069+
let src = PannerNode::new(&context, options);
1070+
assert_float_eq!(src.position_x.value(), 12., abs_all <= 0.);
1071+
}
1072+
10621073
#[test]
10631074
fn test_equal_power_mono_to_stereo() {
10641075
let sample_rate = 44100.;

0 commit comments

Comments
 (0)