simple wavetable
This commit is contained in:
commit
9db5d76c12
5 changed files with 68 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
/target
|
||||
Cargo.lock
|
||||
6
Cargo.toml
Normal file
6
Cargo.toml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[package]
|
||||
name = "wavetable-synth"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
10
README.md
Normal file
10
README.md
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
# WAVETABLE SYNTH
|
||||
synthesizes sounds using a wavetable.
|
||||
|
||||
## REQUIREMENTS
|
||||
`no_std` compatible
|
||||
|
||||
|
||||
## MODULES
|
||||
### `wavetable`
|
||||
trait definitions for a wavetable manager
|
||||
2
src/lib.rs
Normal file
2
src/lib.rs
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
#![no_std]
|
||||
mod wavetable;
|
||||
48
src/wavetable.rs
Normal file
48
src/wavetable.rs
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
pub trait Wavetable {
|
||||
type OutputType;
|
||||
/// get next sample
|
||||
fn next(&mut self) -> Self::OutputType;
|
||||
}
|
||||
|
||||
pub struct SimpleWavetable<'a> {
|
||||
// byte array for waveform
|
||||
table: &'a [u8],
|
||||
// index in the waveform
|
||||
index: usize,
|
||||
}
|
||||
|
||||
impl<'a> Wavetable for SimpleWavetable<'a> {
|
||||
type OutputType = u8;
|
||||
fn next(&mut self) -> Self::OutputType {
|
||||
let value = self.table[self.index];
|
||||
self.index += 1;
|
||||
if self.index > self.table.len() {
|
||||
self.index = 0;
|
||||
}
|
||||
value
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> SimpleWavetable<'a> {
|
||||
pub fn new(table: &'a [u8]) -> Self {
|
||||
Self { table, index: 0 }
|
||||
}
|
||||
}
|
||||
|
||||
// TESTS
|
||||
#[cfg(test)]
|
||||
pub mod test {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn wavetable_t1() {
|
||||
let table_data: [u8; 2] = [0, 255];
|
||||
let mut w = SimpleWavetable::new(&table_data);
|
||||
for point in table_data {
|
||||
assert!(w.next() == point);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO:
|
||||
// - interpolated wavetable
|
||||
Loading…
Add table
Add a link
Reference in a new issue