add preview for noisereduced file

This commit is contained in:
Joel Mathew Thomas
2025-03-18 15:59:57 +05:30
parent 2ba08d7d92
commit 7222a8198e
3 changed files with 37 additions and 8 deletions
+28 -4
View File
@@ -8,7 +8,7 @@ import JSZip from "jszip";
function ProcessingPage() { function ProcessingPage() {
const navigate = useNavigate(); const navigate = useNavigate();
const { mediaFile, response, setExtractedFiles } = useMediaContext(); const { mediaFile, response, setExtractedFiles, setDownloadedFileURL } = useMediaContext();
const [progress, setProgress] = useState(0); const [progress, setProgress] = useState(0);
const [statusText, setStatusText] = useState("Analyzing media..."); const [statusText, setStatusText] = useState("Analyzing media...");
@@ -40,7 +40,7 @@ function ProcessingPage() {
} }
}; };
const fetchDownload = async () => { const fetchZipDownload = async () => {
try { try {
setStatusText("Fetching Results..."); setStatusText("Fetching Results...");
@@ -59,6 +59,30 @@ function ProcessingPage() {
} }
}; };
const fetchDownload = async () => {
try {
setStatusText("Fetching Results...");
const res = await axios.get(`/api/download?file_uuid=${response.file_uuid}`, {
responseType: "blob",
});
if (res.status === 200) {
console.log("Download successful");
const blob = new Blob([res.data], { type: "audio/wav" });
const fileURL = URL.createObjectURL(blob);
setDownloadedFileURL( fileURL );
setProgress(100);
} else {
console.log("Failed to download the file");
}
} catch (error) {
console.error("Error fetching download:", error);
}
};
const handleDownload = async (downloadData: Blob) => { const handleDownload = async (downloadData: Blob) => {
const zipBlob = new Blob([downloadData], { type: "application/zip" }); const zipBlob = new Blob([downloadData], { type: "application/zip" });
@@ -89,10 +113,10 @@ function ProcessingPage() {
processStep("/api/trim", () => { processStep("/api/trim", () => {
if (response.audio_class === "Music") { if (response.audio_class === "Music") {
processStep("/api/resample", () => { processStep("/api/resample", () => {
processStep("/api/separate", () => fetchDownload(), 90, "Separating music into vocals, bass, drums and other..."); processStep("/api/separate", () => fetchZipDownload(), 90, "Separating music into vocals, bass, drums and other...");
}, 75, "Resampling audio to 44100Hz...", { sr: "44100" }); }, 75, "Resampling audio to 44100Hz...", { sr: "44100" });
} else { } else {
processStep("/api/noisereduce", () => setProgress(100), 100, "Reducing background noise from the audio..."); processStep("/api/noisereduce", () => fetchDownload(), 90, "Reducing background noise from the audio...");
} }
}, 50, "Trimming silent parts from the audio..."); }, 50, "Trimming silent parts from the audio...");
}, 25, "Normalizing audio frequency..."); }, 25, "Normalizing audio frequency...");
+5 -2
View File
@@ -21,7 +21,7 @@ import { useMediaContext } from '../contexts/MediaContext';
function ResultsPage() { function ResultsPage() {
const navigate = useNavigate(); const navigate = useNavigate();
const { mediaFile, response, extractedFiles } = useMediaContext(); const { mediaFile, response, extractedFiles, downloadedFileURL } = useMediaContext();
console.log("Extracted files are", extractedFiles); console.log("Extracted files are", extractedFiles);
// const [isPlaying, setIsPlaying] = useState(false); // const [isPlaying, setIsPlaying] = useState(false);
const audioRefs = [useRef(null), useRef(null), useRef(null),useRef(null)]; const audioRefs = [useRef(null), useRef(null), useRef(null),useRef(null)];
@@ -104,9 +104,12 @@ function ResultsPage() {
)) ))
) : ( ) : (
<Box sx={{ width: '100%', mt: 2 }}> <Box sx={{ width: '100%', mt: 2 }}>
<Typography variant="body2" color="textSecondary" sx={{ mb: 1 }}>
{mediaFile?.name}
</Typography>
<audio <audio
ref={audioRefs[0]} ref={audioRefs[0]}
src={mediaFile.url} src={downloadedFileURL}
style={{ width: '100%' }} style={{ width: '100%' }}
controls controls
/> />
+4 -2
View File
@@ -7,6 +7,8 @@ interface MediaContextType {
setResponse: (response: { file_uuid: string; sr: number; audio_class: string }) => void; setResponse: (response: { file_uuid: string; sr: number; audio_class: string }) => void;
extractedFiles: { name: string; url: string }[]; extractedFiles: { name: string; url: string }[];
setExtractedFiles: (files: {name: string; url: string }[]) => void; setExtractedFiles: (files: {name: string; url: string }[]) => void;
downloadedFileURL: string;
setDownloadedFileURL: ( file: string) => void;
} }
@@ -19,12 +21,12 @@ export const MediaProvider: React.FC<{ children: React.ReactNode }> = ({ childre
file_uuid: "", file_uuid: "",
sr: 0, sr: 0,
}); });
const [extractedFiles, setExtractedFiles] = useState<MediaContextType["extractedFiles"]>([]); const [extractedFiles, setExtractedFiles] = useState<MediaContextType["extractedFiles"]>([]);
const [downloadedFileURL, setDownloadedFileURL] = useState<MediaContextType["downloadedFileURL"]>("");
return ( return (
<MediaContext.Provider value={{ mediaFile, setMediaFile, response, setResponse, extractedFiles, setExtractedFiles }}> <MediaContext.Provider value={{ mediaFile, setMediaFile, response, setResponse, extractedFiles, setExtractedFiles, downloadedFileURL, setDownloadedFileURL }}>
{children} {children}
</MediaContext.Provider> </MediaContext.Provider>
); );