diff --git a/Cargo.lock b/Cargo.lock index 3513258..5714b19 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,7 +4,7 @@ version = 3 [[package]] name = "Subhoofer" -version = "2.2.0" +version = "2.2.1" dependencies = [ "atomic_float", "lazy_static", diff --git a/Cargo.toml b/Cargo.toml index 1402aa3..8045720 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "Subhoofer" -version = "2.2.0" +version = "2.2.1" edition = "2021" authors = ["Ardura "] license = "GPL-3.0-or-later" diff --git a/src/lib.rs b/src/lib.rs index fc13b39..97face6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -118,11 +118,13 @@ fn chebyshev_tape(sample: f32, drive: f32) -> f32 { // Modified tape saturation using transfer function from Duro Console fn tape_saturation(input_signal: f32, drive: f32) -> f32 { - if drive == 0.0 { return 0.0; } let idrive = drive; // Define the transfer curve for the tape saturation effect let transfer = |x: f32| -> f32 { - (x * idrive).tanh() + // Smoothly transition to linear function as drive approaches 0.0 + let tanh_saturation = (x * idrive).tanh(); + let linear_saturation = x * idrive; + tanh_saturation + (linear_saturation - tanh_saturation) * 0.5 }; // Apply the transfer curve to the input sample let output_sample = transfer(input_signal); @@ -152,13 +154,7 @@ fn b_bass_saturation(signal: f32, mut harmonic_strength: f32) -> f32 { summed += harmonic_component; } } - if harmonic_strength > 0.0 - { - summed - signal - } - else { - 0.0 - } + summed - signal } @@ -864,13 +860,18 @@ Double-click to reset"); processed_sample_r = b_bass_saturation(in_r, harmonics) + (sub_bump * sub_gain); }, AlgorithmType::CBass => { - processed_sample_l = c_bass_saturation(in_l, harmonics) + (sub_bump * sub_gain); - processed_sample_r = c_bass_saturation(in_r, harmonics) + (sub_bump * sub_gain); + if harmonics > 0.0 { + processed_sample_l = c_bass_saturation(in_l, harmonics) + (sub_bump * sub_gain); + processed_sample_r = c_bass_saturation(in_r, harmonics) + (sub_bump * sub_gain); + } else { + processed_sample_l = sub_bump * sub_gain; + processed_sample_r = sub_bump * sub_gain; + } } AlgorithmType::TanH => { // Generate tanh curve harmonics gently - processed_sample_l = tape_saturation(in_l, harmonics); - processed_sample_r = tape_saturation(in_r, harmonics); + processed_sample_l = tape_saturation(in_l, harmonics) + (sub_bump * sub_gain); + processed_sample_r = tape_saturation(in_r, harmonics) + (sub_bump * sub_gain); }, AlgorithmType::CustomSliders => { processed_sample_l = custom_sincos_saturation(in_l, harmonics*custom_harmonics1, harmonics*custom_harmonics2, harmonics*custom_harmonics3, harmonics*custom_harmonics4) + (sub_bump * sub_gain); diff --git a/target/.rustc_info.json b/target/.rustc_info.json index 69b7fc3..89e6595 100644 --- a/target/.rustc_info.json +++ b/target/.rustc_info.json @@ -1 +1 @@ -{"rustc_fingerprint":10273999674826962700,"outputs":{"12744816824612481171":{"success":true,"status":"","code":0,"stdout":"___.exe\nlib___.rlib\n___.dll\n___.dll\n___.lib\n___.dll\nC:\\Users\\azvis\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\npacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"msvc\"\ntarget_family=\"windows\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"windows\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"pc\"\nwindows\n","stderr":""},"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.77.1 (7cf61ebde 2024-03-27)\nbinary: rustc\ncommit-hash: 7cf61ebde7b22796c69757901dd346d0fe70bd97\ncommit-date: 2024-03-27\nhost: x86_64-pc-windows-msvc\nrelease: 1.77.1\nLLVM version: 17.0.6\n","stderr":""},"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___.exe\nlib___.rlib\n___.dll\n___.dll\n___.lib\n___.dll\nC:\\Users\\azvis\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\npacked\n___\ndebug_assertions\noverflow_checks\npanic=\"unwind\"\nproc_macro\nrelocation_model=\"pic\"\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"msvc\"\ntarget_family=\"windows\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_has_atomic_equal_alignment=\"16\"\ntarget_has_atomic_equal_alignment=\"32\"\ntarget_has_atomic_equal_alignment=\"64\"\ntarget_has_atomic_equal_alignment=\"8\"\ntarget_has_atomic_equal_alignment=\"ptr\"\ntarget_has_atomic_load_store\ntarget_has_atomic_load_store=\"16\"\ntarget_has_atomic_load_store=\"32\"\ntarget_has_atomic_load_store=\"64\"\ntarget_has_atomic_load_store=\"8\"\ntarget_has_atomic_load_store=\"ptr\"\ntarget_os=\"windows\"\ntarget_pointer_width=\"64\"\ntarget_thread_local\ntarget_vendor=\"pc\"\nwindows\n","stderr":""}},"successes":{}} \ No newline at end of file +{"rustc_fingerprint":10273999674826962700,"outputs":{"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___.exe\nlib___.rlib\n___.dll\n___.dll\n___.lib\n___.dll\nC:\\Users\\azvis\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\npacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"msvc\"\ntarget_family=\"windows\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"windows\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"pc\"\nwindows\n","stderr":""},"12744816824612481171":{"success":true,"status":"","code":0,"stdout":"___.exe\nlib___.rlib\n___.dll\n___.dll\n___.lib\n___.dll\nC:\\Users\\azvis\\.rustup\\toolchains\\stable-x86_64-pc-windows-msvc\npacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"msvc\"\ntarget_family=\"windows\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"windows\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"pc\"\nwindows\n","stderr":""},"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.77.1 (7cf61ebde 2024-03-27)\nbinary: rustc\ncommit-hash: 7cf61ebde7b22796c69757901dd346d0fe70bd97\ncommit-date: 2024-03-27\nhost: x86_64-pc-windows-msvc\nrelease: 1.77.1\nLLVM version: 17.0.6\n","stderr":""}},"successes":{}} \ No newline at end of file