anycoder-29202ac1 / index.html
GPUhead's picture
Upload folder using huggingface_hub
aa229e3 verified
Raw History Blame Contribute Delete
23.4 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SoundLab - Transform Your Music</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
:root {
--primary: #8a2be2;
--secondary: #ff6b6b;
--accent: #00d4ff;
--dark: #121212;
--light: #f8f9fa;
--gray: #2d2d2d;
--transition: all 0.3s ease;
}
body {
background: linear-gradient(135deg, var(--dark), #1a1a2e);
color: var(--light);
min-height: 100vh;
line-height: 1.6;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
}
/* Header */
header {
background: rgba(18, 18, 18, 0.95);
backdrop-filter: blur(10px);
position: sticky;
top: 0;
z-index: 100;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
}
.header-content {
display: flex;
justify-content: space-between;
align-items: center;
padding: 15px 0;
}
.logo {
display: flex;
align-items: center;
gap: 10px;
font-size: 1.8rem;
font-weight: 700;
color: var(--primary);
}
.logo i {
color: var(--secondary);
}
.nav-links {
display: flex;
gap: 30px;
}
.nav-links a {
color: var(--light);
text-decoration: none;
font-weight: 500;
transition: var(--transition);
position: relative;
}
.nav-links a:hover {
color: var(--accent);
}
.nav-links a::after {
content: '';
position: absolute;
bottom: -5px;
left: 0;
width: 0;
height: 2px;
background: var(--accent);
transition: var(--transition);
}
.nav-links a:hover::after {
width: 100%;
}
.anycoder-link {
color: var(--secondary);
text-decoration: none;
font-weight: 600;
transition: var(--transition);
}
.anycoder-link:hover {
color: var(--accent);
}
/* Hero Section */
.hero {
padding: 80px 0;
text-align: center;
background: radial-gradient(circle at top right, rgba(138, 43, 226, 0.2), transparent 50%),
radial-gradient(circle at bottom left, rgba(255, 107, 107, 0.2), transparent 50%);
}
.hero h1 {
font-size: 3.5rem;
margin-bottom: 20px;
background: linear-gradient(to right, var(--primary), var(--secondary), var(--accent));
-webkit-background-clip: text;
background-clip: text;
color: transparent;
line-height: 1.2;
}
.hero p {
font-size: 1.2rem;
max-width: 700px;
margin: 0 auto 40px;
color: #ccc;
}
/* Upload Section */
.upload-section {
background: rgba(45, 45, 45, 0.5);
backdrop-filter: blur(10px);
border-radius: 20px;
padding: 40px;
margin: 40px auto;
max-width: 800px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
border: 1px solid rgba(255, 255, 255, 0.1);
}
.upload-area {
border: 3px dashed var(--primary);
border-radius: 15px;
padding: 50px 20px;
text-align: center;
cursor: pointer;
transition: var(--transition);
margin-bottom: 30px;
position: relative;
overflow: hidden;
}
.upload-area:hover {
border-color: var(--accent);
background: rgba(138, 43, 226, 0.05);
}
.upload-area i {
font-size: 4rem;
color: var(--primary);
margin-bottom: 20px;
}
.upload-area h3 {
font-size: 1.5rem;
margin-bottom: 10px;
}
.upload-area p {
color: #aaa;
}
#file-input {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
cursor: pointer;
}
/* Effects Section */
.effects-section {
margin: 60px 0;
}
.section-title {
text-align: center;
margin-bottom: 40px;
font-size: 2.2rem;
position: relative;
display: inline-block;
left: 50%;
transform: translateX(-50%);
}
.section-title::after {
content: '';
position: absolute;
bottom: -10px;
left: 10%;
width: 80%;
height: 3px;
background: linear-gradient(to right, transparent, var(--accent), transparent);
}
.effects-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 30px;
}
.effect-card {
background: rgba(45, 45, 45, 0.7);
border-radius: 15px;
padding: 25px;
transition: var(--transition);
cursor: pointer;
border: 1px solid rgba(255, 255, 255, 0.05);
}
.effect-card:hover {
transform: translateY(-10px);
box-shadow: 0 15px 30px rgba(0, 0, 0, 0.4);
border-color: var(--primary);
}
.effect-icon {
width: 60px;
height: 60px;
background: linear-gradient(135deg, var(--primary), var(--secondary));
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20px;
}
.effect-icon i {
font-size: 1.8rem;
color: white;
}
.effect-card h3 {
font-size: 1.4rem;
margin-bottom: 10px;
}
.effect-card p {
color: #bbb;
margin-bottom: 20px;
}
.sliders {
margin-top: 15px;
}
.slider-container {
margin-bottom: 15px;
}
.slider-label {
display: flex;
justify-content: space-between;
margin-bottom: 5px;
}
.slider {
width: 100%;
height: 6px;
-webkit-appearance: none;
background: rgba(255, 255, 255, 0.1);
border-radius: 10px;
outline: none;
}
.slider::-webkit-slider-thumb {
-webkit-appearance: none;
width: 20px;
height: 20px;
border-radius: 50%;
background: var(--accent);
cursor: pointer;
}
/* Preview Section */
.preview-section {
background: rgba(45, 45, 45, 0.5);
border-radius: 20px;
padding: 40px;
margin: 60px auto;
max-width: 800px;
}
.audio-player {
width: 100%;
margin: 20px 0;
}
.player-controls {
display: flex;
justify-content: center;
gap: 20px;
margin-top: 20px;
}
.control-btn {
width: 50px;
height: 50px;
border-radius: 50%;
background: var(--primary);
border: none;
color: white;
font-size: 1.2rem;
cursor: pointer;
transition: var(--transition);
display: flex;
align-items: center;
justify-content: center;
}
.control-btn:hover {
background: var(--secondary);
transform: scale(1.1);
}
.download-btn {
background: linear-gradient(to right, var(--primary), var(--secondary));
color: white;
border: none;
padding: 12px 25px;
border-radius: 30px;
font-weight: 600;
cursor: pointer;
transition: var(--transition);
display: block;
margin: 30px auto 0;
font-size: 1rem;
}
.download-btn:hover {
transform: translateY(-3px);
box-shadow: 0 10px 20px rgba(138, 43, 226, 0.3);
}
/* Footer */
footer {
background: rgba(18, 18, 18, 0.9);
padding: 40px 0;
margin-top: 60px;
text-align: center;
}
.footer-content {
display: flex;
flex-direction: column;
align-items: center;
gap: 20px;
}
.social-links {
display: flex;
gap: 20px;
}
.social-links a {
width: 40px;
height: 40px;
border-radius: 50%;
background: var(--gray);
display: flex;
align-items: center;
justify-content: center;
color: white;
text-decoration: none;
transition: var(--transition);
}
.social-links a:hover {
background: var(--primary);
transform: translateY(-5px);
}
.copyright {
color: #aaa;
font-size: 0.9rem;
}
/* Responsive Design */
@media (max-width: 768px) {
.header-content {
flex-direction: column;
gap: 15px;
}
.nav-links {
gap: 15px;
}
.hero h1 {
font-size: 2.5rem;
}
.upload-section, .preview-section {
padding: 25px;
}
.effects-grid {
grid-template-columns: 1fr;
}
}
/* Animation for processing */
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.05); }
100% { transform: scale(1); }
}
.processing {
animation: pulse 1.5s infinite;
}
/* Hidden class for toggling */
.hidden {
display: none;
}
</style>
</head>
<body>
<header>
<div class="container">
<div class="header-content">
<div class="logo">
<i class="fas fa-wave-square"></i>
<span>SoundLab</span>
</div>
<div class="nav-links">
<a href="#">Home</a>
<a href="#">Effects</a>
<a href="#">Library</a>
<a href="#">About</a>
</div>
<a href="https://huggingface.co/spaces/akhaliq/anycoder" class="anycoder-link">Built with anycoder</a>
</div>
</div>
</header>
<section class="hero">
<div class="container">
<h1>Transform Your Music with Advanced Audio Effects</h1>
<p>Upload your tracks and instantly create slowed + reverb, 8D/16D, and speed-up versions. Customize every detail to make your perfect remix.</p>
</div>
</section>
<div class="container">
<section class="upload-section">
<h2 class="section-title">Upload Your Audio</h2>
<div class="upload-area" id="upload-area">
<i class="fas fa-cloud-upload-alt"></i>
<h3>Drag & Drop Your Audio File</h3>
<p>Supports MP3, WAV, FLAC, and other common formats</p>
<input type="file" id="file-input" accept="audio/*">
</div>
<div id="file-info" class="hidden">
<p>File selected: <span id="file-name"></span></p>
</div>
</section>
<section class="effects-section">
<h2 class="section-title">Audio Effects</h2>
<div class="effects-grid">
<div class="effect-card" id="slowed-reverb">
<div class="effect-icon">
<i class="fas fa-tachometer-alt"></i>
</div>
<h3>Slowed + Reverb</h3>
<p>Create dreamy, atmospheric versions of your tracks with pitch adjustment and reverb effects.</p>
<div class="sliders">
<div class="slider-container">
<div class="slider-label">
<span>Slowdown</span>
<span id="slow-value">20%</span>
</div>
<input type="range" min="0" max="100" value="20" class="slider" id="slow-slider">
</div>
<div class="slider-container">
<div class="slider-label">
<span>Reverb</span>
<span id="reverb-value">70%</span>
</div>
<input type="range" min="0" max="100" value="70" class="slider" id="reverb-slider">
</div>
</div>
</div>
<div class="effect-card" id="spatial-audio">
<div class="effect-icon">
<i class="fas fa-compass"></i>
</div>
<h3>8D / 16D Audio</h3>
<p>Immersive spatial audio that moves around your head for a unique listening experience.</p>
<div class="sliders">
<div class="slider-container">
<div class="slider-label">
<span>Rotation Speed</span>
<span id="rotation-value">Medium</span>
</div>
<input type="range" min="0" max="100" value="50" class="slider" id="rotation-slider">
</div>
<div class="slider-container">
<div class="slider-label">
<span>Dimension</span>
<span id="dimension-value">8D</span>
</div>
<input type="range" min="0" max="100" value="0" class="slider" id="dimension-slider">
</div>
</div>
</div>
<div class="effect-card" id="speed-control">
<div class="effect-icon">
<i class="fas fa-forward"></i>
</div>
<h3>Speed Control</h3>
<p>Adjust the playback speed of your audio without changing the pitch (or with pitch correction).</p>
<div class="sliders">
<div class="slider-container">
<div class="slider-label">
<span>Speed</span>
<span id="speed-value">100%</span>
</div>
<input type="range" min="50" max="200" value="100" class="slider" id="speed-slider">
</div>
</div>
</div>
</div>
</section>
<section class="preview-section hidden" id="preview-section">
<h2 class="section-title">Preview & Download</h2>
<div class="audio-player">
<audio id="audio-player" controls></audio>
</div>
<div class="player-controls">
<button class="control-btn" id="play-btn">
<i class="fas fa-play"></i>
</button>
<button class="control-btn" id="pause-btn">
<i class="fas fa-pause"></i>
</button>
<button class="control-btn" id="stop-btn">
<i class="fas fa-stop"></i>
</button>
</div>
<button class="download-btn" id="download-btn">
<i class="fas fa-download"></i> Download Processed Audio
</button>
</section>
</div>
<footer>
<div class="container">
<div class="footer-content">
<div class="logo">
<i class="fas fa-wave-square"></i>
<span>SoundLab</span>
</div>
<div class="social-links">
<a href="#"><i class="fab fa-twitter"></i></a>
<a href="#"><i class="fab fa-instagram"></i></a>
<a href="#"><i class="fab fa-tiktok"></i></a>
<a href="#"><i class="fab fa-youtube"></i></a>
</div>
<p class="copyright">© 2023 SoundLab. All rights reserved.</p>
</div>
</div>
</footer>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Elements
const fileInput = document.getElementById('file-input');
const uploadArea = document.getElementById('upload-area');
const fileInfo = document.getElementById('file-info');
const fileName = document.getElementById('file-name');
const previewSection = document.getElementById('preview-section');
const audioPlayer = document.getElementById('audio-player');
const playBtn = document.getElementById('play-btn');
const pauseBtn = document.getElementById('pause-btn');
const stopBtn = document.getElementById('stop-btn');
const downloadBtn = document.getElementById('download-btn');
// Slider elements
const slowSlider = document.getElementById('slow-slider');
const slowValue = document.getElementById('slow-value');
const reverbSlider = document.getElementById('reverb-slider');
const reverbValue = document.getElementById('reverb-value');
const rotationSlider = document.getElementById('rotation-slider');
const rotationValue = document.getElementById('rotation-value');
const dimensionSlider = document.getElementById('dimension-slider');
const dimensionValue = document.getElementById('dimension-value');
const speedSlider = document.getElementById('speed-slider');
const speedValue = document.getElementById('speed-value');
// File upload handling
fileInput.addEventListener('change', function(e) {
if (this.files && this.files[0]) {
const file = this.files[0];
fileName.textContent = file.name;
fileInfo.classList.remove('hidden');
// Create a URL for the file
const url = URL.createObjectURL(file);
audioPlayer.src = url;
// Show preview section
previewSection.classList.remove('hidden');
// Add processing animation
uploadArea.classList.add('processing');
// Simulate processing time
setTimeout(() => {
uploadArea.classList.remove('processing');
}, 2000);
}
});
// Drag and drop functionality
uploadArea.addEventListener('dragover', function(e) {
e.preventDefault();
this.style.borderColor = 'var(--accent)';
this.style.backgroundColor = 'rgba(0, 212, 255, 0.05)';
});
uploadArea.addEventListener('dragleave', function() {
this.style.borderColor = 'var(--primary)';
this.style.backgroundColor = 'transparent';
});
uploadArea.addEventListener('drop', function(e) {
e.preventDefault();
this.style.borderColor = 'var(--primary)';
this.style.backgroundColor = 'transparent';
if (e.dataTransfer.files && e.dataTransfer.files[0]) {
fileInput.files = e.dataTransfer.files;
const event = new Event('change');
fileInput.dispatchEvent(event);
}
});
// Player controls
playBtn.addEventListener('click', function() {
audioPlayer.play();
});
pauseBtn.addEventListener('click', function() {
audioPlayer.pause();
});
stopBtn.addEventListener('click', function() {
audioPlayer.pause();
audioPlayer.currentTime = 0;
});
// Download button
downloadBtn.addEventListener('click', function() {
alert('Your processed audio is being prepared for download. This would connect to a backend service in a real application.');
});
// Slider value updates
slowSlider.addEventListener('input', function() {
slowValue.textContent = `${this.value}%`;
});
reverbSlider.addEventListener('input', function() {
reverbValue.textContent = `${this.value}%`;
});
rotationSlider.addEventListener('input', function() {
const values = ['Slow', 'Medium', 'Fast'];
rotationValue.textContent = values[Math.floor(this.value / 33.4)];
});
dimensionSlider.addEventListener('input', function() {
dimensionValue.textContent = this.value < 50 ? '8D' : '16D';
});
speedSlider.addEventListener('input', function() {
speedValue.textContent = `${this.value}%`;
});
// Effect card selection
const effectCards = document.querySelectorAll('.effect-card');
effectCards.forEach(card => {
card.addEventListener('click', function() {
effectCards.forEach(c => c.style.borderColor = 'rgba(255, 255, 255, 0.05)';
this.style.borderColor = 'var(--accent)';
});
});
});
</script>
</body>
</html>