Expand description
This library is for generating L-Synth audio streams.
Here is an example of the basic setup of the LSynth chip. Whatever library you are using to play this audio should provide an audio buffer for L-Synth to populate, represented here by the buffer
parameter of audio_sample_request
use lsynth::*;
let mut chip = ChipState::new(4, ChipParameters::new(44_100, 0.5, 120.0));
chip.send_command(Command::SetAmplitude(0.5), 0);
chip.send_command(Command::SetFrequency(110.0), 0);
let mut frequency = 110.0;
let mut beat = 0;
let mut request_callback = move |chip: &mut ChipState| {
beat += 1;
while beat >= 4 {
frequency += 110.0;
chip.send_command(Command::SetFrequency(frequency), 0);
beat -= 4;
}
};
let mut audio_sample_request = move |buffer: &mut [f32]| {
let mut sample_index = 0;
while sample_index < buffer.len() {
let generated_data = chip.generate(&mut buffer[sample_index..]).unwrap();
sample_index += generated_data.generated;
assert!(generated_data.generated != 0);
if generated_data.remaining_samples == 0 { request_callback(&mut chip); }
}
};
Modules
Provides C compatible functions for working with this library as a DLL.
Contains the error types that LSynth could return
Contains the formulas for generating all the different types of waveforms. All generated samples are between -1 and 1, and the provided periods are expected to be between 0 and 1.
Structs
Data returned by the generate function of ChipState.
Parameters detailing how an LSynth chip is intended to operate.
The current state of the LSynth chip.
Enums
The different types of commands that can be sent to channels.