| Crates.io | audio-master |
| lib.rs | audio-master |
| version | 1.1.2 |
| created_at | 2025-11-30 17:52:10.633322+00 |
| updated_at | 2025-12-01 16:19:05.437016+00 |
| description | Rich Audio API based on libsamplerate and cpal. |
| homepage | https://github.com/executable1210/audio-master-rs |
| repository | https://github.com/executable1210/audio-master-rs |
| max_upload_size | |
| id | 1958550 |
| size | 228,087 |
Cross-platform rich Audio API for Rust based on cpal and high-quality C library libsamplerate.
Status: The project is not stable yet.
AudioProcessor API for wrapping Audio FX's or DSPAudioStreams layer (Isn't related to cpal stream, there's only one main stream for handling AudioStream).Turn on libsamplerate featureuse audio_master::{
AudioBuffer, AudioBufferImpl, AudioChannelLayout, AudioMaster, AudioMasterError,
AudioMasterImpl, AudioStreamContext, AudioStreamFeederTrait, AudioStreamImpl,
AudioStreamSettings, AudioStreamState,
};
const SAMPLE_RATE: u32 = 44100;
const SINEWAVE_FREQ: f64 = 1200.0;
struct SineWave {
freq: f64,
t: f64,
}
impl AudioStreamFeederTrait<f64> for SineWave {
fn process(
&mut self,
context: &AudioStreamContext,
input: &mut AudioBuffer<f64>,
) -> AudioStreamState {
let ch_count = input.channel_layout() as usize;
let sample_rate = context.sample_rate;
for s_idx in 0..input.len() {
let sample = (self.t * self.freq * 2.0 * std::f64::consts::PI).sin();
self.t += 1.0 / sample_rate as f64;
for ch_idx in 0..ch_count {
let channel = unsafe { input.get_channel_unchecked_mut(ch_idx) };
unsafe { *channel.get_unchecked_mut(s_idx) = sample }
}
}
return AudioStreamState::Ok;
}
}
fn main() -> Result<(), AudioMasterError> {
// buffer_size = device sample rate / fps
let mut master = AudioMaster::new_with_fps(25);
// start main system stream
let _ = master.start_sys_stream()?;
let settings = AudioStreamSettings {
sample_rate: SAMPLE_RATE,
channel_layout: AudioChannelLayout::Stereo,
};
let sine_feeder: Box<dyn AudioStreamFeederTrait<f64>> = Box::new(SineWave {
freq: SINEWAVE_FREQ,
t: 0.0,
});
let mut stream = master.create_stream_f64(&settings, sine_feeder);
// start process stream
stream.resume();
std::thread::sleep(std::time::Duration::from_secs(16));
return Ok(());
}