aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2018-10-27 18:56:48 +0200
committerKostya Shishkov <kostya.shishkov@gmail.com>2018-10-27 18:56:48 +0200
commit8cb5b63bf7f41d836106022735bfc1db7f8a4057 (patch)
tree52a1b43a562b2aa6cc11b265e1c83ef331a5adcd
parent6465a94691189acfc2fc2909e6e24442a1f0b700 (diff)
downloadnihav-8cb5b63bf7f41d836106022735bfc1db7f8a4057.tar.gz
dsp: make IDCT (un)scaled
-rw-r--r--src/codecs/atrac3.rs2
-rw-r--r--src/codecs/real/cook.rs2
-rw-r--r--src/dsp/mdct.rs5
3 files changed, 5 insertions, 4 deletions
diff --git a/src/codecs/atrac3.rs b/src/codecs/atrac3.rs
index 2a6b44c..c61a262 100644
--- a/src/codecs/atrac3.rs
+++ b/src/codecs/atrac3.rs
@@ -288,7 +288,7 @@ impl DSP {
}
Self {
- imdct: IMDCT::new(FFTMode::SplitRadix, 512),
+ imdct: IMDCT::new(FFTMode::SplitRadix, 512, false),
tmp: [0.0; ATRAC3_FRAME_SIZE + 64],
gain_tab, gain_tab2, window,
}
diff --git a/src/codecs/real/cook.rs b/src/codecs/real/cook.rs
index a03a5bb..2e8b45c 100644
--- a/src/codecs/real/cook.rs
+++ b/src/codecs/real/cook.rs
@@ -112,7 +112,7 @@ impl CookDSP {
gain_tab[i] = pow_tab[i + 53].powf(8.0 / fsamples);
}
let size = samples;
- CookDSP { imdct: IMDCT::new(FFTMode::SplitRadix, samples*2), window: window, out: [0.0; 2048], size, pow_tab, hpow_tab, gain_tab }
+ CookDSP { imdct: IMDCT::new(FFTMode::SplitRadix, samples*2, false), window: window, out: [0.0; 2048], size, pow_tab, hpow_tab, gain_tab }
}
}
diff --git a/src/dsp/mdct.rs b/src/dsp/mdct.rs
index b292739..540ae45 100644
--- a/src/dsp/mdct.rs
+++ b/src/dsp/mdct.rs
@@ -19,11 +19,12 @@ fn imdct(src: &[f32], dst: &mut [f32], length: usize) {
}*/
impl IMDCT {
- pub fn new(mode: FFTMode, size: usize) -> Self {
+ pub fn new(mode: FFTMode, size: usize, scaledown: bool) -> Self {
let mut twiddle: Vec<FFTComplex> = Vec::with_capacity(size / 4);
let factor = 2.0 * consts::PI / ((8 * size) as f32);
+ let scale = if scaledown { (1.0 / (size as f32)).sqrt() } else { 1.0 };
for k in 0..size/4 {
- twiddle.push(FFTComplex::exp(factor * ((8 * k + 1) as f32)));
+ twiddle.push(FFTComplex::exp(factor * ((8 * k + 1) as f32)).scale(scale));
}
let fft = FFTBuilder::new_fft(mode, size/4);
let mut z: Vec<FFTComplex> = Vec::with_capacity(size / 2);