2021-08-28 06:09:17 +00:00
|
|
|
// Copyright (c) 2021 Weird Constructor <weirdconstructor@gmail.com>
|
|
|
|
// This file is a part of HexoDSP. Released under GPL-3.0-or-later.
|
|
|
|
// See README.md and COPYING for details.
|
|
|
|
|
|
|
|
mod common;
|
2022-07-23 07:54:16 +00:00
|
|
|
//use common::*;
|
2021-08-28 06:09:17 +00:00
|
|
|
|
|
|
|
use hexodsp::d_pit;
|
2022-07-17 09:58:28 +00:00
|
|
|
use hexodsp::dsp::helpers::Quantizer;
|
2021-08-28 06:09:17 +00:00
|
|
|
|
|
|
|
#[test]
|
2021-08-28 12:56:20 +00:00
|
|
|
fn check_quant_pos_neg_exact() {
|
2021-08-28 06:09:17 +00:00
|
|
|
let mut q = Quantizer::new();
|
|
|
|
q.set_keys(0x0);
|
|
|
|
|
2022-07-17 09:58:28 +00:00
|
|
|
let v = (0..=12).map(|i| d_pit!(q.process(i as f32 * (0.1 / 12.0)))).collect::<Vec<f32>>();
|
|
|
|
|
|
|
|
assert_vec_feq!(
|
|
|
|
v,
|
|
|
|
vec![
|
|
|
|
440.0, 466.1638, 493.8833, 523.2511, 554.3653, 587.3295, 622.25397, 659.2551, 698.4565,
|
|
|
|
739.98883, 783.9909, 830.6094, 880.0
|
|
|
|
]
|
|
|
|
);
|
|
|
|
|
|
|
|
let v = (0..=12).map(|i| d_pit!(q.process(i as f32 * (-0.1 / 12.0)))).collect::<Vec<f32>>();
|
|
|
|
|
|
|
|
assert_vec_feq!(
|
|
|
|
v,
|
|
|
|
vec![
|
|
|
|
440.0, 415.3047, 391.99542, 369.99442, 349.22824, 329.62756, 311.12698, 293.66476,
|
|
|
|
277.18265, 261.62555, 246.94165, 233.08186, 220.0
|
|
|
|
]
|
|
|
|
);
|
2021-08-28 06:09:17 +00:00
|
|
|
}
|
2021-08-28 12:56:20 +00:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_quant_precise_01_range() {
|
|
|
|
let mut q = Quantizer::new();
|
|
|
|
q.set_keys(0x0);
|
|
|
|
|
|
|
|
let v =
|
2022-07-17 09:58:28 +00:00
|
|
|
(0..=48).map(|i| d_pit!(q.process(i as f32 * ((0.1 * 0.25) / 12.0)))).collect::<Vec<f32>>();
|
|
|
|
|
|
|
|
assert_vec_feq!(
|
|
|
|
v,
|
|
|
|
vec![
|
|
|
|
440.0, 466.1638, 466.1638, 466.1638, 466.1638, 493.8833, 493.8833, 493.8833, 493.8833,
|
|
|
|
523.2511, 523.2511, 523.2511, 523.2511, 554.3653, 554.3653, 554.3653, 554.3653,
|
|
|
|
587.3295, 587.3295, 587.3295, 587.3295, 622.25397, 622.25397, 622.25397, 622.25397,
|
|
|
|
659.2551, 659.2551, 659.2551, 659.2551, 698.4565, 698.4565, 698.4565, 698.4565,
|
|
|
|
739.98883, 739.98883, 739.98883, 739.98883, 783.9909, 783.9909, 783.9909, 783.9909,
|
|
|
|
830.6094, 830.6094, 830.6094, 830.6094, 880.0, 880.0, 880.0, 880.0
|
|
|
|
]
|
|
|
|
);
|
2021-08-28 12:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_quant_neg_pos_range() {
|
|
|
|
let mut q = Quantizer::new();
|
|
|
|
q.set_keys(0x0);
|
|
|
|
|
2022-07-17 09:58:28 +00:00
|
|
|
let v = (0..=48)
|
|
|
|
.map(|i| {
|
2021-08-28 12:56:20 +00:00
|
|
|
let i = i - 24;
|
2022-07-17 09:58:28 +00:00
|
|
|
d_pit!(q.process(i as f32 * ((0.1 * 0.25) / 12.0)))
|
|
|
|
})
|
|
|
|
.collect::<Vec<f32>>();
|
|
|
|
|
|
|
|
assert_vec_feq!(
|
|
|
|
v,
|
|
|
|
vec![
|
|
|
|
311.12698, 311.12698, 329.62756, 329.62756, 329.62756, 329.62756, 349.22824, 349.22824,
|
|
|
|
349.22824, 349.22824, 369.99442, 369.99442, 369.99442, 369.99442, 391.99542, 391.99542,
|
|
|
|
391.99542, 391.99542, 415.3047, 415.3047, 415.3047, 415.3047, 440.0, 440.0, 440.0,
|
|
|
|
466.1638, 466.1638, 466.1638, 466.1638, 493.8833, 493.8833, 493.8833, 493.8833,
|
|
|
|
523.2511, 523.2511, 523.2511, 523.2511, 554.3653, 554.3653, 554.3653, 554.3653,
|
|
|
|
587.3295, 587.3295, 587.3295, 587.3295, 622.25397, 622.25397, 622.25397, 622.25397
|
|
|
|
]
|
|
|
|
);
|
2021-08-28 12:56:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_quant_edge_oct_offs() {
|
|
|
|
let mut q = Quantizer::new();
|
|
|
|
q.set_keys(0b1001_0000_0000);
|
|
|
|
|
|
|
|
let v =
|
2022-07-17 09:58:28 +00:00
|
|
|
(0..=24).map(|i| d_pit!(q.process(i as f32 * ((0.1 * 0.5) / 12.0)))).collect::<Vec<f32>>();
|
|
|
|
|
|
|
|
assert_vec_feq!(
|
|
|
|
v,
|
|
|
|
vec![
|
|
|
|
415.3047, 493.8833, 493.8833, 493.8833, 493.8833, 493.8833, 493.8833, 493.8833,
|
|
|
|
493.8833, 493.8833, 493.8833, 493.8833, 493.8833, 830.6094, 830.6094, 830.6094,
|
|
|
|
830.6094, 830.6094, 830.6094, 830.6094, 830.6094, 830.6094, 830.6094, 830.6094,
|
|
|
|
830.6094
|
|
|
|
]
|
|
|
|
);
|
2021-08-28 14:28:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_quant_one_key() {
|
|
|
|
let mut q = Quantizer::new();
|
|
|
|
q.set_keys(0b0010_0000_0000);
|
|
|
|
|
2022-07-17 09:58:28 +00:00
|
|
|
let v = (0..=48)
|
|
|
|
.map(|i| {
|
2021-08-28 14:28:03 +00:00
|
|
|
let i = i - 24;
|
2022-07-17 09:58:28 +00:00
|
|
|
d_pit!(q.process(i as f32 * ((0.1 * 0.5) / 12.0)))
|
|
|
|
})
|
|
|
|
.collect::<Vec<f32>>();
|
|
|
|
|
|
|
|
assert_vec_feq!(
|
|
|
|
v,
|
|
|
|
vec![
|
|
|
|
220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0, 220.0,
|
|
|
|
220.0, 440.0, 440.0, 440.0, 440.0, 440.0, 440.0, 440.0, 440.0, 440.0, 440.0, 440.0,
|
|
|
|
440.0, 440.0, 440.0, 440.0, 440.0, 440.0, 440.0, 440.0, 440.0, 440.0, 440.0, 440.0,
|
|
|
|
440.0, 880.0, 880.0, 880.0, 880.0, 880.0, 880.0, 880.0, 880.0, 880.0, 880.0, 880.0,
|
|
|
|
880.0
|
|
|
|
]
|
|
|
|
);
|
2021-08-28 12:56:20 +00:00
|
|
|
}
|