Struct Microphone

Source
#[repr(C)]
pub struct Microphone { /* private fields */ }
Expand description

This class provides access to the hardware’s microphone, and stores it in a Sound stream. Start and Stop recording, and check the Sound property for the results! Remember to ensure your application has microphone permissions enabled! https://stereokit.net/Pages/StereoKit/Microphone.html

see also: Sound /// ### Examples

use stereokit_rust::{maths::{Vec3, Matrix}, mesh::Mesh, material::Material,
                     sound::Sound, system::Microphone, util::named_colors};

let sphere = Mesh::generate_cube(Vec3::ONE * 0.5, None);
let material = Material::pbr().tex_file_copy("textures/micro.jpeg", true, None)
                   .expect("sound.jpeg should be there");
let mut position = Vec3::new( 0.0, 0.0, 0.5);
let transform = Matrix::t(position);

let micros = Microphone::get_devices();

if micros.len() > 0 {
    let first_in_list = micros[0].clone();
    if Microphone::start(Some(first_in_list)) {
        assert!(Microphone::is_recording());
    } else {
        assert!(!Microphone::is_recording());
    }
}

filename_scr = "screenshots/microphone.jpeg";
test_screenshot!( // !!!! Get a proper main loop !!!!
    sphere.draw(token, &material, transform, Some(named_colors::LIGHT_BLUE.into()), None  );
    if iter == 1990 && Microphone::is_recording() {
        let micro_sound = Microphone::sound().expect("Microphone should be recording");
        let mut read_samples: Vec<f32> = vec![0.0; 48000];
        let recorded_data = micro_sound.read_samples(read_samples.as_mut_slice(), None);
        Microphone::stop();
        //assert_ne!(recorded_data, 0);
    }
);
screenshot

Implementations§

Source§

impl Microphone

Source

pub fn sound() -> Result<Sound, StereoKitError>

This is the sound stream of the Microphone when it is recording. This Asset is created the first time it is accessed via this property, or during Start, and will persist. It is re-used for the Microphone stream if you start/stop/switch devices. https://stereokit.net/Pages/StereoKit/Microphone/Sound.html

see also mic_get_stream

Source

pub fn is_recording() -> bool

Source

pub fn get_devices() -> Vec<String>

Constructs a list of valid Microphone devices attached to the system. These names can be passed into Start to select a specific device to record from. It’s recommended to cache this list if you’re using it frequently, as this list is constructed each time you call it.

It’s good to note that a user might occasionally plug or unplug microphone devices from their system, so this list may occasionally change. https://stereokit.net/Pages/StereoKit/Microphone/GetDevices.html

see also mic_device_count mic_device_name

Source

pub fn start(device_name: Option<String>) -> bool

This begins recording audio from the Microphone! Audio is stored in Microphone.Sound as a stream of audio. If the Microphone is already recording with a different device, it will stop the previous recording and start again with the new device.

If null is provided as the device, then they system’s default input device will be used. Some systems may not provide access to devices other than the system’s default. https://stereokit.net/Pages/StereoKit/Microphone/Start.html

  • device_name - The name of the microphone device to use, as seen in the GetDevices list. None will use the system’s default device preference.

see also mic_start Microphone::get_devices Microphone::stop

Source

pub fn stop()

Stops recording audio from the microphone. https://stereokit.net/Pages/StereoKit/Microphone/Stop.html

see also mic_stop

Trait Implementations§

Source§

impl Debug for Microphone

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Microphone

Source§

fn eq(&self, other: &Microphone) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Microphone

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more