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(-) (limited to 'mumd') 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