aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-06-25 08:52:43 +0200
committerGustav Sörnäs <gustav@sornas.net>2021-06-26 07:55:51 +0200
commita2bfad84e4ef7bf7de90c50b6b0df39588182f82 (patch)
treec948a3c06ac230adf56b3a1e6c176b45cb106fca
parenta6c574b04802b5522cf1db12caa85e77062a71b8 (diff)
downloadmum-a2bfad84e4ef7bf7de90c50b6b0df39588182f82.tar.gz
load sound effects
-rw-r--r--mumd/src/audio.rs24
1 files changed, 19 insertions, 5 deletions
diff --git a/mumd/src/audio.rs b/mumd/src/audio.rs
index aeedf2b..af6f9d7 100644
--- a/mumd/src/audio.rs
+++ b/mumd/src/audio.rs
@@ -13,10 +13,12 @@ use crate::state::StatePhase;
use futures_util::stream::Stream;
use futures_util::StreamExt;
+use log::warn;
use mumble_protocol::voice::{VoicePacket, VoicePacketPayload};
use mumble_protocol::Serverbound;
use mumlib::config::SoundEffect;
use std::collections::{hash_map::Entry, HashMap};
+use std::convert::TryFrom;
use std::fmt::Debug;
use std::path::PathBuf;
use std::sync::{Arc, Mutex};
@@ -118,19 +120,31 @@ impl AudioOutput {
let client_streams = default.client_streams();
- let mut res = Self {
+ let num_channels = default.num_channels();
+ let mut output = Self {
device: default,
user_volumes,
client_streams,
- sound_effects: SoundEffects::new(2),
+ sound_effects: SoundEffects::new(num_channels),
sound_effect_events: HashMap::new(),
};
- res.load_sound_effects(&[]);
- Ok(res)
+ output.load_sound_effects(&[]);
+ Ok(output)
}
pub fn load_sound_effects(&mut self, sound_effects: &[SoundEffect]) {
- todo!()
+ for effect in sound_effects {
+ if let Ok(event) = NotificationEvent::try_from(effect.event.as_str()) {
+ let file = PathBuf::from(&effect.file);
+ let id = self
+ .sound_effects
+ .open(&file)
+ .unwrap_or_else(|_| SoundEffects::default_sound_effect());
+ self.sound_effect_events.insert(event, id);
+ } else {
+ warn!("Unknown sound effect '{}'", effect.event);
+ }
+ }
}
/// Decodes a voice packet.