Crate radiorust

source ·
Expand description

Software defined radio

Getting started

For getting started, have a look at the blocks module for a selection of ready-to-use signal processing blocks and see the “Hello World” example below.

Hello World example

The following example requires the cpal feature to be enabled.

use radiorust::prelude::*;

#[tokio::main]
async fn main() {
    let morse_keyer = blocks::morse::Keyer::with_message(
        4096,
        48000.0,
        blocks::morse::Speed::from_paris_wpm(16.0),
        "<CT> Hello World <AR>",
    ).unwrap();
    let audio_modulator = blocks::FreqShifter::with_shift(700.0);
    audio_modulator.feed_from(&morse_keyer);
    let playback = blocks::io::audio::cpal::AudioPlayer::new(48000.0, None).unwrap();
    playback.feed_from(&audio_modulator);
    playback.wait_for_event(|event| {
        event.as_any().is::<blocks::morse::events::EndOfMessages>()
    }).await;
}

Modules

Signal processing blocks that can be connected with each other
Pools allowing to get buffers that are recycled when dropped
Mathematic functions helpful for signal processing
Metering (e.g. level or bandwidth measurement)
Generic floats and complex numbers
Re-export of certain important items
Signal type containing sample data and events, and handling of those events
Synchonization primitives
Window functions

Macros

Convert number into a generic Float type, which must be in scope as “Flt