Enum screech::signal::Signal [−][src]
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 signal containing one stream
Tuple Fields of Mono
0: Stream
Stereo signal containing two streams, left and right respectively
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
Auto Trait Implementations
Blanket Implementations
Mutably borrows from an owned value. Read more