Skip to content

Commit

Permalink
Merge pull request #292 from gouravmore/all-1.1-appliance-prod
Browse files Browse the repository at this point in the history
Issue #0000 fix: enabling audio recorder
  • Loading branch information
gouravmore authored Mar 5, 2025
2 parents c47d8fa + d47a72b commit 30badd0
Showing 1 changed file with 109 additions and 98 deletions.
207 changes: 109 additions & 98 deletions src/utils/VoiceAnalyser.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ function VoiceAnalyser(props) {
recordedAudio
? recordedAudio
: props.contentId
? `${process.env.REACT_APP_AWS_S3_BUCKET_CONTENT_URL}/all-audio-files/${lang}/${props.contentId}.wav`
: AudioPath[1][10]
? `${process.env.REACT_APP_AWS_S3_BUCKET_CONTENT_URL}/all-audio-files/${lang}/${props.contentId}.wav`
: AudioPath[1][10]
);
set_temp_audio(audio);
setPauseAudio(val);
Expand Down Expand Up @@ -190,19 +190,19 @@ function VoiceAnalyser(props) {
}
}, [recordedAudio]);

useEffect(()=>{
if(props.isNextButtonCalled){
useEffect(() => {
if (props.isNextButtonCalled) {
if (recordedAudioBase64 !== "") {
const lang = getLocalData("lang") || "ta";
fetchASROutput(lang, recordedAudioBase64);
setLoader(true)
setLoader(true);
}
}
},[props.isNextButtonCalled])
}, [props.isNextButtonCalled]);

useEffect(() => {
if (recordedAudioBase64 !== "") {
if( props.setIsNextButtonCalled){
if (props.setIsNextButtonCalled) {
props.setIsNextButtonCalled(false);
}
}
Expand Down Expand Up @@ -259,7 +259,7 @@ function VoiceAnalyser(props) {
const { originalText, contentType, contentId, currentLine } = props;
const responseStartTime = new Date().getTime();
let responseText = "";
let profanityWord = ""
let profanityWord = "";
let newThresholdPercentage = 0;
let data = {};

Expand All @@ -280,16 +280,21 @@ function VoiceAnalyser(props) {
);
data = updateLearnerData;
responseText = data.responseText;
profanityWord = await filterBadWords(data.responseText);
profanityWord = await filterBadWords(data.responseText);
if (profanityWord !== data.responseText) {
props?.setOpenMessageDialog({
message: "Please avoid using inappropriate language.",
isError: true,
});
}
}
newThresholdPercentage = data?.subsessionTargetsCount || 0;
if (contentType.toLowerCase() !== 'word') {
handlePercentageForLife(newThresholdPercentage, contentType, data?.subsessionFluency, lang);
if (contentType.toLowerCase() !== "word") {
handlePercentageForLife(
newThresholdPercentage,
contentType,
data?.subsessionFluency,
lang
);
}
}

Expand Down Expand Up @@ -360,10 +365,11 @@ function VoiceAnalyser(props) {
// TODO: Remove false when REACT_APP_AWS_S3_BUCKET_NAME and keys added
var audioFileName = "";
if (process.env.REACT_APP_CAPTURE_AUDIO === "true") {
console.log("capturing audio...")
console.log("capturing audio...");
let getContentId = currentLine;
audioFileName = `${process.env.REACT_APP_CHANNEL
}/${sessionId}-${Date.now()}-${getContentId}.wav`;
audioFileName = `${
process.env.REACT_APP_CHANNEL
}/${sessionId}-${Date.now()}-${getContentId}.wav`;

const command = new PutObjectCommand({
Bucket: process.env.REACT_APP_AWS_S3_BUCKET_NAME,
Expand All @@ -375,7 +381,9 @@ function VoiceAnalyser(props) {
});
try {
const response = await S3Client.send(command);
} catch (err) { }
} catch (err) {
console.error("Error uploading audio to S3", err);
}
}

response(
Expand All @@ -402,23 +410,23 @@ function VoiceAnalyser(props) {
);

setApiResponse(callUpdateLearner ? data.status : "success");
if(props.handleNext){
if (props.handleNext) {
props.handleNext();
if(temp_audio !== null){
if (temp_audio !== null) {
temp_audio.pause();
setPauseAudio(false);
}
}
setLoader(false);
if( props.setIsNextButtonCalled){
if (props.setIsNextButtonCalled) {
props.setIsNextButtonCalled(false);
}
} catch (error) {
setLoader(false);
if(props.handleNext){
if (props.handleNext) {
props.handleNext();
}
if( props.setIsNextButtonCalled){
if (props.setIsNextButtonCalled) {
props.setIsNextButtonCalled(false);
}
setRecordedAudioBase64("");
Expand All @@ -427,92 +435,95 @@ function VoiceAnalyser(props) {
}
};

const handlePercentageForLife = (percentage, contentType, fluencyScore, language) => {
const handlePercentageForLife = (
percentage,
contentType,
fluencyScore,
language
) => {
try {
if (livesData) {
let totalSyllables = livesData.totalTargets;
if (language === "en") {
if (totalSyllables > 50) {
totalSyllables = 50;
}
if (livesData) {
let totalSyllables = livesData.totalTargets;
if (language === "en") {
if (totalSyllables > 50) {
totalSyllables = 50;
}
// Calculate the current percentage based on total targets.
percentage = Math.round((percentage / totalSyllables) * 100);

// Define the total number of lives and adjust the threshold based on syllables.
const totalLives = 5;
let threshold = 30; // Default threshold

// Adjust the threshold based on total syllables.
if (totalSyllables <= 100) threshold = 30;
else if (totalSyllables > 100 && totalSyllables <= 150) threshold = 25;
else if (totalSyllables > 150 && totalSyllables <= 175) threshold = 20;
else if (totalSyllables > 175 && totalSyllables <= 250) threshold = 15;
else if (totalSyllables > 250 && totalSyllables <= 500) threshold = 10;
else if (totalSyllables > 500) threshold = 5;

// Calculate lives lost based on percentage.
let livesLost = Math.floor(percentage / (threshold / totalLives));

// Check fluency criteria and adjust lives lost accordingly.
let meetsFluencyCriteria;
switch (contentType.toLowerCase()) {
case 'word':
meetsFluencyCriteria = fluencyScore < 2;
break;
case 'sentence':
meetsFluencyCriteria = fluencyScore < 6;
break;
case 'paragraph':
meetsFluencyCriteria = fluencyScore < 10;
break;
default:
meetsFluencyCriteria = true; // Assume criteria met if not specified.
}
}
// Calculate the current percentage based on total targets.
percentage = Math.round((percentage / totalSyllables) * 100);

// Define the total number of lives and adjust the threshold based on syllables.
const totalLives = 5;
let threshold = 30; // Default threshold

// Adjust the threshold based on total syllables.
if (totalSyllables <= 100) threshold = 30;
else if (totalSyllables > 100 && totalSyllables <= 150) threshold = 25;
else if (totalSyllables > 150 && totalSyllables <= 175) threshold = 20;
else if (totalSyllables > 175 && totalSyllables <= 250) threshold = 15;
else if (totalSyllables > 250 && totalSyllables <= 500) threshold = 10;
else if (totalSyllables > 500) threshold = 5;

// Calculate lives lost based on percentage.
let livesLost = Math.floor(percentage / (threshold / totalLives));

// Check fluency criteria and adjust lives lost accordingly.
let meetsFluencyCriteria;
switch (contentType.toLowerCase()) {
case "word":
meetsFluencyCriteria = fluencyScore < 2;
break;
case "sentence":
meetsFluencyCriteria = fluencyScore < 6;
break;
case "paragraph":
meetsFluencyCriteria = fluencyScore < 10;
break;
default:
meetsFluencyCriteria = true; // Assume criteria met if not specified.
}

// If fluency criteria are not met, reduce an additional life, but ensure it doesn't exceed the total lives.
if (!meetsFluencyCriteria && livesLost < totalLives) {
livesLost = Math.min(livesLost + 1, totalLives);
}
// If fluency criteria are not met, reduce an additional life, but ensure it doesn't exceed the total lives.
if (!meetsFluencyCriteria && livesLost < totalLives) {
livesLost = Math.min(livesLost + 1, totalLives);
}

// Determine the number of red and black lives to show.
const redLivesToShow = totalLives - livesLost;
let blackLivesToShow = 5;
if(livesLost <= 5){
blackLivesToShow = livesLost;
}
// Determine the number of red and black lives to show.
const redLivesToShow = totalLives - livesLost;
let blackLivesToShow = 5;
if (livesLost <= 5) {
blackLivesToShow = livesLost;
}

// Prepare the new lives data.
let newLivesData = {
...livesData,
blackLivesToShow,
redLivesToShow,
meetsFluencyCriteria: meetsFluencyCriteria,
};

// Play audio based on the change in lives.
const HeartGaain =
livesData.redLivesToShow === undefined
? 5 - newLivesData.redLivesToShow
: livesData.redLivesToShow - newLivesData.redLivesToShow;
let isLiveLost;
if (HeartGaain > 0) {
isLiveLost = true;
} else {
isLiveLost = false;
}
const audio = new Audio(isLiveLost ? livesCut : livesAdd);
audio.play();
// Prepare the new lives data.
let newLivesData = {
...livesData,
blackLivesToShow,
redLivesToShow,
meetsFluencyCriteria: meetsFluencyCriteria,
};

// Update the state or data structure with the new lives data.
setLivesData(newLivesData);
// Play audio based on the change in lives.
const HeartGaain =
livesData.redLivesToShow === undefined
? 5 - newLivesData.redLivesToShow
: livesData.redLivesToShow - newLivesData.redLivesToShow;
let isLiveLost;
if (HeartGaain > 0) {
isLiveLost = true;
} else {
isLiveLost = false;
}
const audio = new Audio(isLiveLost ? livesCut : livesAdd);
audio.play();

// Update the state or data structure with the new lives data.
setLivesData(newLivesData);
}
} catch (e) {
console.log("error", e);
console.log("error", e);
}
};


};

// const getpermision = () => {
// navigator.getUserMedia =
Expand Down

0 comments on commit 30badd0

Please sign in to comment.