mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
wip: fixing refactor errors pt.2
This commit is contained in:
parent
a6d6f5f06d
commit
7909caf6a8
4 changed files with 38 additions and 23 deletions
|
|
@ -9,3 +9,4 @@ uuid = { version = "1.10.0", features = [ "v4" ] }
|
||||||
vst = "0.4.0"
|
vst = "0.4.0"
|
||||||
livi = "0.7.4"
|
livi = "0.7.4"
|
||||||
symphonia = { version = "0.5.4", features = [ "all" ] }
|
symphonia = { version = "0.5.4", features = [ "all" ] }
|
||||||
|
wavers = "1.4.3"
|
||||||
|
|
|
||||||
|
|
@ -169,7 +169,29 @@ impl Sample {
|
||||||
},
|
},
|
||||||
_ => panic!("unexpected in sample {name}"),
|
_ => panic!("unexpected in sample {name}"),
|
||||||
});
|
});
|
||||||
let (end, data) = read_sample_data(&format!("{dir}/{file}"))?;
|
let (end, data) = Sample::read_data(&format!("{dir}/{file}"))?;
|
||||||
Ok((midi, Arc::new(RwLock::new(Self::new(&name, start, end, data)))))
|
Ok((midi, Arc::new(RwLock::new(Self {
|
||||||
|
name: name.into(),
|
||||||
|
start,
|
||||||
|
end,
|
||||||
|
channels: data,
|
||||||
|
rate: None
|
||||||
|
}))))
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Read WAV from file
|
||||||
|
pub fn read_data (src: &str) -> Usually<(usize, Vec<Vec<f32>>)> {
|
||||||
|
let mut channels: Vec<wavers::Samples<f32>> = vec![];
|
||||||
|
for channel in wavers::Wav::from_path(src)?.channels() {
|
||||||
|
channels.push(channel);
|
||||||
|
}
|
||||||
|
let mut end = 0;
|
||||||
|
let mut data: Vec<Vec<f32>> = vec![];
|
||||||
|
for samples in channels.iter() {
|
||||||
|
let channel = Vec::from(samples.as_ref());
|
||||||
|
end = end.max(channel.len());
|
||||||
|
data.push(channel);
|
||||||
|
}
|
||||||
|
Ok((end, data))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -214,22 +214,30 @@ pub struct Plugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Supported plugin formats.
|
/// Supported plugin formats.
|
||||||
#[derive(Default, Debug)]
|
#[derive(Default)]
|
||||||
pub enum PluginKind {
|
pub enum PluginKind {
|
||||||
#[default] None,
|
#[default] None,
|
||||||
LV2(LV2Plugin),
|
LV2(LV2Plugin),
|
||||||
VST2 {
|
VST2 { instance: ::vst::host::PluginInstance },
|
||||||
instance: ::vst::host::PluginInstance
|
|
||||||
},
|
|
||||||
VST3,
|
VST3,
|
||||||
}
|
}
|
||||||
|
impl std::fmt::Debug for PluginKind {
|
||||||
|
fn fmt (&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
|
||||||
|
write!(f, "{}", match self {
|
||||||
|
Self::None => "(none)",
|
||||||
|
Self::LV2(_) => "LV2",
|
||||||
|
Self::VST2{..} => "VST2",
|
||||||
|
Self::VST3 => "VST3",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// A LV2 plugin.
|
/// A LV2 plugin.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct LV2Plugin {
|
pub struct LV2Plugin {
|
||||||
pub world: livi::World,
|
pub world: livi::World,
|
||||||
pub instance: livi::Instance,
|
pub instance: livi::Instance,
|
||||||
pub plugin: livi::LiviPlugin,
|
pub plugin: livi::Plugin,
|
||||||
pub features: Arc<livi::Features>,
|
pub features: Arc<livi::Features>,
|
||||||
pub port_list: Vec<livi::Port>,
|
pub port_list: Vec<livi::Port>,
|
||||||
pub input_buffer: Vec<livi::event::LV2AtomSequence>,
|
pub input_buffer: Vec<livi::event::LV2AtomSequence>,
|
||||||
|
|
|
||||||
|
|
@ -143,22 +143,6 @@ impl Sample {
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Read WAV from file
|
|
||||||
pub fn read_sample_data (src: &str) -> Usually<(usize, Vec<Vec<f32>>)> {
|
|
||||||
let mut channels: Vec<wavers::Samples<f32>> = vec![];
|
|
||||||
for channel in wavers::Wav::from_path(src)?.channels() {
|
|
||||||
channels.push(channel);
|
|
||||||
}
|
|
||||||
let mut end = 0;
|
|
||||||
let mut data: Vec<Vec<f32>> = vec![];
|
|
||||||
for samples in channels.iter() {
|
|
||||||
let channel = Vec::from(samples.as_ref());
|
|
||||||
end = end.max(channel.len());
|
|
||||||
data.push(channel);
|
|
||||||
}
|
|
||||||
Ok((end, data))
|
|
||||||
}
|
|
||||||
|
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use symphonia::core::codecs::CODEC_TYPE_NULL;
|
use symphonia::core::codecs::CODEC_TYPE_NULL;
|
||||||
use symphonia::core::errors::Error;
|
use symphonia::core::errors::Error;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue