mirror of
https://codeberg.org/uzu/strudel
synced 2026-07-24 05:57:17 -04:00
adsr tests
This commit is contained in:
Generated
+1
-2
@@ -3912,8 +3912,7 @@ checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
|
||||
[[package]]
|
||||
name = "web-audio-api"
|
||||
version = "0.33.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b600725f86c3caa0f8823ff5e3c42aecbdfcd4a390db2be9278eb06d16a98c1a"
|
||||
source = "git+https://github.com/orottier/web-audio-api-rs.git?branch=main#ed2e8712a00a36a9481510ce757858d633d20e85"
|
||||
dependencies = [
|
||||
"arc-swap",
|
||||
"arrayvec",
|
||||
|
||||
@@ -21,7 +21,7 @@ tauri = { version = "1.4.0", features = ["fs-all"] }
|
||||
midir = "0.9.1"
|
||||
tokio = { version = "1.29.0", features = ["full"] }
|
||||
rosc = "0.10.1"
|
||||
web-audio-api = "0.33.0"
|
||||
web-audio-api = { git = "https://github.com/orottier/web-audio-api-rs.git", branch = "main" }
|
||||
|
||||
[features]
|
||||
# this feature is used for production builds or when `devPath` points to the filesystem and the built-in dev server is disabled.
|
||||
|
||||
+11
-12
@@ -57,8 +57,8 @@ pub struct FilterADSR {
|
||||
pub fn superdough(message: &WebAudioMessage, context: &mut AudioContext) {
|
||||
let now = context.current_time();
|
||||
let mut chain: Vec<&dyn AudioNode> = Vec::new();
|
||||
let env = context.create_gain();
|
||||
|
||||
let env = context.create_gain();
|
||||
// Play synth or sample
|
||||
match message.waveform.as_str() {
|
||||
"sine" | "square" | "triangle" | "saw" => {
|
||||
@@ -81,7 +81,6 @@ pub fn superdough(message: &WebAudioMessage, context: &mut AudioContext) {
|
||||
create_delay(message, &context, &env, &mut delays, now);
|
||||
}
|
||||
|
||||
let (sustain, velocity, release) = (message.adsr.sustain, message.velocity, message.adsr.release);
|
||||
// Connect nodes and play synth
|
||||
connect_nodes(chain, context);
|
||||
let osc = play_synth(&message, now, osc, filters, &env);
|
||||
@@ -101,7 +100,7 @@ pub fn superdough(message: &WebAudioMessage, context: &mut AudioContext) {
|
||||
// Create nodes for sample playback
|
||||
let audio_buffer = context.decode_audio_data_sync(file).unwrap();
|
||||
let audio_buffer_duration = audio_buffer.duration();
|
||||
let src = context.create_buffer_source();
|
||||
let mut src = context.create_buffer_source();
|
||||
src.set_buffer(audio_buffer);
|
||||
chain.push(&src);
|
||||
let filters = create_filters(context, message);
|
||||
@@ -159,7 +158,7 @@ fn create_delay(message: &WebAudioMessage, context: &&mut AudioContext, env: &Ga
|
||||
env.connect(&input);
|
||||
}
|
||||
|
||||
fn play_synth(message: &&WebAudioMessage, now: f64, osc: OscillatorNode, filters: Vec<BiquadFilterNode>, env: &GainNode) -> OscillatorNode {
|
||||
fn play_synth(message: &&WebAudioMessage, now: f64, mut osc: OscillatorNode, filters: Vec<BiquadFilterNode>, env: &GainNode) -> OscillatorNode {
|
||||
osc.set_type(create_osc_type(&message));
|
||||
osc.frequency().set_value(message.note);
|
||||
osc.start();
|
||||
@@ -185,7 +184,7 @@ fn create_osc_type(message: &WebAudioMessage) -> OscillatorType {
|
||||
}
|
||||
}
|
||||
|
||||
fn play_sample(message: &WebAudioMessage, now: f64, audio_buffer_duration: f64, src: AudioBufferSourceNode, filters: Vec<BiquadFilterNode>, env: &GainNode) -> AudioBufferSourceNode {
|
||||
fn play_sample(message: &WebAudioMessage, now: f64, audio_buffer_duration: f64, mut src: AudioBufferSourceNode, filters: Vec<BiquadFilterNode>, env: &GainNode) -> AudioBufferSourceNode {
|
||||
let (start_at, stop_at) = if message.speed < 0.0 {
|
||||
(audio_buffer_duration, now + message.duration + 0.2)
|
||||
} else {
|
||||
@@ -228,14 +227,14 @@ fn create_filters(context: &mut AudioContext, message: &WebAudioMessage) -> Vec<
|
||||
let mut filters = Vec::new();
|
||||
|
||||
if message.bpf.frequency > 0.0 {
|
||||
let bpf = context.create_biquad_filter();
|
||||
let mut bpf = context.create_biquad_filter();
|
||||
bpf.set_type(Bandpass);
|
||||
bpf.frequency().set_value(message.bpf.frequency);
|
||||
bpf.q().set_value(message.bpf.resonance);
|
||||
filters.push(bpf);
|
||||
} else if message.lpf.frequency > 0.0 && message.hpf.frequency > 0.0 {
|
||||
let lpf = context.create_biquad_filter();
|
||||
let hpf = context.create_biquad_filter();
|
||||
let mut lpf = context.create_biquad_filter();
|
||||
let mut hpf = context.create_biquad_filter();
|
||||
lpf.set_type(Lowpass);
|
||||
lpf.frequency().set_value(message.lpf.frequency);
|
||||
lpf.q().set_value(message.lpf.resonance);
|
||||
@@ -246,13 +245,13 @@ fn create_filters(context: &mut AudioContext, message: &WebAudioMessage) -> Vec<
|
||||
filters.push(lpf);
|
||||
filters.push(hpf);
|
||||
} else if message.lpf.frequency > 0.0 {
|
||||
let lpf = context.create_biquad_filter();
|
||||
let mut lpf = context.create_biquad_filter();
|
||||
lpf.set_type(Lowpass);
|
||||
lpf.frequency().set_value(message.lpf.frequency);
|
||||
lpf.q().set_value(message.lpf.resonance);
|
||||
filters.push(lpf);
|
||||
} else if message.hpf.frequency > 0.0 {
|
||||
let hpf = context.create_biquad_filter();
|
||||
let mut hpf = context.create_biquad_filter();
|
||||
hpf.set_type(Highpass);
|
||||
hpf.frequency().set_value(message.hpf.frequency);
|
||||
hpf.q().set_value(message.hpf.resonance);
|
||||
@@ -310,7 +309,7 @@ fn apply_adsr(
|
||||
now + attack + decay,
|
||||
)
|
||||
.set_value_at_time(sustain * message.velocity, message.duration)
|
||||
.linear_ramp_to_value_at_time(0.001, message.duration + release);
|
||||
.linear_ramp_to_value_at_time(0.00, now + message.duration);
|
||||
}
|
||||
|
||||
fn apply_synth_adsr(envelope: &GainNode, message: &WebAudioMessage, now: f64) {
|
||||
@@ -326,7 +325,7 @@ fn apply_synth_adsr(envelope: &GainNode, message: &WebAudioMessage, now: f64) {
|
||||
}
|
||||
|
||||
fn apply_default_synth_adsr(envelope: &GainNode, message: &WebAudioMessage, now: f64) {
|
||||
apply_adsr(envelope, message, now, 0.001, message.velocity, 0.5, 0.1);
|
||||
apply_adsr(envelope, message, now, 0.001, message.velocity, 0.05, 0.1);
|
||||
}
|
||||
|
||||
fn apply_drum_adsr(envelope: &GainNode, message: &WebAudioMessage, now: f64) {
|
||||
|
||||
Reference in New Issue
Block a user