working on the wblockdsp integration, found some weird bug in wblockdsp though...
This commit is contained in:
parent
70f369af70
commit
4fc1dc75fd
5 changed files with 70 additions and 14 deletions
|
@ -4,12 +4,14 @@
|
||||||
|
|
||||||
use crate::dsp::{DspNode, LedPhaseVals, NodeContext, NodeId, ProcBuf, SAtom};
|
use crate::dsp::{DspNode, LedPhaseVals, NodeContext, NodeId, ProcBuf, SAtom};
|
||||||
use crate::nodes::{NodeAudioContext, NodeExecContext};
|
use crate::nodes::{NodeAudioContext, NodeExecContext};
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
use crate::wblockdsp::CodeEngineBackend;
|
use crate::wblockdsp::CodeEngineBackend;
|
||||||
|
|
||||||
use crate::dsp::MAX_BLOCK_SIZE;
|
use crate::dsp::MAX_BLOCK_SIZE;
|
||||||
|
|
||||||
/// A WBlockDSP code execution node for JIT'ed DSP code
|
/// A WBlockDSP code execution node for JIT'ed DSP code
|
||||||
pub struct Code {
|
pub struct Code {
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
backend: Option<Box<CodeEngineBackend>>,
|
backend: Option<Box<CodeEngineBackend>>,
|
||||||
srate: f64,
|
srate: f64,
|
||||||
}
|
}
|
||||||
|
@ -29,11 +31,13 @@ impl Clone for Code {
|
||||||
impl Code {
|
impl Code {
|
||||||
pub fn new(_nid: &NodeId) -> Self {
|
pub fn new(_nid: &NodeId) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
backend: None,
|
backend: None,
|
||||||
srate: 48000.0,
|
srate: 48000.0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
pub fn set_backend(&mut self, backend: CodeEngineBackend) {
|
pub fn set_backend(&mut self, backend: CodeEngineBackend) {
|
||||||
self.backend = Some(Box::new(backend));
|
self.backend = Some(Box::new(backend));
|
||||||
}
|
}
|
||||||
|
@ -64,12 +68,14 @@ impl DspNode for Code {
|
||||||
|
|
||||||
fn set_sample_rate(&mut self, srate: f32) {
|
fn set_sample_rate(&mut self, srate: f32) {
|
||||||
self.srate = srate as f64;
|
self.srate = srate as f64;
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
if let Some(backend) = self.backend.as_mut() {
|
if let Some(backend) = self.backend.as_mut() {
|
||||||
backend.set_sample_rate(srate);
|
backend.set_sample_rate(srate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reset(&mut self) {
|
fn reset(&mut self) {
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
if let Some(backend) = self.backend.as_mut() {
|
if let Some(backend) = self.backend.as_mut() {
|
||||||
backend.clear();
|
backend.clear();
|
||||||
}
|
}
|
||||||
|
@ -91,6 +97,8 @@ impl DspNode for Code {
|
||||||
// let trig = inp::TSeq::trig(inputs);
|
// let trig = inp::TSeq::trig(inputs);
|
||||||
// let cmode = at::TSeq::cmode(atoms);
|
// let cmode = at::TSeq::cmode(atoms);
|
||||||
|
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
|
{
|
||||||
let backend = if let Some(backend) = &mut self.backend {
|
let backend = if let Some(backend) = &mut self.backend {
|
||||||
backend
|
backend
|
||||||
} else {
|
} else {
|
||||||
|
@ -106,4 +114,5 @@ impl DspNode for Code {
|
||||||
ctx_vals[0].set(0.0);
|
ctx_vals[0].set(0.0);
|
||||||
ctx_vals[1].set(0.0);
|
ctx_vals[1].set(0.0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -290,6 +290,7 @@ impl NodeConfigurator {
|
||||||
atom_values: std::collections::HashMap::new(),
|
atom_values: std::collections::HashMap::new(),
|
||||||
node2idx: HashMap::new(),
|
node2idx: HashMap::new(),
|
||||||
trackers: vec![Tracker::new(); MAX_AVAIL_TRACKERS],
|
trackers: vec![Tracker::new(); MAX_AVAIL_TRACKERS],
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
code_engines: vec![CodeEngine::new(); MAX_AVAIL_CODE_ENGINES],
|
code_engines: vec![CodeEngine::new(); MAX_AVAIL_CODE_ENGINES],
|
||||||
scopes,
|
scopes,
|
||||||
},
|
},
|
||||||
|
@ -694,6 +695,14 @@ impl NodeConfigurator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "wblockdsp")]
|
||||||
|
if let Node::Code { node } = &mut node {
|
||||||
|
let code_idx = ni.instance();
|
||||||
|
if let Some(cod) = self.code_engines.get_mut(code_idx) {
|
||||||
|
node.set_backend(cod.get_backend());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let Node::Scope { node } = &mut node {
|
if let Node::Scope { node } = &mut node {
|
||||||
if let Some(handle) = self.scopes.get(ni.instance()) {
|
if let Some(handle) = self.scopes.get(ni.instance()) {
|
||||||
node.set_scope_handle(handle.clone());
|
node.set_scope_handle(handle.clone());
|
||||||
|
|
|
@ -36,9 +36,9 @@ impl Clone for CodeEngine {
|
||||||
impl CodeEngine {
|
impl CodeEngine {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
let rb = RingBuffer::new(MAX_RINGBUF_SIZE);
|
let rb = RingBuffer::new(MAX_RINGBUF_SIZE);
|
||||||
let (update_prod, update_cons) = rb.split();
|
let (update_prod, _update_cons) = rb.split();
|
||||||
let rb = RingBuffer::new(MAX_RINGBUF_SIZE);
|
let rb = RingBuffer::new(MAX_RINGBUF_SIZE);
|
||||||
let (return_prod, return_cons) = rb.split();
|
let (_return_prod, return_cons) = rb.split();
|
||||||
|
|
||||||
let lib = get_default_library();
|
let lib = get_default_library();
|
||||||
|
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
38
tests/wblockdsp.rs
Normal file
38
tests/wblockdsp.rs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
// Copyright (c) 2022 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::*;
|
||||||
|
use hexodsp::wblockdsp::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn check_wblockdsp_init() {
|
||||||
|
let mut engine = CodeEngine::new();
|
||||||
|
|
||||||
|
let backend = engine.get_backend();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn check_wblockdsp_code_node() {
|
||||||
|
let (node_conf, mut node_exec) = new_node_engine();
|
||||||
|
let mut matrix = Matrix::new(node_conf, 3, 3);
|
||||||
|
|
||||||
|
let mut chain = MatrixCellChain::new(CellDir::B);
|
||||||
|
chain
|
||||||
|
.node_out("code", "sig")
|
||||||
|
.node_io("code", "in1", "sig")
|
||||||
|
.node_inp("out", "ch1")
|
||||||
|
.place(&mut matrix, 0, 0)
|
||||||
|
.unwrap();
|
||||||
|
matrix.sync().unwrap();
|
||||||
|
|
||||||
|
let mut chain = MatrixCellChain::new(CellDir::B);
|
||||||
|
chain
|
||||||
|
.node_out("code", "sig")
|
||||||
|
.node_io("code", "in1", "sig")
|
||||||
|
.node_inp("out", "ch1")
|
||||||
|
.place(&mut matrix, 0, 0)
|
||||||
|
.unwrap();
|
||||||
|
matrix.sync().unwrap();
|
||||||
|
}
|
Loading…
Reference in a new issue