Enum screech::signal::Signal[][src]

pub enum Signal {
    Mono(Stream),
    Stereo(Stream, Stream),
}
Expand description

Most fundamental type for carrying signals throughout the library. Each component that has a sound source should be sampleable and be able to produce a Signal

Variants

Mono

Mono signal containing one stream

Tuple Fields of Mono

0: Stream
Stereo

Stereo signal containing two streams, left and right respectively

Tuple Fields of Stereo

0: Stream1: Stream

Implementations

Generate a mono signal of size length

use screech::stream::Stream;
use screech::signal::Signal;

assert_eq!(Signal::silence(2), Signal::Mono(Stream { points: vec![0.0, 0.0] }));

Return the length of the internal Stream

use screech::signal::Signal;

assert_eq!(Signal::silence(2).len(), 2);

apply a manipulation to the underlying Stream

use screech::signal::Signal;
use screech::stream::Stream;
 
let signal = Signal::silence(10).map(|stream| stream.get_looped_slice(0, 2));

assert_eq!(
    signal,
    Signal::Mono(Stream { points: vec![0.0, 0.0] })
);

let signal = Signal::silence(10).to_stereo().map(|stream| stream.get_looped_slice(0, 2));

assert_eq!(
    signal,
    Signal::Stereo(Stream { points: vec![0.0, 0.0] }, Stream { points: vec![0.0, 0.0] })
);

apply a manipulation that can Err to the underlying Stream

use screech::signal::Signal;
use screech::stream::Stream;
 
let signal = Signal::silence(10).and_then(|stream| stream.get_slice(0, 2));

assert_eq!(
    signal.unwrap(),
    Signal::Mono(Stream { points: vec![0.0, 0.0] })
);

let signal = Signal::silence(10).to_stereo().and_then(|stream| stream.get_slice(0, 2));

assert_eq!(
    signal.unwrap(),
    Signal::Stereo(Stream { points: vec![0.0, 0.0] }, Stream { points: vec![0.0, 0.0] })
);

Mix other signals into current signal respecting channels using Stream::mix

use screech::signal::Signal;
use screech::stream::{Stream, FromPoints};

let mono_signal_a = Signal::Mono(
    Stream::from_points(&[0.1, 0.0, 0.1]),
);

let mono_signal_b = Signal::Mono(
    Stream::from_points(&[0.0, 0.1, 0.1, 0.1]),
);

let mut stereo_signal = Signal::Stereo(
    Stream::from_points(&[0.0, 0.1, 0.2, 0.3]),
    Stream::from_points(&[0.1, 0.2, 0.3, 0.4]),
);

stereo_signal.mix(&[&mono_signal_a, &mono_signal_b]);

assert_eq!(
    stereo_signal,
    Signal::Stereo(
        Stream { points: vec![0.1, 0.2, 0.4, 0.4] },
        Stream { points: vec![0.2, 0.3, 0.5, 0.5] },
    )
)

match channels for current Signal based on passed Signal using Signal::sum_to_mono for stereo to mono conversion

use screech::signal::Signal;
use screech::stream::Stream;

let mono_signal = Signal::Mono(Stream::empty(0));
let stereo_signal = Signal::Stereo(Stream::empty(0), Stream::empty(0));

assert_eq!(Signal::silence(0).match_channels(&mono_signal).is_mono(), true);
assert_eq!(Signal::silence(0).match_channels(&stereo_signal).is_stereo(), true);

Returns true if the enum instance is of [Signal::Mono(Stream)] type

use screech::signal::Signal;
use screech::stream::Stream;

let mono_signal = Signal::Mono(Stream::empty(0));
let stereo_signal = Signal::Stereo(Stream::empty(0), Stream::empty(0));

assert_eq!(mono_signal.is_mono(), true);
assert_eq!(stereo_signal.is_mono(), false);

Returns true if the enum instance is of [Signal::Stereo(Stream, Stream)] type

use screech::signal::Signal;
use screech::stream::Stream;

let mono_signal = Signal::Mono(Stream::empty(0));
let stereo_signal = Signal::Stereo(Stream::empty(0), Stream::empty(0));

assert_eq!(mono_signal.is_stereo(), false);
assert_eq!(stereo_signal.is_stereo(), true);

Convert a stereo stream to mono by summing the left and right channel using Stream::mix

use screech::signal::Signal;
use screech::stream::{Stream, FromPoints};

let stereo_signal = Signal::Stereo(
    Stream::from_points(&[0.1, 0.2, 0.3, 0.4]),
    Stream::from_points(&[-0.1, -0.2, -0.3, -0.4]),
);

assert_eq!(
    stereo_signal.sum_to_mono(),
    Signal::Mono(
        Stream { points: vec![0.0, 0.0, 0.0, 0.0] },
    )
)

Convert a stereo stream to mono by ditching the right channel

use screech::signal::Signal;
use screech::stream::{Stream, FromPoints};

let stereo_signal = Signal::Stereo(
    Stream::from_points(&[0.1, 0.2, 0.3, 0.4]),
    Stream::from_points(&[0.5, 0.6, 0.7, 0.8]),
);

assert_eq!(
    stereo_signal.to_mono(),
    Signal::Mono(
        Stream { points: vec![0.1, 0.2, 0.3, 0.4] },
    )
)

Convert a mono stream to stereo by cloning the signal to both channels

use screech::signal::Signal;
use screech::stream::{Stream, FromPoints};

let mono_signal = Signal::Mono(Stream::from_points(&[0.1, 0.2, 0.3, 0.4]));

assert_eq!(
    mono_signal.to_stereo(),
    Signal::Stereo(
        Stream { points: vec![0.1, 0.2, 0.3, 0.4] },
        Stream { points: vec![0.1, 0.2, 0.3, 0.4] },
    )
)

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.