2021-08-16 01:53:59 +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;
|
|
|
|
use common::*;
|
|
|
|
|
|
|
|
fn setup_vosc(matrix: &mut Matrix) {
|
2022-07-17 09:58:28 +00:00
|
|
|
let vosc_1 = NodeId::VOsc(0);
|
|
|
|
let amp_1 = NodeId::Amp(0);
|
|
|
|
let out_1 = NodeId::Out(0);
|
|
|
|
matrix.place(
|
|
|
|
0,
|
|
|
|
1,
|
|
|
|
Cell::empty(vosc_1).input(vosc_1.inp("damt"), None, None).out(
|
|
|
|
vosc_1.out("sig"),
|
|
|
|
None,
|
|
|
|
None,
|
|
|
|
),
|
|
|
|
);
|
|
|
|
matrix.place(
|
|
|
|
1,
|
|
|
|
0,
|
|
|
|
Cell::empty(amp_1).input(None, None, amp_1.inp("inp")).out(amp_1.out("sig"), None, None),
|
|
|
|
);
|
|
|
|
matrix.place(
|
|
|
|
2,
|
|
|
|
0,
|
|
|
|
Cell::empty(out_1).input(None, None, out_1.inp("ch1")).out(None, None, None),
|
|
|
|
);
|
2021-08-16 01:53:59 +00:00
|
|
|
|
|
|
|
pset_n(matrix, vosc_1, "d", 0.500);
|
|
|
|
pset_n(matrix, vosc_1, "v", 0.500);
|
|
|
|
pset_n(matrix, vosc_1, "damt", 0.000);
|
|
|
|
pset_n(matrix, vosc_1, "det", 0.000);
|
|
|
|
pset_n(matrix, vosc_1, "freq", 0.000);
|
|
|
|
pset_n(matrix, vosc_1, "vs", 0.000);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_vosc_sine() {
|
|
|
|
init_test!(matrix, node_exec, 3);
|
|
|
|
|
|
|
|
setup_vosc(matrix);
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
let fft = run_and_get_fft4096_2(node_exec, 500);
|
|
|
|
dump_table!(fft);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_eq!(fft, vec![(431, 614), (441, 1012)]);
|
2021-08-16 01:53:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_vosc_d_v() {
|
|
|
|
init_test!(matrix, node_exec, 3);
|
|
|
|
let vosc_1 = NodeId::VOsc(0);
|
|
|
|
|
|
|
|
setup_vosc(matrix);
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
// d=0.25, v=0.5
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "d", 0.25);
|
|
|
|
let fft = run_and_get_fft4096_2(node_exec, 50);
|
|
|
|
//d// dump_table!(fft);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_eq!(
|
|
|
|
fft,
|
|
|
|
vec![
|
|
|
|
(431, 589),
|
|
|
|
(441, 972),
|
|
|
|
(452, 395),
|
|
|
|
(872, 178),
|
|
|
|
(883, 244),
|
|
|
|
(894, 79),
|
|
|
|
(1314, 90),
|
|
|
|
(1324, 103)
|
|
|
|
]
|
|
|
|
);
|
2021-08-16 01:53:59 +00:00
|
|
|
|
|
|
|
// d=0.0, v=0.5
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "d", 0.0);
|
|
|
|
let fft = run_and_get_fft4096_2(node_exec, 100);
|
|
|
|
//d// dump_table!(fft);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_eq!(
|
|
|
|
fft,
|
|
|
|
vec![
|
|
|
|
(431, 521),
|
|
|
|
(441, 859),
|
|
|
|
(452, 349),
|
|
|
|
(872, 242),
|
|
|
|
(883, 332),
|
|
|
|
(894, 107),
|
|
|
|
(1314, 176),
|
|
|
|
(1324, 201),
|
|
|
|
(1755, 143),
|
|
|
|
(1766, 137),
|
|
|
|
(2196, 122),
|
|
|
|
(2638, 106)
|
|
|
|
]
|
|
|
|
);
|
2021-08-16 01:53:59 +00:00
|
|
|
|
|
|
|
// d=1.0, v=0.5 (symmetric to above)
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "d", 0.0);
|
|
|
|
let fft = run_and_get_fft4096_2(node_exec, 100);
|
|
|
|
//d// dump_table!(fft);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_eq!(
|
|
|
|
fft,
|
|
|
|
vec![
|
|
|
|
(431, 521),
|
|
|
|
(441, 859),
|
|
|
|
(452, 349),
|
|
|
|
(872, 242),
|
|
|
|
(883, 332),
|
|
|
|
(894, 107),
|
|
|
|
(1314, 175),
|
|
|
|
(1324, 201),
|
|
|
|
(1755, 143),
|
|
|
|
(1766, 137),
|
|
|
|
(2196, 122),
|
|
|
|
(2638, 106)
|
|
|
|
]
|
|
|
|
);
|
2021-08-16 01:53:59 +00:00
|
|
|
|
|
|
|
// d=0.5, v=0.25
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "d", 0.5);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "v", 0.25);
|
|
|
|
let fft = run_and_get_fft4096_2(node_exec, 100);
|
|
|
|
dump_table!(fft);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_eq!(
|
|
|
|
fft,
|
|
|
|
vec![(0, 434), (11, 217), (431, 554), (441, 913), (452, 371), (872, 215), (883, 294)]
|
|
|
|
);
|
2021-08-16 01:53:59 +00:00
|
|
|
|
|
|
|
// d=0.25, v=0.25
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "d", 0.25);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "v", 0.25);
|
|
|
|
let fft = run_and_get_fft4096_2(node_exec, 50);
|
|
|
|
dump_table!(fft);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_eq!(fft, vec![(431, 614), (441, 1012), (452, 411)]);
|
2021-08-16 01:53:59 +00:00
|
|
|
|
|
|
|
// d=0.1, v=0.25
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "d", 0.1);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "v", 0.25);
|
|
|
|
let fft = run_and_get_fft4096_2(node_exec, 50);
|
|
|
|
dump_table!(fft);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_eq!(
|
|
|
|
fft,
|
|
|
|
vec![
|
|
|
|
(0, 260),
|
|
|
|
(11, 130),
|
|
|
|
(431, 593),
|
|
|
|
(441, 977),
|
|
|
|
(452, 397),
|
|
|
|
(872, 105),
|
|
|
|
(883, 144),
|
|
|
|
(1314, 64),
|
|
|
|
(1324, 74)
|
|
|
|
]
|
|
|
|
);
|
2021-08-16 01:53:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_vosc_ovrsmpl() {
|
|
|
|
init_test!(matrix, node_exec, 3);
|
|
|
|
let vosc_1 = NodeId::VOsc(0);
|
|
|
|
|
|
|
|
setup_vosc(matrix);
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
// d=0.0, v=0.5, with oversampling
|
|
|
|
pset_s(matrix, vosc_1, "ovrsmpl", 1);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "d", 0.0);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "v", 0.5);
|
|
|
|
let fft = run_and_get_fft4096_2(node_exec, 25);
|
|
|
|
dump_table!(fft);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_eq!(
|
|
|
|
fft,
|
|
|
|
vec![
|
|
|
|
(431, 521),
|
|
|
|
(441, 859),
|
|
|
|
(452, 349),
|
|
|
|
(872, 242),
|
|
|
|
(883, 332),
|
|
|
|
(894, 107),
|
|
|
|
(1303, 27),
|
|
|
|
(1314, 175),
|
|
|
|
(1324, 201),
|
|
|
|
(1335, 50),
|
|
|
|
(1744, 30),
|
|
|
|
(1755, 143),
|
|
|
|
(1766, 137),
|
|
|
|
(1776, 25),
|
|
|
|
(2186, 34),
|
|
|
|
(2196, 122),
|
|
|
|
(2207, 98),
|
|
|
|
(2627, 38),
|
|
|
|
(2638, 106),
|
|
|
|
(2649, 71),
|
|
|
|
(3068, 41),
|
|
|
|
(3079, 93),
|
|
|
|
(3090, 51),
|
|
|
|
(3510, 44),
|
|
|
|
(3521, 81),
|
|
|
|
(3531, 37),
|
|
|
|
(3951, 46),
|
|
|
|
(3962, 70),
|
|
|
|
(3973, 25),
|
|
|
|
(4393, 48),
|
|
|
|
(4404, 60),
|
|
|
|
(4834, 49),
|
|
|
|
(4845, 51),
|
|
|
|
(5276, 48),
|
|
|
|
(5286, 43),
|
|
|
|
(5717, 47),
|
|
|
|
(5728, 35),
|
|
|
|
(6158, 46),
|
|
|
|
(6169, 28),
|
|
|
|
(6600, 43),
|
|
|
|
(7041, 40),
|
|
|
|
(7472, 26),
|
|
|
|
(7483, 36),
|
|
|
|
(7913, 28),
|
|
|
|
(7924, 32),
|
|
|
|
(8355, 29),
|
|
|
|
(8366, 28),
|
|
|
|
(8796, 30),
|
|
|
|
(9238, 30),
|
|
|
|
(9679, 29),
|
|
|
|
(10121, 28),
|
|
|
|
(10562, 26),
|
|
|
|
]
|
|
|
|
);
|
2021-08-16 01:53:59 +00:00
|
|
|
|
|
|
|
// d=0.0, v=0.5, without oversampling
|
|
|
|
pset_s(matrix, vosc_1, "ovrsmpl", 0);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "d", 0.0);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "v", 0.5);
|
|
|
|
let fft = run_and_get_fft4096_2(node_exec, 25);
|
|
|
|
dump_table!(fft);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_eq!(
|
|
|
|
fft,
|
|
|
|
vec![
|
|
|
|
(431, 521),
|
|
|
|
(441, 859),
|
|
|
|
(452, 349),
|
|
|
|
(872, 242),
|
|
|
|
(883, 332),
|
|
|
|
(894, 108),
|
|
|
|
(1303, 26),
|
|
|
|
(1314, 175),
|
|
|
|
(1324, 201),
|
|
|
|
(1335, 51),
|
|
|
|
(1744, 30),
|
|
|
|
(1755, 143),
|
|
|
|
(1766, 137),
|
|
|
|
(1776, 26),
|
|
|
|
(2186, 34),
|
|
|
|
(2196, 122),
|
|
|
|
(2207, 98),
|
|
|
|
(2627, 38),
|
|
|
|
(2638, 106),
|
|
|
|
(2649, 71),
|
|
|
|
(3068, 41),
|
|
|
|
(3079, 93),
|
|
|
|
(3090, 52),
|
|
|
|
(3510, 44),
|
|
|
|
(3521, 81),
|
|
|
|
(3531, 37),
|
|
|
|
(3951, 46),
|
|
|
|
(3962, 70),
|
|
|
|
(3973, 26),
|
|
|
|
(4393, 48),
|
|
|
|
(4404, 61),
|
|
|
|
(4834, 48),
|
|
|
|
(4845, 51),
|
|
|
|
(5276, 48),
|
|
|
|
(5286, 43),
|
|
|
|
(5717, 47),
|
|
|
|
(5728, 35),
|
|
|
|
(6158, 45),
|
|
|
|
(6169, 28),
|
|
|
|
(6600, 43),
|
|
|
|
(7041, 40),
|
|
|
|
(7472, 26),
|
|
|
|
(7483, 36),
|
|
|
|
(7913, 28),
|
|
|
|
(7924, 32),
|
|
|
|
(8355, 29),
|
|
|
|
(8366, 28),
|
|
|
|
(8796, 30),
|
|
|
|
(9238, 30),
|
|
|
|
(9679, 29),
|
|
|
|
(10121, 28),
|
|
|
|
(10562, 26)
|
|
|
|
]
|
|
|
|
);
|
2021-08-16 01:53:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_vosc_dist() {
|
|
|
|
init_test!(matrix, node_exec, 3);
|
|
|
|
let vosc_1 = NodeId::VOsc(0);
|
|
|
|
|
|
|
|
setup_vosc(matrix);
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
// dist=TanH
|
|
|
|
pset_s(matrix, vosc_1, "dist", 1);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "damt", 0.25);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "d", 0.5);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "v", 0.5);
|
|
|
|
let fft = run_and_get_fft4096_2(node_exec, 100);
|
|
|
|
//d// dump_table!(fft);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_eq!(
|
|
|
|
fft,
|
|
|
|
vec![
|
|
|
|
(431, 781),
|
|
|
|
(441, 1287),
|
|
|
|
(452, 523),
|
|
|
|
(1314, 340),
|
|
|
|
(1324, 389),
|
|
|
|
(2196, 238),
|
|
|
|
(2207, 191),
|
|
|
|
(3079, 179),
|
|
|
|
(3962, 134)
|
|
|
|
]
|
|
|
|
);
|
2021-08-16 01:53:59 +00:00
|
|
|
|
|
|
|
// dist=B.D.Jong (very similar to the TanH)
|
|
|
|
pset_s(matrix, vosc_1, "dist", 2);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "damt", 0.25);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "d", 0.5);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "v", 0.5);
|
|
|
|
let fft = run_and_get_fft4096_2(node_exec, 100);
|
|
|
|
//d// dump_table!(fft);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_eq!(
|
|
|
|
fft,
|
|
|
|
vec![
|
|
|
|
(431, 759),
|
|
|
|
(441, 1251),
|
|
|
|
(452, 509),
|
|
|
|
(1314, 282),
|
|
|
|
(1324, 323),
|
|
|
|
(2196, 172),
|
|
|
|
(2207, 138),
|
|
|
|
(3079, 115)
|
|
|
|
]
|
|
|
|
);
|
2021-08-16 01:53:59 +00:00
|
|
|
|
|
|
|
// dist=Fold
|
|
|
|
pset_s(matrix, vosc_1, "dist", 3);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "damt", 0.25);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "d", 0.5);
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "v", 0.5);
|
|
|
|
let fft = run_and_get_fft4096_2(node_exec, 100);
|
|
|
|
//d// dump_table!(fft);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_eq!(
|
|
|
|
fft,
|
|
|
|
vec![
|
|
|
|
(0, 381),
|
|
|
|
(11, 190),
|
|
|
|
(431, 370),
|
|
|
|
(441, 611),
|
|
|
|
(452, 248),
|
|
|
|
(872, 242),
|
|
|
|
(883, 331),
|
|
|
|
(894, 107),
|
|
|
|
(1314, 313),
|
|
|
|
(1324, 359),
|
|
|
|
(1755, 221),
|
|
|
|
(1766, 212),
|
|
|
|
(2196, 250),
|
|
|
|
(2207, 201),
|
|
|
|
(2638, 129),
|
|
|
|
(3079, 123)
|
|
|
|
]
|
|
|
|
);
|
2021-08-16 01:53:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn check_node_vosc_vs() {
|
|
|
|
init_test!(matrix, node_exec, 3);
|
|
|
|
let vosc_1 = NodeId::VOsc(0);
|
|
|
|
|
|
|
|
setup_vosc(matrix);
|
|
|
|
matrix.sync().unwrap();
|
|
|
|
|
|
|
|
// d=0.3, vs=2.0
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "d", 0.3);
|
|
|
|
pset_d_wait(matrix, node_exec, vosc_1, "vs", 2.0);
|
|
|
|
let fft = run_and_get_fft4096_2(node_exec, 150);
|
|
|
|
//d// dump_table!(fft);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_eq!(
|
|
|
|
fft,
|
|
|
|
vec![
|
|
|
|
(872, 470),
|
|
|
|
(883, 644),
|
|
|
|
(894, 208),
|
|
|
|
(1314, 356),
|
|
|
|
(1324, 408),
|
|
|
|
(1755, 194),
|
|
|
|
(1766, 186),
|
|
|
|
(2638, 190),
|
|
|
|
(3079, 308),
|
|
|
|
(3090, 171),
|
|
|
|
(3510, 176),
|
|
|
|
(3521, 322),
|
|
|
|
(3951, 163),
|
|
|
|
(3962, 247)
|
|
|
|
]
|
|
|
|
);
|
2021-08-16 01:53:59 +00:00
|
|
|
|
|
|
|
// d=0.3, vs=3.0
|
|
|
|
pset_n_wait(matrix, node_exec, vosc_1, "d", 0.3);
|
|
|
|
pset_d_wait(matrix, node_exec, vosc_1, "vs", 3.0);
|
|
|
|
let fft = run_and_get_fft4096_2(node_exec, 150);
|
|
|
|
//d// dump_table!(fft);
|
2022-07-17 09:58:28 +00:00
|
|
|
assert_eq!(
|
|
|
|
fft,
|
|
|
|
vec![
|
|
|
|
(1314, 378),
|
|
|
|
(1324, 433),
|
|
|
|
(1755, 578),
|
|
|
|
(1766, 554),
|
|
|
|
(2638, 163),
|
|
|
|
(3079, 168),
|
|
|
|
(4393, 189),
|
|
|
|
(4404, 237),
|
|
|
|
(4834, 262),
|
|
|
|
(4845, 276),
|
|
|
|
(5276, 258),
|
|
|
|
(5286, 228),
|
|
|
|
(5717, 184)
|
|
|
|
]
|
|
|
|
);
|
2021-08-16 01:53:59 +00:00
|
|
|
}
|