fix: poor audio quality

This commit is contained in:
Ahmet Kaan Gümüş 2025-04-02 20:18:12 +03:00
parent 0f34554797
commit 9fe23a2665
2 changed files with 28 additions and 6 deletions

View file

@ -7,7 +7,7 @@ edition = "2024"
console_error_panic_hook = "0.1.7" console_error_panic_hook = "0.1.7"
leptos = { version = "0.7.8", features = ["csr"] } leptos = { version = "0.7.8", features = ["csr"] }
wasm-bindgen-futures = "0.4.50" 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] [profile]

View file

@ -8,7 +8,7 @@ use leptos::{
}; };
use wasm_bindgen_futures::JsFuture; use wasm_bindgen_futures::JsFuture;
use web_sys::{ use web_sys::{
HtmlAudioElement, MediaStream, MediaStreamConstraints, HtmlAudioElement, MediaStream, MediaStreamConstraints, MediaStreamTrack, MediaTrackConstraints,
wasm_bindgen::{JsCast, JsValue}, wasm_bindgen::{JsCast, JsValue},
window, window,
}; };
@ -43,10 +43,17 @@ pub fn app() -> impl IntoView {
async fn media() -> MediaStream { async fn media() -> MediaStream {
let media_devices = window().unwrap().navigator().media_devices().unwrap(); let media_devices = window().unwrap().navigator().media_devices().unwrap();
let constraints = MediaStreamConstraints::new(); let media_stream_constraints = MediaStreamConstraints::new();
constraints.set_audio(&JsValue::TRUE); 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 let media_stream_promise = media_devices
.get_user_media_with_constraints(&constraints) .get_user_media_with_constraints(&media_stream_constraints)
.unwrap(); .unwrap();
let media_stream = JsFuture::from(media_stream_promise) let media_stream = JsFuture::from(media_stream_promise)
.await .await
@ -54,5 +61,20 @@ async fn media() -> MediaStream {
.dyn_into::<MediaStream>() .dyn_into::<MediaStream>()
.unwrap(); .unwrap();
let audio_tracks = media_stream.get_audio_tracks(); 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::<MediaStreamTrack>().unwrap())
.collect::<Vec<_>>();
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
} }