From 17240c5a3b76ab618c4f22eda85593b2f1bc8899 Mon Sep 17 00:00:00 2001 From: Ajinkya Pande Date: Mon, 6 Jan 2025 16:33:47 +0530 Subject: [PATCH 1/2] Issueid #232843 fix: Audio sync issue for low network - Showcase [live lost and earn], fill in the blanks and jumble the words mechanism --- src/components/Practice/Mechanics3.jsx | 8 ++++++-- src/components/Practice/Mechanics4.jsx | 11 ++++++++--- src/utils/VoiceAnalyser.js | 5 ++++- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/components/Practice/Mechanics3.jsx b/src/components/Practice/Mechanics3.jsx index 3a560810..6bbc4b3a 100644 --- a/src/components/Practice/Mechanics3.jsx +++ b/src/components/Practice/Mechanics3.jsx @@ -18,6 +18,7 @@ import VoiceAnalyser from "../../utils/VoiceAnalyser"; import { Modal } from "@mui/material"; import ZoomInIcon from "@mui/icons-material/ZoomIn"; import CloseIcon from "@mui/icons-material/Close"; +import usePreloadAudio from "../../hooks/usePreloadAudio"; // TODO: update it as per File name OR update file name as per export variable name const Mechanics2 = ({ @@ -64,6 +65,9 @@ const Mechanics2 = ({ const [shake, setShake] = useState(false); const [wordToFill, setWordToFill] = useState(""); const [disabledWords, setDisabledWords] = useState(false); + const correctSoundAudio = usePreloadAudio(correctSound); + const wrongSoundAudio = usePreloadAudio(wrongSound); + const removeSoundAudio = usePreloadAudio(removeSound); const [answer, setAnswer] = useState({ text: "", audio_url: "", @@ -85,7 +89,7 @@ const Mechanics2 = ({ setAnswer(word); const isSoundCorrect = word.isAns; - let audio = new Audio(isSoundCorrect ? correctSound : wrongSound); + let audio = new Audio(isSoundCorrect ? correctSoundAudio : wrongSoundAudio); if (!isSoundCorrect) { setEnableNext(false); } @@ -97,7 +101,7 @@ const Mechanics2 = ({ }; const handleRemoveWord = () => { - let audio = new Audio(removeSound); + let audio = new Audio(removeSoundAudio); setAnswer({ text: "", audio_url: "", image_url: "", isAns: false }); audio.play(); setEnableNext(false); diff --git a/src/components/Practice/Mechanics4.jsx b/src/components/Practice/Mechanics4.jsx index 5b22c6c0..8b4fd785 100644 --- a/src/components/Practice/Mechanics4.jsx +++ b/src/components/Practice/Mechanics4.jsx @@ -13,6 +13,7 @@ import wrongSound from "../../assets/audio/wrong.wav"; import addSound from "../../assets/audio/add.mp3"; import removeSound from "../../assets/audio/remove.wav"; import { splitGraphemes } from "split-graphemes"; +import usePreloadAudio from "../../hooks/usePreloadAudio"; const Mechanics4 = ({ page, @@ -51,6 +52,10 @@ const Mechanics4 = ({ const [words, setWords] = useState( type === "word" ? [] : ["Friend", "She is", "My"] ); + const correctSoundAudio = usePreloadAudio(correctSound); + const wrongSoundAudio = usePreloadAudio(wrongSound); + const addSoundAudio = usePreloadAudio(addSound); + const removeSoundAudio = usePreloadAudio(removeSound); const [wordsAfterSplit, setWordsAfterSplit] = useState([]); useEffect(() => { @@ -114,7 +119,7 @@ const Mechanics4 = ({ }, 3000); // audioPlay[word](); if (selectedWords?.length + 1 !== wordsAfterSplit?.length || isSelected) { - let audio = new Audio(isSelected ? removeSound : addSound); + let audio = new Audio(isSelected ? removeSoundAudio : addSoundAudio); audio.play(); setEnableNext(false); } @@ -134,8 +139,8 @@ const Mechanics4 = ({ if (selectedWords?.length + 1 === wordsAfterSplit?.length) { let audio = new Audio( [...selectedWords, word]?.join(" ") === parentWords - ? correctSound - : wrongSound + ? correctSoundAudio + : wrongSoundAudio ); audio.play(); } diff --git a/src/utils/VoiceAnalyser.js b/src/utils/VoiceAnalyser.js index e575bb54..3639cec2 100644 --- a/src/utils/VoiceAnalyser.js +++ b/src/utils/VoiceAnalyser.js @@ -33,6 +33,7 @@ import config from "./urlConstants.json"; import { filterBadWords } from "./Badwords"; import S3Client from "../config/awsS3"; import { PutObjectCommand } from "@aws-sdk/client-s3"; +import usePreloadAudio from "../hooks/usePreloadAudio"; /* eslint-disable */ const AudioPath = { @@ -77,6 +78,8 @@ function VoiceAnalyser(props) { process.env.REACT_APP_IS_AUDIOPREPROCESSING === "true" ); const [isMatching, setIsMatching] = useState(false); + const livesAddAudio = usePreloadAudio(livesAdd); + const livesCutAudio = usePreloadAudio(livesCut); //console.log('audio', recordedAudio, isMatching); @@ -628,7 +631,7 @@ function VoiceAnalyser(props) { } else { isLiveLost = false; } - const audio = new Audio(isLiveLost ? livesCut : livesAdd); + const audio = new Audio(isLiveLost ? livesCutAudio : livesAddAudio); audio.play(); // Update the state or data structure with the new lives data. From 64624c473de7830641fece03c2f724b0c05bfcef Mon Sep 17 00:00:00 2001 From: Ajinkya Pande Date: Mon, 6 Jan 2025 16:54:35 +0530 Subject: [PATCH 2/2] Issueid #232821 fix: Unexpected API Call: /pointer/getPoints/4347715229 Triggered When Not Required --- src/components/Assesment/Assesment.jsx | 13 +++++++------ src/components/AssesmentEnd/AssesmentEnd.jsx | 10 ++++++---- src/views/Practice/Practice.jsx | 12 +++++++----- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/components/Assesment/Assesment.jsx b/src/components/Assesment/Assesment.jsx index 36a7598f..7289a594 100644 --- a/src/components/Assesment/Assesment.jsx +++ b/src/components/Assesment/Assesment.jsx @@ -598,11 +598,12 @@ const Assesment = ({ discoverStart }) => { } localStorage.setItem("lang", lang || "ta"); - const getPointersDetails = await axios.get( - `${process.env.REACT_APP_LEARNER_AI_ORCHESTRATION_HOST}/${config.URLS.GET_POINTER}/${usernameDetails?.data?.result?.virtualID}/${session_id}?language=${lang}` - ); - setPoints(getPointersDetails?.data?.result?.totalLanguagePoints || 0); - + if (process.env.REACT_APP_IS_APP_IFRAME !== "true") { + const getPointersDetails = await axios.get( + `${process.env.REACT_APP_LEARNER_AI_ORCHESTRATION_HOST}/${config.URLS.GET_POINTER}/${usernameDetails?.data?.result?.virtualID}/${session_id}?language=${lang}` + ); + setPoints(getPointersDetails?.data?.result?.totalLanguagePoints || 0); + } dispatch(setVirtualId(usernameDetails?.data?.result?.virtualID)); })(); } else { @@ -635,7 +636,7 @@ const Assesment = ({ discoverStart }) => { localStorage.setItem("sessionId", sessionId); } - if (virtualId) { + if (process.env.REACT_APP_IS_APP_IFRAME !== "true" && virtualId) { const getPointersDetails = await axios.get( `${process.env.REACT_APP_LEARNER_AI_ORCHESTRATION_HOST}/${config.URLS.GET_POINTER}/${virtualId}/${sessionId}?language=${lang}` ); diff --git a/src/components/AssesmentEnd/AssesmentEnd.jsx b/src/components/AssesmentEnd/AssesmentEnd.jsx index e88504dd..72522d54 100644 --- a/src/components/AssesmentEnd/AssesmentEnd.jsx +++ b/src/components/AssesmentEnd/AssesmentEnd.jsx @@ -48,10 +48,12 @@ const AssesmentEnd = () => { sessionId = uniqueId(); localStorage.setItem("sessionId", sessionId); } - const getPointersDetails = await axios.get( - `${process.env.REACT_APP_LEARNER_AI_ORCHESTRATION_HOST}/${config.URLS.GET_POINTER}/${virtualId}/${sessionId}?language=${lang}` - ); - setPoints(getPointersDetails?.data?.result?.totalLanguagePoints || 0); + if (process.env.REACT_APP_IS_APP_IFRAME !== "true") { + const getPointersDetails = await axios.get( + `${process.env.REACT_APP_LEARNER_AI_ORCHESTRATION_HOST}/${config.URLS.GET_POINTER}/${virtualId}/${sessionId}?language=${lang}` + ); + setPoints(getPointersDetails?.data?.result?.totalLanguagePoints || 0); + } })(); setTimeout(() => { setShake(false); diff --git a/src/views/Practice/Practice.jsx b/src/views/Practice/Practice.jsx index e796c680..6ad6ee70 100644 --- a/src/views/Practice/Practice.jsx +++ b/src/views/Practice/Practice.jsx @@ -452,12 +452,14 @@ const Practice = () => { // TODO: Handle Error for lessons - no lesson progress - starting point should be P1 - const getPointersDetails = await axios.get( - `${process.env.REACT_APP_LEARNER_AI_ORCHESTRATION_HOST}/${config.URLS.GET_POINTER}/${virtualId}/${sessionId}?language=${lang}` - ); + if (process.env.REACT_APP_IS_APP_IFRAME !== "true") { + const getPointersDetails = await axios.get( + `${process.env.REACT_APP_LEARNER_AI_ORCHESTRATION_HOST}/${config.URLS.GET_POINTER}/${virtualId}/${sessionId}?language=${lang}` + ); - // TODO: Just Opss icon - we are trying to fetch the score for you - setPoints(getPointersDetails?.data?.result?.totalLanguagePoints || 0); + // TODO: Just Opss icon - we are trying to fetch the score for you + setPoints(getPointersDetails?.data?.result?.totalLanguagePoints || 0); + } let userState = Number.isInteger( Number(resLessons.data?.result?.result?.lesson)