use leptos::logging::log; use wasm_bindgen_futures::JsFuture; use web_sys::{ MediaStream, MediaStreamConstraints, MediaStreamTrack, MediaTrackConstraints, wasm_bindgen::{JsCast, JsValue}, window, }; pub async fn audio() -> MediaStream { let media_devices = window().unwrap().navigator().media_devices().unwrap(); let media_stream_constraints = MediaStreamConstraints::new(); let media_track_constraints = MediaTrackConstraints::new(); media_stream_constraints.set_audio(&JsValue::TRUE); media_track_constraints.set_echo_cancellation(&JsValue::FALSE); media_track_constraints.set_noise_suppression(&JsValue::FALSE); media_track_constraints.set_auto_gain_control(&JsValue::FALSE); let media_stream_promise = media_devices .get_user_media_with_constraints(&media_stream_constraints) .unwrap(); let media_stream = JsFuture::from(media_stream_promise) .await .unwrap() .dyn_into::() .unwrap(); let audio_stream_tracks = media_stream.get_audio_tracks(); let audio_stream_tracks = audio_stream_tracks .iter() .map(|audio_track| audio_track.dyn_into::().unwrap()) .collect::>(); log!( "{:#?}\n audio_stream_track_count = {}", audio_stream_tracks, audio_stream_tracks.len() ); let audio_stream_track = audio_stream_tracks.first().unwrap(); let audio_stream_track_apply_constraints_promise = audio_stream_track .apply_constraints_with_constraints(&media_track_constraints) .unwrap(); JsFuture::from(audio_stream_track_apply_constraints_promise) .await .unwrap(); let audio_stream = MediaStream::new().unwrap(); log!("{:#?}", audio_stream_track.get_constraints()); audio_stream.add_track(audio_stream_track); audio_stream }