Integration of WBlockDSP
This commit is contained in:
parent
1b89fed67d
commit
76a0e5cb88
4 changed files with 32 additions and 4 deletions
|
@ -8,8 +8,8 @@ description = "Comprehensive DSP graph and synthesis library for developing a mo
|
||||||
keywords = ["audio", "music", "real-time", "synthesis", "synthesizer", "dsp", "sound"]
|
keywords = ["audio", "music", "real-time", "synthesis", "synthesizer", "dsp", "sound"]
|
||||||
categories = ["multimedia::audio", "multimedia", "algorithms", "mathematics"]
|
categories = ["multimedia::audio", "multimedia", "algorithms", "mathematics"]
|
||||||
|
|
||||||
#[features]
|
[features]
|
||||||
#default = [ "hexotk" ]
|
default = [ "wblockdsp" ]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
@ -19,6 +19,7 @@ triple_buffer = "5.0.6"
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
hound = "3.4.0"
|
hound = "3.4.0"
|
||||||
num-traits = "0.2.14"
|
num-traits = "0.2.14"
|
||||||
|
wblockdsp = { path = "../wblockdsp", optional = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
num-complex = "0.2"
|
num-complex = "0.2"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (c) 2021 Weird Constructor <weirdconstructor@gmail.com>
|
// Copyright (c) 2021-2022 Weird Constructor <weirdconstructor@gmail.com>
|
||||||
// This file is a part of HexoDSP. Released under GPL-3.0-or-later.
|
// This file is a part of HexoDSP. Released under GPL-3.0-or-later.
|
||||||
// See README.md and COPYING for details.
|
// See README.md and COPYING for details.
|
||||||
|
|
||||||
|
@ -314,6 +314,8 @@ pub mod monitor;
|
||||||
pub mod nodes;
|
pub mod nodes;
|
||||||
pub mod sample_lib;
|
pub mod sample_lib;
|
||||||
pub mod scope_handle;
|
pub mod scope_handle;
|
||||||
|
#[cfg(feature="wblockdsp")]
|
||||||
|
pub mod wblockdsp;
|
||||||
mod util;
|
mod util;
|
||||||
|
|
||||||
pub use cell_dir::CellDir;
|
pub use cell_dir::CellDir;
|
||||||
|
|
|
@ -13,6 +13,8 @@ use crate::nodes::drop_thread::DropThread;
|
||||||
use crate::util::AtomicFloat;
|
use crate::util::AtomicFloat;
|
||||||
use crate::SampleLibrary;
|
use crate::SampleLibrary;
|
||||||
use crate::ScopeHandle;
|
use crate::ScopeHandle;
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
|
use crate::wblockdsp::CodeEngine;
|
||||||
|
|
||||||
use ringbuf::{Producer, RingBuffer};
|
use ringbuf::{Producer, RingBuffer};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
@ -254,6 +256,8 @@ impl SharedNodeConf {
|
||||||
graph_update_con: rb_graph_con,
|
graph_update_con: rb_graph_con,
|
||||||
graph_drop_prod: rb_drop_prod,
|
graph_drop_prod: rb_drop_prod,
|
||||||
monitor_backend,
|
monitor_backend,
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
|
code_backend: None, // TODO: FILL THIS!
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,8 @@ use super::{
|
||||||
use crate::dsp::{Node, NodeContext, NodeId, MAX_BLOCK_SIZE};
|
use crate::dsp::{Node, NodeContext, NodeId, MAX_BLOCK_SIZE};
|
||||||
use crate::monitor::{MonitorBackend, MON_SIG_CNT};
|
use crate::monitor::{MonitorBackend, MON_SIG_CNT};
|
||||||
use crate::util::{AtomicFloat, Smoother};
|
use crate::util::{AtomicFloat, Smoother};
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
|
use crate::wblockdsp::CodeEngineBackend;
|
||||||
|
|
||||||
use crate::log;
|
use crate::log;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
@ -81,6 +83,9 @@ pub(crate) struct SharedNodeExec {
|
||||||
pub(crate) graph_drop_prod: Producer<DropMsg>,
|
pub(crate) graph_drop_prod: Producer<DropMsg>,
|
||||||
/// For sending feedback to the frontend thread.
|
/// For sending feedback to the frontend thread.
|
||||||
pub(crate) monitor_backend: MonitorBackend,
|
pub(crate) monitor_backend: MonitorBackend,
|
||||||
|
/// For handing over the [crate::wblockdsp::CodeEngineBackend]
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
|
pub(crate) code_backend: Option<Box<CodeEngineBackend>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Contains audio driver context informations. Such as the number
|
/// Contains audio driver context informations. Such as the number
|
||||||
|
@ -168,25 +173,41 @@ impl Default for FeedbackBuffer {
|
||||||
/// This is used for instance to implement the feedbackd delay nodes.
|
/// This is used for instance to implement the feedbackd delay nodes.
|
||||||
pub struct NodeExecContext {
|
pub struct NodeExecContext {
|
||||||
pub feedback_delay_buffers: Vec<FeedbackBuffer>,
|
pub feedback_delay_buffers: Vec<FeedbackBuffer>,
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
|
pub code_backend: Option<Box<CodeEngineBackend>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NodeExecContext {
|
impl NodeExecContext {
|
||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
let mut fbdb = vec![];
|
let mut fbdb = vec![];
|
||||||
fbdb.resize_with(MAX_ALLOCATED_NODES, FeedbackBuffer::new);
|
fbdb.resize_with(MAX_ALLOCATED_NODES, FeedbackBuffer::new);
|
||||||
Self { feedback_delay_buffers: fbdb }
|
Self {
|
||||||
|
feedback_delay_buffers: fbdb,
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
|
code_backend: None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_sample_rate(&mut self, srate: f32) {
|
fn set_sample_rate(&mut self, srate: f32) {
|
||||||
for b in self.feedback_delay_buffers.iter_mut() {
|
for b in self.feedback_delay_buffers.iter_mut() {
|
||||||
b.set_sample_rate(srate);
|
b.set_sample_rate(srate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
|
if let Some(code_backend) = self.code_backend.as_mut() {
|
||||||
|
code_backend.set_sample_rate(srate);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn clear(&mut self) {
|
fn clear(&mut self) {
|
||||||
for b in self.feedback_delay_buffers.iter_mut() {
|
for b in self.feedback_delay_buffers.iter_mut() {
|
||||||
b.clear();
|
b.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
|
if let Some(code_backend) = self.code_backend.as_mut() {
|
||||||
|
code_backend.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue