From 1de511d808f581803f5f2ab3452ed03aad034fab Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 14 Nov 2020 12:48:38 +0100 Subject: [PATCH] sample => dasp --- Cargo.lock | 127 +++++++++++++++++++++++++++++++-- oxide-7/Cargo.toml | 5 +- oxide-7/src/audio/dsp/mod.rs | 8 +-- oxide-7/src/audio/mod.rs | 2 +- oxide-7/src/audio/resampler.rs | 11 +-- 5 files changed, 136 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 116f813..27ccc48 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -409,6 +409,125 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "dasp" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7381b67da416b639690ac77c73b86a7b5e64a29e31d1f75fb3b1102301ef355a" +dependencies = [ + "dasp_envelope", + "dasp_frame", + "dasp_interpolate", + "dasp_peak", + "dasp_ring_buffer", + "dasp_rms", + "dasp_sample", + "dasp_signal", + "dasp_slice", + "dasp_window", +] + +[[package]] +name = "dasp_envelope" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ec617ce7016f101a87fe85ed44180839744265fae73bb4aa43e7ece1b7668b6" +dependencies = [ + "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_slice" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e1c7335d58e7baedafa516cb361360ff38d6f4d3f9d9d5ee2a2fc8e27178fa1" +dependencies = [ + "dasp_frame", + "dasp_sample", +] + +[[package]] +name = "dasp_window" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66bcb90ea007ba45fc48d426e28af3e8a653634f9a7174d768dcfe90fa6211f4" +dependencies = [ + "dasp_sample", +] + [[package]] name = "derivative" version = "2.1.1" @@ -1124,8 +1243,8 @@ version = "0.3.0" dependencies = [ "bitflags", "crossbeam-channel", + "dasp", "fixed", - "sample", ] [[package]] @@ -1395,12 +1514,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "sample" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc0966ad788ec7289562643e05c611b7853e0618b7f9306aafd2fc727abfe168" - [[package]] name = "scopeguard" version = "1.1.0" diff --git a/oxide-7/Cargo.toml b/oxide-7/Cargo.toml index 36a8a43..b03b511 100644 --- a/oxide-7/Cargo.toml +++ b/oxide-7/Cargo.toml @@ -14,7 +14,10 @@ path = "src/lib.rs" bitflags = "1.1.0" crossbeam-channel = "0.4.2" fixed = "0.5.4" -sample = "0.10" + +[dependencies.dasp] +version = "0.11" +features = ["interpolate", "interpolate-sinc", "ring_buffer", "signal"] [features] debug = [] \ No newline at end of file diff --git a/oxide-7/src/audio/dsp/mod.rs b/oxide-7/src/audio/dsp/mod.rs index c0c0856..d903b8c 100644 --- a/oxide-7/src/audio/dsp/mod.rs +++ b/oxide-7/src/audio/dsp/mod.rs @@ -13,7 +13,7 @@ mod voice; use bitflags::bitflags; use crossbeam_channel::Sender; -use sample::frame::{ +use dasp::frame::{ Frame, Stereo }; @@ -99,7 +99,7 @@ impl DSP { echo_buffer_size: 0, - fir_buffer: [Stereo::equilibrium(); 8], + fir_buffer: [Stereo::EQUILIBRIUM; 8], fir_buffer_index: 0, noise_level: -0x4000, @@ -227,7 +227,7 @@ impl DSP { let echo = self.generate_echo(ram, echo_left as i16, echo_right as i16); let frame = if self.is_mute() { - Stereo::equilibrium() + Stereo::EQUILIBRIUM } else { let mut left = clamp!((main_left * (self.regs.main_vol_left as i32)) >> 7, MIN, MAX); let mut right = clamp!((main_right * (self.regs.main_vol_right as i32)) >> 7, MIN, MAX); @@ -276,7 +276,7 @@ impl DSP { fn calculate_fir(&mut self, new_sample: Stereo) -> Stereo { self.fir_buffer[self.fir_buffer_index] = new_sample; - let out = (0..8).fold(Stereo::equilibrium(), |acc: Stereo, i| { + let out = (0..8).fold(Stereo::EQUILIBRIUM, |acc: Stereo, i| { let index = self.fir_buffer_index.wrapping_sub(7 - i) & 7; let buffer_sample = self.fir_buffer[index]; let fir_coef = self.regs.echo_fir_coefs[i] as i32; diff --git a/oxide-7/src/audio/mod.rs b/oxide-7/src/audio/mod.rs index 7fdeae9..7454e98 100644 --- a/oxide-7/src/audio/mod.rs +++ b/oxide-7/src/audio/mod.rs @@ -11,7 +11,7 @@ use crossbeam_channel::{ Receiver }; -use sample::frame::Stereo; +use dasp::frame::Stereo; use crate::constants::timing; diff --git a/oxide-7/src/audio/resampler.rs b/oxide-7/src/audio/resampler.rs index a5cea8c..07ba6f6 100644 --- a/oxide-7/src/audio/resampler.rs +++ b/oxide-7/src/audio/resampler.rs @@ -1,10 +1,13 @@ // Module that resamples from 32_000 to the output sample rate. use crossbeam_channel::Receiver; -use sample::{ +use dasp::{ frame::{Frame, Stereo}, - interpolate::{Converter, Sinc}, + interpolate::sinc::Sinc, ring_buffer::Fixed, - signal::Signal + signal::{ + interpolate::Converter, + Signal, + } }; pub struct Resampler { @@ -13,7 +16,7 @@ pub struct Resampler { impl Resampler { pub fn new(receiver: Receiver, target_sample_rate: f64) -> Self { - let sinc = Sinc::new(Fixed::from([Stereo::equilibrium(); 2])); + let sinc = Sinc::new(Fixed::from([Stereo::EQUILIBRIUM; 2])); Resampler { converter: Source::new(receiver).from_hz_to_hz(sinc, 32_000.0, target_sample_rate) }