preview spectrograms for non-music files
This commit is contained in:
@@ -8,7 +8,7 @@ import JSZip from "jszip";
|
|||||||
|
|
||||||
function ProcessingPage() {
|
function ProcessingPage() {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { mediaFile, response, setExtractedFiles, setDownloadedFileURL } = useMediaContext();
|
const { mediaFile, response, setExtractedFiles, setDownloadedFileURL, setDownloadedFileSpectrogram } = useMediaContext();
|
||||||
const [progress, setProgress] = useState(0);
|
const [progress, setProgress] = useState(0);
|
||||||
const [statusText, setStatusText] = useState("Analyzing media...");
|
const [statusText, setStatusText] = useState("Analyzing media...");
|
||||||
|
|
||||||
@@ -73,7 +73,36 @@ function ProcessingPage() {
|
|||||||
const fileURL = URL.createObjectURL(blob);
|
const fileURL = URL.createObjectURL(blob);
|
||||||
|
|
||||||
setDownloadedFileURL( fileURL );
|
setDownloadedFileURL( fileURL );
|
||||||
setProgress(100);
|
setProgress(90);
|
||||||
|
|
||||||
|
// Get spectrogram
|
||||||
|
setProgress(95);
|
||||||
|
setStatusText("Calculating Spectrogram");
|
||||||
|
|
||||||
|
const formData = new FormData();
|
||||||
|
formData.append("file_uuid", response.file_uuid);
|
||||||
|
if (mediaFile?.name) {
|
||||||
|
formData.append("file_name", mediaFile?.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
const startTime = Date.now();
|
||||||
|
const resp = await axios.post<{
|
||||||
|
Status: String;
|
||||||
|
spectrogram: string;
|
||||||
|
spec_sr: number;
|
||||||
|
}>("/api/spectrogram", formData, {
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "multipart/form-data",
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if (resp.status === 200 && resp.data) {
|
||||||
|
const elapsedTime = Date.now() - startTime;
|
||||||
|
if(elapsedTime < 5000) await delay(5000 - elapsedTime);
|
||||||
|
setDownloadedFileSpectrogram({spectrogram: resp.data.spectrogram, spec_sr: resp.data.spec_sr})
|
||||||
|
setProgress(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
console.log("Failed to download the file");
|
console.log("Failed to download the file");
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { useEffect, useRef } from 'react';
|
import { useEffect } from 'react';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
//import axios from 'axios';
|
//import axios from 'axios';
|
||||||
import {
|
import {
|
||||||
@@ -23,10 +23,9 @@ import SpectrogramPlayer from "react-audio-spectrogram-player"
|
|||||||
|
|
||||||
function ResultsPage() {
|
function ResultsPage() {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const { mediaFile, response, extractedFiles, downloadedFileURL } = useMediaContext();
|
const { mediaFile, response, extractedFiles, downloadedFileURL, downloadedFileSpectrogram } = 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 audioClass = response.audio_class
|
const audioClass = response.audio_class
|
||||||
const isVideo = mediaFile?.type.includes('video');
|
const isVideo = mediaFile?.type.includes('video');
|
||||||
|
|
||||||
@@ -147,11 +146,14 @@ function ResultsPage() {
|
|||||||
<Typography variant="body2" color="textSecondary" sx={{ mb: 1 }}>
|
<Typography variant="body2" color="textSecondary" sx={{ mb: 1 }}>
|
||||||
{mediaFile?.name}
|
{mediaFile?.name}
|
||||||
</Typography>
|
</Typography>
|
||||||
<audio
|
<SpectrogramPlayer
|
||||||
ref={audioRefs[0]}
|
|
||||||
src={downloadedFileURL}
|
src={downloadedFileURL}
|
||||||
style={{ width: '100%', borderRadius: '8px', boxShadow: '0 2px 10px rgba(0,0,0,0.2)' }}
|
sxx={JSON.parse(downloadedFileSpectrogram.spectrogram)}
|
||||||
controls
|
SampleRate={downloadedFileSpectrogram.spec_sr}
|
||||||
|
colormap={'magma'}
|
||||||
|
settings={true}
|
||||||
|
transparent={false}
|
||||||
|
navigator={true}
|
||||||
/>
|
/>
|
||||||
</Box>
|
</Box>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ interface MediaContextType {
|
|||||||
setExtractedFiles: (files: {name: string; url: string, spectrogram: string, spec_sr: number}[]) => void;
|
setExtractedFiles: (files: {name: string; url: string, spectrogram: string, spec_sr: number}[]) => void;
|
||||||
downloadedFileURL: string;
|
downloadedFileURL: string;
|
||||||
setDownloadedFileURL: ( file: string) => void;
|
setDownloadedFileURL: ( file: string) => void;
|
||||||
|
downloadedFileSpectrogram: { spectrogram: string, spec_sr: number};
|
||||||
|
setDownloadedFileSpectrogram: (spectrogram: {spectrogram: string, spec_sr: number}) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -25,10 +27,14 @@ export const MediaProvider: React.FC<{ children: React.ReactNode }> = ({ childre
|
|||||||
});
|
});
|
||||||
const [extractedFiles, setExtractedFiles] = useState<MediaContextType["extractedFiles"]>([]);
|
const [extractedFiles, setExtractedFiles] = useState<MediaContextType["extractedFiles"]>([]);
|
||||||
const [downloadedFileURL, setDownloadedFileURL] = useState<MediaContextType["downloadedFileURL"]>("");
|
const [downloadedFileURL, setDownloadedFileURL] = useState<MediaContextType["downloadedFileURL"]>("");
|
||||||
|
const [downloadedFileSpectrogram, setDownloadedFileSpectrogram] = useState<MediaContextType["downloadedFileSpectrogram"]>({
|
||||||
|
spectrogram: "",
|
||||||
|
spec_sr: 0
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<MediaContext.Provider value={{ mediaFile, setMediaFile, response, setResponse, extractedFiles, setExtractedFiles, downloadedFileURL, setDownloadedFileURL }}>
|
<MediaContext.Provider value={{ mediaFile, setMediaFile, response, setResponse, extractedFiles, setExtractedFiles, downloadedFileURL, setDownloadedFileURL, downloadedFileSpectrogram, setDownloadedFileSpectrogram }}>
|
||||||
{children}
|
{children}
|
||||||
</MediaContext.Provider>
|
</MediaContext.Provider>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user