From 7715b8f72f54d922c9e57be4f231dc82518810b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Fri, 27 Nov 2020 11:29:47 +0100 Subject: samplerate -> dasp --- mumd/Cargo.toml | 7 ++++--- mumd/src/audio.rs | 22 ++++++++++++---------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/mumd/Cargo.toml b/mumd/Cargo.toml index f497524..936353a 100644 --- a/mumd/Cargo.toml +++ b/mumd/Cargo.toml @@ -13,7 +13,7 @@ default = ["notifications", "sound-effects"] notifications = ["libnotify"] -sound-effects = ["hound", "samplerate"] +sound-effects = ["hound", "dasp_signal", "dasp_interpolate"] [dependencies] mumlib = { path = "../mumlib" } @@ -36,8 +36,9 @@ tokio-util = { version = "0.3", features = ["codec", "udp"] } libnotify = { version = "1.0", optional = true } -hound = { version = "3.4.0", optional = true } -samplerate = { version = "0.2.2", optional = true } +dasp_signal = { version = "0.11", optional = true } +dasp_interpolate = { version = "0.11", features = ["linear"], optional = true } +hound = { version = "3.4", optional = true } #compressor = "0.3" #daemonize = "0.4" diff --git a/mumd/src/audio.rs b/mumd/src/audio.rs index d86cb84..2c7eead 100644 --- a/mumd/src/audio.rs +++ b/mumd/src/audio.rs @@ -5,11 +5,14 @@ pub mod output; use crate::audio::output::SaturatingAdd; use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; use cpal::{SampleFormat, SampleRate, Stream, StreamConfig}; +#[cfg(feature = "sound-effects")] +use { + dasp_interpolate::linear::Linear, + dasp_signal::{self as signal, Signal, interpolate::Converter}, +}; use log::*; use mumble_protocol::voice::VoicePacketPayload; use opus::Channels; -#[cfg(feature = "sound-effects")] -use samplerate::ConverterType; use std::collections::hash_map::Entry; use std::collections::{HashMap, VecDeque}; use std::sync::{Arc, Mutex}; @@ -236,14 +239,13 @@ impl Audio { .map(|e| cpal::Sample::to_f32(&e.unwrap())) .collect::>(), }; - let samples = samplerate::convert( - spec.sample_rate, - SAMPLE_RATE, - spec.channels as usize, - ConverterType::SincBestQuality, - &samples, - ) - .unwrap(); + let mut signal = signal::from_iter(samples.iter().cloned()); + let interp = Linear::new(signal.next(), signal.next()); + let converter = Converter::from_hz_to_hz(signal, + interp, + spec.sample_rate.into(), + SAMPLE_RATE.into()); + let samples = converter.until_exhausted().collect::>(); (*event, samples) }) .collect(); -- cgit v1.2.1 From eda220a696e20831611871d976a2f4a4c644e797 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Fri, 27 Nov 2020 11:30:00 +0100 Subject: lock update --- Cargo.lock | 213 ++++++++++++++++++++++++++----------------------------------- 1 file changed, 89 insertions(+), 124 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 09f8efd..d268301 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,14 +1,5 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -[[package]] -name = "aho-corasick" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" -dependencies = [ - "memchr", -] - [[package]] name = "alsa" version = "0.4.2" @@ -73,29 +64,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bindgen" -version = "0.51.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd71393f1ec0509b553aa012b9b58e81dadbdff7130bd3b8cba576e69b32f75" -dependencies = [ - "bitflags", - "cexpr", - "cfg-if", - "clang-sys", - "clap", - "env_logger", - "lazy_static", - "log", - "peeking_take_while", - "proc-macro2", - "quote", - "regex", - "rustc-hash", - "shlex", - "which", -] - [[package]] name = "bindgen" version = "0.53.1" @@ -210,15 +178,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "cmake" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e56268c17a6248366d66d4a47a3381369d068cce8409bb1716ed77ea32163bb" -dependencies = [ - "cc", -] - [[package]] name = "colored" version = "2.0.0" @@ -268,7 +227,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6570ee6e089131e928d5ec9236db9e818aa3cf850f48b0eec6ef700571271d4" dependencies = [ - "bindgen 0.53.1", + "bindgen", ] [[package]] @@ -313,16 +272,94 @@ dependencies = [ ] [[package]] -name = "env_logger" -version = "0.6.2" +name = "dasp_envelope" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" +checksum = "8ec617ce7016f101a87fe85ed44180839744265fae73bb4aa43e7ece1b7668b6" dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", + "dasp_frame", + "dasp_peak", + "dasp_ring_buffer", + "dasp_rms", + "dasp_sample", +] + +[[package]] +name = "dasp_frame" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a3937f5fe2135702897535c8d4a5553f8b116f76c1529088797f2eee7c5cd6" +dependencies = [ + "dasp_sample", +] + +[[package]] +name = "dasp_interpolate" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc975a6563bb7ca7ec0a6c784ead49983a21c24835b0bc96eea11ee407c7486" +dependencies = [ + "dasp_frame", + "dasp_ring_buffer", + "dasp_sample", +] + +[[package]] +name = "dasp_peak" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cf88559d79c21f3d8523d91250c397f9a15b5fc72fbb3f87fdb0a37b79915bf" +dependencies = [ + "dasp_frame", + "dasp_sample", +] + +[[package]] +name = "dasp_ring_buffer" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07d79e19b89618a543c4adec9c5a347fe378a19041699b3278e616e387511ea1" + +[[package]] +name = "dasp_rms" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6c5dcb30b7e5014486e2822537ea2beae50b19722ffe2ed7549ab03774575aa" +dependencies = [ + "dasp_frame", + "dasp_ring_buffer", + "dasp_sample", +] + +[[package]] +name = "dasp_sample" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" + +[[package]] +name = "dasp_signal" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa1ab7d01689c6ed4eae3d38fe1cea08cba761573fbd2d592528d55b421077e7" +dependencies = [ + "dasp_envelope", + "dasp_frame", + "dasp_interpolate", + "dasp_peak", + "dasp_ring_buffer", + "dasp_rms", + "dasp_sample", + "dasp_window", +] + +[[package]] +name = "dasp_window" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66bcb90ea007ba45fc48d426e28af3e8a653634f9a7174d768dcfe90fa6211f4" +dependencies = [ + "dasp_sample", ] [[package]] @@ -575,15 +612,6 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a164bb2ceaeff4f42542bdb847c41517c78a60f5649671b2a07312b6e117549" -[[package]] -name = "humantime" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -dependencies = [ - "quick-error", -] - [[package]] name = "iovec" version = "0.1.4" @@ -686,16 +714,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "libsamplerate-sys" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66575d1d489214f8767f90de2b1e115626d8277ca09d7c39549652a9602309eb" -dependencies = [ - "bindgen 0.51.1", - "cmake", -] - [[package]] name = "lock_api" version = "0.3.4" @@ -798,6 +816,8 @@ dependencies = [ "argparse", "bytes", "cpal", + "dasp_interpolate", + "dasp_signal", "futures", "futures-util", "hound", @@ -809,7 +829,6 @@ dependencies = [ "native-tls", "openssl", "opus", - "samplerate", "serde", "tokio", "tokio-tls", @@ -1080,12 +1099,6 @@ dependencies = [ "protobuf-codegen", ] -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - [[package]] name = "quote" version = "1.0.7" @@ -1148,10 +1161,7 @@ version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8963b85b8ce3074fecffde43b4b0dded83ce2f367dc8d363afc56679f3ee820b" dependencies = [ - "aho-corasick", - "memchr", "regex-syntax", - "thread_local", ] [[package]] @@ -1184,15 +1194,6 @@ dependencies = [ "semver", ] -[[package]] -name = "samplerate" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6913e9f2ad7d0aa9528523f7e4385e160d690c66d43bb8bd7559f1be705aee8" -dependencies = [ - "libsamplerate-sys", -] - [[package]] name = "schannel" version = "0.1.19" @@ -1325,15 +1326,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "termcolor" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" -dependencies = [ - "winapi-util", -] - [[package]] name = "textwrap" version = "0.11.0" @@ -1363,15 +1355,6 @@ dependencies = [ "syn", ] -[[package]] -name = "thread_local" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" -dependencies = [ - "lazy_static", -] - [[package]] name = "time" version = "0.1.44" @@ -1565,15 +1548,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "which" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" -dependencies = [ - "libc", -] - [[package]] name = "winapi" version = "0.2.8" @@ -1602,15 +1576,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi 0.3.9", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" -- cgit v1.2.1 From 97201d40664387e3fcbfe74cda566723de314d01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Fri, 27 Nov 2020 11:34:37 +0100 Subject: update additional crate amount for sound effects --- README.org | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.org b/README.org index 81d8652..7c301bd 100644 --- a/README.org +++ b/README.org @@ -14,7 +14,6 @@ and operating systems, or they might be named something different. - `openssl` - `opus` - `libnotify` (optional) -- `libsamplerate` (optional) Windows is not currently supported but could be in the future. macOS should work. Other operating systems haven't been tested. The limiting factor on Windows @@ -41,7 +40,7 @@ The following features can be specified: | Name | Needed for | Additional crates | |--------------------+---------------+-------------------| | mumd/notifications | Notifications | 20 | -| mumd/sound-effects | Sound effects | 54 | +| mumd/sound-effects | Sound effects | 10 | Note that the "additional crates" isn't continually updated and might change. Features might also have overlapping dependencies. -- cgit v1.2.1 From 9f02a43affa775cc45a0e3ba9147a2f4a882a6ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Fri, 27 Nov 2020 12:01:06 +0100 Subject: formatting --- mumd/src/audio.rs | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/mumd/src/audio.rs b/mumd/src/audio.rs index 2c7eead..9741a2e 100644 --- a/mumd/src/audio.rs +++ b/mumd/src/audio.rs @@ -5,11 +5,6 @@ pub mod output; use crate::audio::output::SaturatingAdd; use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; use cpal::{SampleFormat, SampleRate, Stream, StreamConfig}; -#[cfg(feature = "sound-effects")] -use { - dasp_interpolate::linear::Linear, - dasp_signal::{self as signal, Signal, interpolate::Converter}, -}; use log::*; use mumble_protocol::voice::VoicePacketPayload; use opus::Channels; @@ -17,6 +12,11 @@ use std::collections::hash_map::Entry; use std::collections::{HashMap, VecDeque}; use std::sync::{Arc, Mutex}; use tokio::sync::{mpsc, watch}; +#[cfg(feature = "sound-effects")] +use { + dasp_interpolate::linear::Linear, + dasp_signal::{self as signal, Signal}, +}; //TODO? move to mumlib #[cfg(feature = "sound-effects")] @@ -241,11 +241,10 @@ impl Audio { }; let mut signal = signal::from_iter(samples.iter().cloned()); let interp = Linear::new(signal.next(), signal.next()); - let converter = Converter::from_hz_to_hz(signal, - interp, - spec.sample_rate.into(), - SAMPLE_RATE.into()); - let samples = converter.until_exhausted().collect::>(); + let samples = signal + .from_hz_to_hz(interp, spec.sample_rate.into(), SAMPLE_RATE.into()) + .until_exhausted() + .collect::>(); (*event, samples) }) .collect(); -- cgit v1.2.1 From 7314922fe32ab29757c61ed613b76fb0a0ad78b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Fri, 27 Nov 2020 21:04:51 +0100 Subject: remove sound-effects feature --- README.org | 1 - mumd/Cargo.toml | 11 ++++------- mumd/src/audio.rs | 20 +++----------------- 3 files changed, 7 insertions(+), 25 deletions(-) diff --git a/README.org b/README.org index 7c301bd..11d1108 100644 --- a/README.org +++ b/README.org @@ -40,7 +40,6 @@ The following features can be specified: | Name | Needed for | Additional crates | |--------------------+---------------+-------------------| | mumd/notifications | Notifications | 20 | -| mumd/sound-effects | Sound effects | 10 | Note that the "additional crates" isn't continually updated and might change. Features might also have overlapping dependencies. diff --git a/mumd/Cargo.toml b/mumd/Cargo.toml index 936353a..ba0f5a0 100644 --- a/mumd/Cargo.toml +++ b/mumd/Cargo.toml @@ -9,20 +9,21 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [features] -default = ["notifications", "sound-effects"] +default = ["notifications"] notifications = ["libnotify"] -sound-effects = ["hound", "dasp_signal", "dasp_interpolate"] - [dependencies] mumlib = { path = "../mumlib" } argparse = "0.2" bytes = "0.5" cpal = { git = "https://github.com/RustAudio/cpal" } +dasp_interpolate = { version = "0.11", features = ["linear"] } +dasp_signal = "0.11" futures = "0.3" futures-util = "0.3" +hound = "3.4" ipc-channel = "0.14" log = "0.4" mumble-protocol = "0.3" @@ -36,9 +37,5 @@ tokio-util = { version = "0.3", features = ["codec", "udp"] } libnotify = { version = "1.0", optional = true } -dasp_signal = { version = "0.11", optional = true } -dasp_interpolate = { version = "0.11", features = ["linear"], optional = true } -hound = { version = "3.4", optional = true } - #compressor = "0.3" #daemonize = "0.4" diff --git a/mumd/src/audio.rs b/mumd/src/audio.rs index 9741a2e..6d4d71a 100644 --- a/mumd/src/audio.rs +++ b/mumd/src/audio.rs @@ -1,10 +1,12 @@ pub mod input; pub mod output; -#[cfg(feature = "sound-effects")] use crate::audio::output::SaturatingAdd; + use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; use cpal::{SampleFormat, SampleRate, Stream, StreamConfig}; +use dasp_interpolate::linear::Linear; +use dasp_signal::{self as signal, Signal}; use log::*; use mumble_protocol::voice::VoicePacketPayload; use opus::Channels; @@ -12,14 +14,8 @@ use std::collections::hash_map::Entry; use std::collections::{HashMap, VecDeque}; use std::sync::{Arc, Mutex}; use tokio::sync::{mpsc, watch}; -#[cfg(feature = "sound-effects")] -use { - dasp_interpolate::linear::Linear, - dasp_signal::{self as signal, Signal}, -}; //TODO? move to mumlib -#[cfg(feature = "sound-effects")] pub const EVENT_SOUNDS: &[(&'static [u8], NotificationEvents)] = &[ (include_bytes!("resources/connect.wav"), NotificationEvents::ServerConnect), ( @@ -78,10 +74,7 @@ pub struct Audio { client_streams: Arc>>, - #[cfg(feature = "sound-effects")] sounds: HashMap>, - - #[cfg(feature = "sound-effects")] play_sounds: Arc>>, } @@ -223,7 +216,6 @@ impl Audio { output_stream.play().unwrap(); - #[cfg(feature = "sound-effects")] let sounds = EVENT_SOUNDS .iter() .map(|(bytes, event)| { @@ -256,11 +248,9 @@ impl Audio { input_volume_sender, input_channel_receiver: Some(input_receiver), client_streams, - #[cfg(feature = "sound-effects")] sounds, output_volume_sender, user_volumes, - #[cfg(feature = "sound-effects")] play_sounds, } } @@ -344,7 +334,6 @@ impl Audio { } } - #[cfg(feature = "sound-effects")] pub fn play_effect(&self, effect: NotificationEvents) { let samples = self.sounds.get(&effect).unwrap(); @@ -357,7 +346,4 @@ impl Audio { let l = play_sounds.len(); play_sounds.extend(samples.iter().skip(l)); } - - #[cfg(not(feature = "sound-effects"))] - pub fn play_effect(&self, _: NotificationEvents) {} } -- cgit v1.2.1 From 5b2716505d0cfcb71cb7799714970be2255e618f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Fri, 27 Nov 2020 21:06:16 +0100 Subject: clearer casting --- mumd/src/audio.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mumd/src/audio.rs b/mumd/src/audio.rs index 6d4d71a..812bb4c 100644 --- a/mumd/src/audio.rs +++ b/mumd/src/audio.rs @@ -234,7 +234,7 @@ impl Audio { let mut signal = signal::from_iter(samples.iter().cloned()); let interp = Linear::new(signal.next(), signal.next()); let samples = signal - .from_hz_to_hz(interp, spec.sample_rate.into(), SAMPLE_RATE.into()) + .from_hz_to_hz(interp, spec.sample_rate as f64, SAMPLE_RATE as f64) .until_exhausted() .collect::>(); (*event, samples) -- cgit v1.2.1