Skip to content

Commit c5996c5

Browse files
committed
app-web: unify GainNode creation via create_gain; keep behavior; reduce duplication. Also retain prior keyboard/canvas/analyser/curve helpers.
1 parent 3275b08 commit c5996c5

File tree

1 file changed

+51
-86
lines changed

1 file changed

+51
-86
lines changed

crates/app-web/src/lib.rs

Lines changed: 51 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,20 @@ fn handle_global_keydown(
199199
}
200200
}
201201

202+
// Create a GainNode with an initial value; logs on failure and returns None
203+
fn create_gain(audio_ctx: &web::AudioContext, value: f32, label: &str) -> Option<web::GainNode> {
204+
match web::GainNode::new(audio_ctx) {
205+
Ok(g) => {
206+
g.gain().set_value(value);
207+
Some(g)
208+
}
209+
Err(e) => {
210+
log::error!("{} GainNode error: {:?}", label, e);
211+
None
212+
}
213+
}
214+
}
215+
202216
// (use overlay::hide instead of local helper)
203217

204218
#[wasm_bindgen(start)]
@@ -373,24 +387,15 @@ async fn init() -> anyhow::Result<()> {
373387
}
374388

375389
// Master mix bus -> destination
376-
let master_gain = match web::GainNode::new(&audio_ctx) {
377-
Ok(g) => g,
378-
Err(e) => {
379-
log::error!("Master GainNode error: {:?}", e);
380-
return;
381-
}
390+
let master_gain = match create_gain(&audio_ctx, 0.25, "Master") {
391+
Some(g) => g,
392+
None => return,
382393
};
383-
// Start very quiet by default (user can raise with ArrowUp)
384-
master_gain.gain().set_value(0.25);
385394
// Subtle master saturation (arctan) with wet/dry mix
386-
let sat_pre = match web::GainNode::new(&audio_ctx) {
387-
Ok(g) => g,
388-
Err(e) => {
389-
log::error!("sat pre GainNode error: {:?}", e);
390-
return;
391-
}
395+
let sat_pre = match create_gain(&audio_ctx, 0.9, "sat pre") {
396+
Some(g) => g,
397+
None => return,
392398
};
393-
sat_pre.gain().set_value(0.9);
394399

395400
#[allow(deprecated)]
396401
let saturator = match web::WaveShaperNode::new(&audio_ctx) {
@@ -408,23 +413,15 @@ async fn init() -> anyhow::Result<()> {
408413
#[allow(deprecated)]
409414
saturator.set_curve(Some(curve.as_mut_slice()));
410415

411-
let sat_wet = match web::GainNode::new(&audio_ctx) {
412-
Ok(g) => g,
413-
Err(e) => {
414-
log::error!("sat wet GainNode error: {:?}", e);
415-
return;
416-
}
416+
let sat_wet = match create_gain(&audio_ctx, 0.35, "sat wet") {
417+
Some(g) => g,
418+
None => return,
417419
};
418-
sat_wet.gain().set_value(0.35);
419420

420-
let sat_dry = match web::GainNode::new(&audio_ctx) {
421-
Ok(g) => g,
422-
Err(e) => {
423-
log::error!("sat dry GainNode error: {:?}", e);
424-
return;
425-
}
421+
let sat_dry = match create_gain(&audio_ctx, 0.65, "sat dry") {
422+
Some(g) => g,
423+
None => return,
426424
};
427-
sat_dry.gain().set_value(0.65);
428425

429426
// Route master -> [dry,dst] and master -> pre -> shaper -> wet -> dst
430427
let _ = master_gain.connect_with_audio_node(&sat_pre);
@@ -436,14 +433,10 @@ async fn init() -> anyhow::Result<()> {
436433

437434
// Global lush reverb (Convolver) and tempo-synced dark delay bus
438435
// Reverb input and wet level
439-
let reverb_in = match web::GainNode::new(&audio_ctx) {
440-
Ok(g) => g,
441-
Err(e) => {
442-
log::error!("Reverb in GainNode error: {:?}", e);
443-
return;
444-
}
436+
let reverb_in = match create_gain(&audio_ctx, 1.0, "Reverb in") {
437+
Some(g) => g,
438+
None => return,
445439
};
446-
reverb_in.gain().set_value(1.0);
447440
let reverb = match web::ConvolverNode::new(&audio_ctx) {
448441
Ok(n) => n,
449442
Err(e) => {
@@ -485,27 +478,19 @@ async fn init() -> anyhow::Result<()> {
485478
reverb.set_buffer(Some(&ir));
486479
}
487480
}
488-
let reverb_wet = match web::GainNode::new(&audio_ctx) {
489-
Ok(g) => g,
490-
Err(e) => {
491-
log::error!("Reverb wet GainNode error: {:?}", e);
492-
return;
493-
}
481+
let reverb_wet = match create_gain(&audio_ctx, 0.6, "Reverb wet") {
482+
Some(g) => g,
483+
None => return,
494484
};
495-
reverb_wet.gain().set_value(0.6);
496485
let _ = reverb_in.connect_with_audio_node(&reverb);
497486
let _ = reverb.connect_with_audio_node(&reverb_wet);
498487
let _ = reverb_wet.connect_with_audio_node(&master_gain);
499488

500489
// Delay bus with feedback loop and lowpass tone for darkness
501-
let delay_in = match web::GainNode::new(&audio_ctx) {
502-
Ok(g) => g,
503-
Err(e) => {
504-
log::error!("Delay in GainNode error: {:?}", e);
505-
return;
506-
}
490+
let delay_in = match create_gain(&audio_ctx, 1.0, "Delay in") {
491+
Some(g) => g,
492+
None => return,
507493
};
508-
delay_in.gain().set_value(1.0);
509494
let delay = match audio_ctx.create_delay_with_max_delay_time(3.0) {
510495
Ok(n) => n,
511496
Err(e) => {
@@ -524,22 +509,14 @@ async fn init() -> anyhow::Result<()> {
524509
};
525510
delay_tone.set_type(web::BiquadFilterType::Lowpass);
526511
delay_tone.frequency().set_value(1400.0);
527-
let delay_feedback = match web::GainNode::new(&audio_ctx) {
528-
Ok(g) => g,
529-
Err(e) => {
530-
log::error!("Delay feedback GainNode error: {:?}", e);
531-
return;
532-
}
512+
let delay_feedback = match create_gain(&audio_ctx, 0.6, "Delay feedback") {
513+
Some(g) => g,
514+
None => return,
533515
};
534-
delay_feedback.gain().set_value(0.6);
535-
let delay_wet = match web::GainNode::new(&audio_ctx) {
536-
Ok(g) => g,
537-
Err(e) => {
538-
log::error!("Delay wet GainNode error: {:?}", e);
539-
return;
540-
}
516+
let delay_wet = match create_gain(&audio_ctx, 0.5, "Delay wet") {
517+
Some(g) => g,
518+
None => return,
541519
};
542-
delay_wet.gain().set_value(0.5);
543520
let _ = delay_in.connect_with_audio_node(&delay);
544521
let _ = delay.connect_with_audio_node(&delay_tone);
545522
let _ = delay_tone.connect_with_audio_node(&delay_feedback);
@@ -570,15 +547,11 @@ async fn init() -> anyhow::Result<()> {
570547
panner.position_y().set_value(pos.y as f32);
571548
panner.position_z().set_value(pos.z as f32);
572549

573-
let gain = match web::GainNode::new(&audio_ctx) {
574-
Ok(g) => g,
575-
Err(e) => {
576-
log::error!("GainNode error: {:?}", e);
577-
return;
578-
}
579-
};
580550
// Start muted; we will allow toggling via 'M' key
581-
gain.gain().set_value(0.0);
551+
let gain = match create_gain(&audio_ctx, 0.0, "Voice gain") {
552+
Some(g) => g,
553+
None => return,
554+
};
582555
if let Err(e) = gain.connect_with_audio_node(&panner) {
583556
log::error!("connect error: {:?}", e);
584557
return;
@@ -588,24 +561,16 @@ async fn init() -> anyhow::Result<()> {
588561
return;
589562
}
590563
// Per-voice sends
591-
let d_send = match web::GainNode::new(&audio_ctx) {
592-
Ok(g) => g,
593-
Err(e) => {
594-
log::error!("Delay send GainNode error: {:?}", e);
595-
return;
596-
}
564+
let d_send = match create_gain(&audio_ctx, 0.4, "Delay send") {
565+
Some(g) => g,
566+
None => return,
597567
};
598-
d_send.gain().set_value(0.4);
599568
let _ = d_send.connect_with_audio_node(&delay_in);
600569
delay_sends_vec.push(d_send);
601-
let r_send = match web::GainNode::new(&audio_ctx) {
602-
Ok(g) => g,
603-
Err(e) => {
604-
log::error!("Reverb send GainNode error: {:?}", e);
605-
return;
606-
}
570+
let r_send = match create_gain(&audio_ctx, 0.65, "Reverb send") {
571+
Some(g) => g,
572+
None => return,
607573
};
608-
r_send.gain().set_value(0.65);
609574
let _ = r_send.connect_with_audio_node(&reverb_in);
610575
reverb_sends_vec.push(r_send);
611576
voice_gains.push(gain);

0 commit comments

Comments
 (0)