diff --git a/Cargo.toml b/Cargo.toml index 7279077..e85a801 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ edition = "2024" console_error_panic_hook = "0.1.7" leptos = { version = "0.7.8", features = ["csr"] } wasm-bindgen-futures = "0.4.50" -web-sys = { version = "0.3.77", features = ["AudioBuffer", "AudioBufferSourceNode", "AudioContext", "HtmlAudioElement","MediaDevices", "MediaStream", "MediaStreamConstraints", "MediaStreamTrack", "Navigator", "Window"] } +web-sys = { version = "0.3.77", features = ["AudioBuffer", "AudioBufferSourceNode", "AudioContext", "HtmlAudioElement","MediaDevices", "MediaStream", "MediaStreamConstraints", "MediaStreamTrack", "MediaTrackConstraints", "MediaTrackConstraintSet", "Navigator", "Window"] } [profile] diff --git a/src/gui.rs b/src/gui.rs index a75c8a8..e2da4f6 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -8,7 +8,7 @@ use leptos::{ }; use wasm_bindgen_futures::JsFuture; use web_sys::{ - HtmlAudioElement, MediaStream, MediaStreamConstraints, + HtmlAudioElement, MediaStream, MediaStreamConstraints, MediaStreamTrack, MediaTrackConstraints, wasm_bindgen::{JsCast, JsValue}, window, }; @@ -43,10 +43,17 @@ pub fn app() -> impl IntoView { async fn media() -> MediaStream { let media_devices = window().unwrap().navigator().media_devices().unwrap(); - let constraints = MediaStreamConstraints::new(); - constraints.set_audio(&JsValue::TRUE); + 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(&constraints) + .get_user_media_with_constraints(&media_stream_constraints) .unwrap(); let media_stream = JsFuture::from(media_stream_promise) .await @@ -54,5 +61,20 @@ async fn media() -> MediaStream { .dyn_into::() .unwrap(); let audio_tracks = media_stream.get_audio_tracks(); - MediaStream::new_with_tracks(&audio_tracks).unwrap() + let audio_tracks = audio_tracks + .iter() + .map(|audio_track| audio_track.dyn_into::().unwrap()) + .collect::>(); + log!("{:#?}, len = {}", audio_tracks, audio_tracks.len()); + let audio_track = audio_tracks.first().unwrap(); + let media_track_apply_constraints_promise = audio_track + .apply_constraints_with_constraints(&media_track_constraints) + .unwrap(); + JsFuture::from(media_track_apply_constraints_promise) + .await + .unwrap(); + let media_stream = MediaStream::new().unwrap(); + log!("{:#?}", audio_track.get_constraints()); + media_stream.add_track(audio_track); + media_stream }