Crate wavy[−][src]
Asynchronous cross-platform real-time audio recording & playback.
Getting Started
Add the following to your Cargo.toml:
[dependencies]
pasts = "0.7"
wavy = "0.8"
fon = "0.4"
This example records audio and plays it back in real time as it's being recorded. (Make sure to wear headphones to avoid feedback):
use fon::{stereo::Stereo32, Sink, Audio}; use pasts::{exec, wait}; use wavy::{Speakers, Microphone, SpeakersSink, MicrophoneStream}; /// An event handled by the event loop. enum Event<'a> { /// Speaker is ready to play more audio. Play(SpeakersSink<'a, Stereo32>), /// Microphone has recorded some audio. Record(MicrophoneStream<'a, Stereo32>), } /// Shared state between tasks on the thread. struct State { /// Temporary buffer for holding real-time audio samples. buffer: Audio<Stereo32>, } impl State { /// Event loop. Return false to stop program. fn event(&mut self, event: Event<'_>) { match event { Event::Play(mut speakers) => speakers.stream(self.buffer.drain()), Event::Record(microphone) => self.buffer.extend(microphone), } } } /// Program start. fn main() { let mut state = State { buffer: Audio::with_silence(48_000, 0) }; let mut speakers = Speakers::default(); let mut microphone = Microphone::default(); exec!(state.event(wait! { Event::Record(microphone.record().await), Event::Play(speakers.play().await), })); }
Structs
Microphone | Record audio samples from a microphone. |
MicrophoneStream | A stream of recorded audio samples from a microphone. |
Speakers | Play audio samples through a speaker. |
SpeakersSink | A sink that consumes audio samples and plays them through the speakers. |