summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2026-07-14 14:41:15 -0400
committerLLLL Colonq <llll@colonq>2026-07-14 14:41:15 -0400
commitae649d8616ccd53a848de47f49cf35747f5c9227 (patch)
tree554a571f6281092a15242efc6e235fc118fab940
parentd1746d6816bd8df6c806e52dd17ca2ec4a50dcae (diff)
Update audioHEADmaster
-rw-r--r--crates/teleia/src/audio.rs64
1 files changed, 64 insertions, 0 deletions
diff --git a/crates/teleia/src/audio.rs b/crates/teleia/src/audio.rs
index 754cb7e..143e572 100644
--- a/crates/teleia/src/audio.rs
+++ b/crates/teleia/src/audio.rs
@@ -35,6 +35,14 @@ impl AudioPlayingHandle {
self.node.stop_with_when(ctx.audio.current_time() + time as f64 + 1.0)
.expect("failed to stop audio while fading out");
}
+ pub fn mute(&self, ctx: &Context, time: f32) {
+ self.gain.gain().set_target_at_time(0.0, ctx.audio.current_time(), time as f64)
+ .expect("failed to mute audio");
+ }
+ pub fn unmute(&self, ctx: &Context, time: f32) {
+ self.gain.gain().set_target_at_time(1.0, ctx.audio.current_time(), time as f64)
+ .expect("failed to mute audio");
+ }
}
#[cfg(target_arch = "wasm32")]
@@ -133,6 +141,22 @@ impl Assets {
self.music_node = a.play(&mut self.ctx, Some((start, end)));
}
}
+
+ pub fn fade_out_music(&mut self, t: f32) {
+ if let Some(s) = &self.music_node {
+ let _ = s.fade_out(&self.ctx, t);
+ }
+ }
+ pub fn mute_music(&mut self, t: f32) {
+ if let Some(s) = &self.music_node {
+ let _ = s.mute(&self.ctx, t);
+ }
+ }
+ pub fn unmute_music(&mut self, t: f32) {
+ if let Some(s) = &self.music_node {
+ let _ = s.unmute(&self.ctx, t);
+ }
+ }
}
#[cfg(not(target_arch = "wasm32"))]
@@ -167,6 +191,18 @@ impl AudioPlayingHandle {
..Default::default()
});
}
+ pub fn mute(&self, _ctx: &Context, time: f32) {
+ self.handle.lock().unwrap().set_volume(-60.0, kira::tween::Tween {
+ duration: std::time::Duration::from_secs_f32(time + 0.5),
+ ..Default::default()
+ });
+ }
+ pub fn unmute(&self, _ctx: &Context, time: f32) {
+ self.handle.lock().unwrap().set_volume(0.0, kira::tween::Tween {
+ duration: std::time::Duration::from_secs_f32(time + 0.5),
+ ..Default::default()
+ });
+ }
}
#[cfg(not(target_arch = "wasm32"))]
@@ -263,11 +299,30 @@ impl Assets {
}
}
}
+
+ pub fn fade_out_music(&mut self, t: f32) {
+ if let Some(s) = &self.music_handle {
+ let _ = s.fade_out(&self.ctx, t);
+ }
+ }
+ pub fn mute_music(&mut self, t: f32) {
+ if let Some(s) = &self.music_handle {
+ let _ = s.mute(&self.ctx, t);
+ }
+ }
+ pub fn unmute_music(&mut self, t: f32) {
+ if let Some(s) = &self.music_handle {
+ let _ = s.unmute(&self.ctx, t);
+ }
+ }
}
pub trait AudioPlayback {
fn play_sfx(&mut self, name: &str);
fn play_music(&mut self, name: &str, start: Option<f64>, end: Option<f64>);
+ fn fade_out_music(&mut self, t: f32);
+ fn mute_music(&mut self, t: f32);
+ fn unmute_music(&mut self, t: f32);
}
impl AudioPlayback for Option<Assets> {
fn play_sfx(&mut self, name: &str) {
@@ -276,4 +331,13 @@ impl AudioPlayback for Option<Assets> {
fn play_music(&mut self, name: &str, start: Option<f64>, end: Option<f64>) {
if let Some(a) = self { a.play_music(name, start, end); }
}
+ fn fade_out_music(&mut self, t: f32) {
+ if let Some(a) = self { a.fade_out_music(t); }
+ }
+ fn mute_music(&mut self, t: f32) {
+ if let Some(a) = self { a.mute_music(t); }
+ }
+ fn unmute_music(&mut self, t: f32) {
+ if let Some(a) = self { a.unmute_music(t); }
+ }
}