206 lines
7.1 KiB
TypeScript
206 lines
7.1 KiB
TypeScript
import { useNavigate } from 'react-router-dom';
|
|
import {
|
|
Typography,
|
|
Container,
|
|
Button,
|
|
Paper,
|
|
Box,
|
|
Card,
|
|
CardContent,
|
|
Grid,
|
|
useTheme,
|
|
Slide,
|
|
Zoom,
|
|
} from '@mui/material';
|
|
import {
|
|
CloudUpload as CloudUploadIcon,
|
|
PlayArrow as PlayArrowIcon,
|
|
Check as CheckIcon,
|
|
GraphicEq as GraphicEqIcon,
|
|
NoiseAware as NoiseAwareIcon,
|
|
MusicNote as MusicNoteIcon,
|
|
} from '@mui/icons-material';
|
|
|
|
function LandingPage() {
|
|
const navigate = useNavigate();
|
|
const theme = useTheme();
|
|
const showContent = true;
|
|
|
|
return (
|
|
<Box
|
|
sx={{
|
|
minHeight: 'calc(100vh - 64px)',
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
backgroundImage: 'linear-gradient(to bottom right, #3f51b5, #9c27b0)',
|
|
padding: theme.spacing(3),
|
|
}}
|
|
>
|
|
<Container maxWidth="md">
|
|
<Slide direction="down" in={showContent} mountOnEnter unmountOnExit>
|
|
<Paper
|
|
elevation={3}
|
|
sx={{
|
|
padding: theme.spacing(6),
|
|
textAlign: 'center',
|
|
background: 'rgba(255, 255, 255, 0.9)',
|
|
}}
|
|
>
|
|
<Typography variant="h3" gutterBottom color="primary">
|
|
Welcome to FreqSplit
|
|
</Typography>
|
|
<Typography variant="h5" paragraph color="textSecondary">
|
|
Upload, preview, and process your audio files with ease
|
|
</Typography>
|
|
<Box sx={{ mt: 4 }}>
|
|
<Button
|
|
variant="contained"
|
|
color="primary"
|
|
size="large"
|
|
startIcon={<CloudUploadIcon />}
|
|
onClick={() => navigate('/upload')}
|
|
sx={{ mr: 2 }}
|
|
>
|
|
Get Started
|
|
</Button>
|
|
</Box>
|
|
</Paper>
|
|
</Slide>
|
|
|
|
<Grid container spacing={4} sx={{ mt: 4, justifyContent: 'center' }}>
|
|
<Grid item xs={12} md={4}>
|
|
<Zoom in={showContent} style={{ transitionDelay: '100ms' }}>
|
|
<Card
|
|
sx={{
|
|
height: '100%',
|
|
transition: 'transform 0.3s ease-in-out',
|
|
'&:hover': { transform: 'scale(1.05)' },
|
|
}}
|
|
>
|
|
<CardContent sx={{ textAlign: 'center' }}>
|
|
<CloudUploadIcon color="primary" sx={{ fontSize: 60, mb: 2 }} />
|
|
<Typography variant="h5" gutterBottom>
|
|
Upload or Record
|
|
</Typography>
|
|
<Typography variant="body1" color="textSecondary">
|
|
Drag and drop your media files or record directly for quick processing.
|
|
</Typography>
|
|
</CardContent>
|
|
</Card>
|
|
</Zoom>
|
|
</Grid>
|
|
<Grid item xs={12} md={4}>
|
|
<Zoom in={showContent} style={{ transitionDelay: '200ms' }}>
|
|
<Card
|
|
sx={{
|
|
height: '100%',
|
|
transition: 'transform 0.3s ease-in-out',
|
|
'&:hover': { transform: 'scale(1.05)' },
|
|
}}
|
|
>
|
|
<CardContent sx={{ textAlign: 'center' }}>
|
|
<PlayArrowIcon color="primary" sx={{ fontSize: 60, mb: 2 }} />
|
|
<Typography variant="h5" gutterBottom>
|
|
Preview Media
|
|
</Typography>
|
|
<Typography variant="body1" color="textSecondary">
|
|
Review your files before processing.
|
|
</Typography>
|
|
</CardContent>
|
|
</Card>
|
|
</Zoom>
|
|
</Grid>
|
|
<Grid item xs={12} md={4}>
|
|
<Zoom in={showContent} style={{ transitionDelay: '300ms' }}>
|
|
<Card
|
|
sx={{
|
|
height: '100%',
|
|
transition: 'transform 0.3s ease-in-out',
|
|
'&:hover': { transform: 'scale(1.05)' },
|
|
}}
|
|
>
|
|
<CardContent sx={{ textAlign: 'center' }}>
|
|
<CheckIcon color="primary" sx={{ fontSize: 60, mb: 2 }} />
|
|
<Typography variant="h5" gutterBottom>
|
|
View Results
|
|
</Typography>
|
|
<Typography variant="body1" color="textSecondary">
|
|
Download and share your processed media.
|
|
</Typography>
|
|
</CardContent>
|
|
</Card>
|
|
</Zoom>
|
|
</Grid>
|
|
|
|
<Grid item xs={12} md={4}>
|
|
<Zoom in={showContent} style={{ transitionDelay: '400ms' }}>
|
|
<Card
|
|
sx={{
|
|
height: '100%',
|
|
transition: 'transform 0.3s ease-in-out',
|
|
'&:hover': { transform: 'scale(1.05)' },
|
|
}}
|
|
>
|
|
<CardContent sx={{ textAlign: 'center' }}>
|
|
<GraphicEqIcon color="primary" sx={{ fontSize: 60, mb: 2 }} />
|
|
<Typography variant="h5" gutterBottom>
|
|
Audio Source Separation (Demucs)
|
|
</Typography>
|
|
<Typography variant="body1" color="textSecondary">
|
|
Separate audio sources with state-of-the-art Demucs.
|
|
</Typography>
|
|
</CardContent>
|
|
</Card>
|
|
</Zoom>
|
|
</Grid>
|
|
<Grid item xs={12} md={4}>
|
|
<Zoom in={showContent} style={{ transitionDelay: '500ms' }}>
|
|
<Card
|
|
sx={{
|
|
height: '100%',
|
|
transition: 'transform 0.3s ease-in-out',
|
|
'&:hover': { transform: 'scale(1.05)' },
|
|
}}
|
|
>
|
|
<CardContent sx={{ textAlign: 'center' }}>
|
|
<NoiseAwareIcon color="primary" sx={{ fontSize: 60, mb: 2 }} />
|
|
<Typography variant="h5" gutterBottom>
|
|
Noise Reduction (DeepFilterNet)
|
|
</Typography>
|
|
<Typography variant="body1" color="textSecondary">
|
|
Reduce noise effectively using DeepFilterNet.
|
|
</Typography>
|
|
</CardContent>
|
|
</Card>
|
|
</Zoom>
|
|
</Grid>
|
|
<Grid item xs={12} md={4}>
|
|
<Zoom in={showContent} style={{ transitionDelay: '600ms' }}>
|
|
<Card
|
|
sx={{
|
|
height: '100%',
|
|
transition: 'transform 0.3s ease-in-out',
|
|
'&:hover': { transform: 'scale(1.05)' },
|
|
}}
|
|
>
|
|
<CardContent sx={{ textAlign: 'center' }}>
|
|
<MusicNoteIcon color="primary" sx={{ fontSize: 60, mb: 2 }} />
|
|
<Typography variant="h5" gutterBottom>
|
|
Audio Processing (Librosa)
|
|
</Typography>
|
|
<Typography variant="body1" color="textSecondary">
|
|
Advanced audio processing and manipulation with Librosa.
|
|
</Typography>
|
|
</CardContent>
|
|
</Card>
|
|
</Zoom>
|
|
</Grid>
|
|
</Grid>
|
|
</Container>
|
|
</Box>
|
|
);
|
|
}
|
|
|
|
export default LandingPage; |