|
<!DOCTYPE html> |
|
<html lang="en"> |
|
<head> |
|
<meta charset="UTF-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
<meta http-equiv="Permissions-Policy" content="interest-cohort=()"> |
|
<title>Meme Soundboard</title> |
|
<script src="https://cdn.tailwindcss.com?plugins=forms,aspect-ratio"></script> |
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
|
<style> |
|
@import url('https://fonts.googleapis.com/css2?family=Comic+Neue:wght@400;700&display=swap'); |
|
|
|
body { |
|
font-family: 'Comic Neue', cursive; |
|
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%); |
|
min-height: 100vh; |
|
} |
|
|
|
.sound-btn { |
|
transition: all 0.3s ease; |
|
transform: scale(1); |
|
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); |
|
} |
|
|
|
.sound-btn:hover { |
|
transform: scale(1.05); |
|
box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1); |
|
} |
|
|
|
.sound-btn:active { |
|
transform: scale(0.98); |
|
} |
|
|
|
.playing { |
|
animation: pulse 0.5s infinite alternate; |
|
border-color: #3b82f6 !important; |
|
} |
|
|
|
@keyframes pulse { |
|
from { |
|
box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.4); |
|
} |
|
to { |
|
box-shadow: 0 0 0 10px rgba(59, 130, 246, 0); |
|
} |
|
} |
|
|
|
.volume-slider { |
|
-webkit-appearance: none; |
|
width: 100%; |
|
height: 8px; |
|
border-radius: 4px; |
|
background: #d1d5db; |
|
outline: none; |
|
} |
|
|
|
.volume-slider::-webkit-slider-thumb { |
|
-webkit-appearance: none; |
|
appearance: none; |
|
width: 20px; |
|
height: 20px; |
|
border-radius: 50%; |
|
background: #3b82f6; |
|
cursor: pointer; |
|
} |
|
|
|
.error-message { |
|
display: none; |
|
position: fixed; |
|
top: 20px; |
|
left: 50%; |
|
transform: translateX(-50%); |
|
background-color: #ef4444; |
|
color: white; |
|
padding: 12px 24px; |
|
border-radius: 8px; |
|
z-index: 100; |
|
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); |
|
} |
|
</style> |
|
</head> |
|
<body class="p-4 md:p-8"> |
|
<div class="error-message" id="errorMessage"> |
|
<i class="fas fa-exclamation-triangle mr-2"></i> |
|
<span id="errorText">Sound could not be loaded. Please try again.</span> |
|
</div> |
|
|
|
<div class="max-w-4xl mx-auto"> |
|
<header class="text-center mb-8"> |
|
<h1 class="text-4xl md:text-5xl font-bold text-gray-800 mb-2">Meme Soundboard</h1> |
|
<p class="text-lg text-gray-600">Press the buttons to play legendary meme sounds</p> |
|
|
|
<div class="mt-6 flex items-center justify-center space-x-4"> |
|
<i class="fas fa-volume-up text-blue-500 text-xl"></i> |
|
<input type="range" min="0" max="1" step="0.01" value="0.5" class="volume-slider w-48" id="volumeControl"> |
|
<span class="text-gray-700 font-medium" id="volumeValue">50%</span> |
|
</div> |
|
</header> |
|
|
|
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4" id="soundboard"> |
|
|
|
</div> |
|
|
|
<div class="mt-12 text-center"> |
|
<button id="stopAllBtn" class="px-6 py-3 bg-red-500 text-white rounded-full font-bold hover:bg-red-600 transition"> |
|
<i class="fas fa-stop mr-2"></i> Stop All Sounds |
|
</button> |
|
</div> |
|
</div> |
|
|
|
|
|
<audio id="yodelAudio" preload="auto"> |
|
<source src="https://assets.mixkit.co/sfx/preview/mixkit-yodel-voice-sound-2223.mp3" type="audio/mpeg"> |
|
<source src="https://www.soundjay.com/misc/sounds/yodel-01.mp3" type="audio/mpeg"> |
|
</audio> |
|
<audio id="wompWompAudio" preload="auto"> |
|
<source src="https://assets.mixkit.co/sfx/preview/mixkit-sad-trombone-2817.mp3" type="audio/mpeg"> |
|
<source src="https://www.soundjay.com/misc/sounds/sad-trombone-01.mp3" type="audio/mpeg"> |
|
</audio> |
|
<audio id="rickrollAudio" preload="auto"> |
|
<source src="https://www.soundjay.com/misc/sounds/never-gonna-give-you-up-01.mp3" type="audio/mpeg"> |
|
</audio> |
|
<audio id="sadViolinAudio" preload="auto"> |
|
<source src="https://assets.mixkit.co/sfx/preview/mixkit-sad-violin-1491.mp3" type="audio/mpeg"> |
|
<source src="https://www.soundjay.com/misc/sounds/sad-violin-01.mp3" type="audio/mpeg"> |
|
</audio> |
|
<audio id="bruhAudio" preload="auto"> |
|
<source src="https://assets.mixkit.co/sfx/preview/mixkit-funny-fart-2885.mp3" type="audio/mpeg"> |
|
<source src="https://www.soundjay.com/misc/sounds/bruh-sound-01.mp3" type="audio/mpeg"> |
|
</audio> |
|
<audio id="airhornAudio" preload="auto"> |
|
<source src="https://assets.mixkit.co/sfx/preview/mixkit-air-horn-2915.mp3" type="audio/mpeg"> |
|
<source src="https://www.soundjay.com/misc/sounds/air-horn-01.mp3" type="audio/mpeg"> |
|
</audio> |
|
<audio id="oofAudio" preload="auto"> |
|
<source src="https://assets.mixkit.co/sfx/preview/mixkit-video-game-falling-2819.mp3" type="audio/mpeg"> |
|
<source src="https://www.soundjay.com/misc/sounds/roblox-oof-01.mp3" type="audio/mpeg"> |
|
</audio> |
|
<audio id="windowsErrorAudio" preload="auto"> |
|
<source src="https://assets.mixkit.co/sfx/preview/mixkit-windows-7-error-sound-2572.mp3" type="audio/mpeg"> |
|
<source src="https://www.soundjay.com/misc/sounds/windows-error-01.mp3" type="audio/mpeg"> |
|
</audio> |
|
<audio id="tacoBellAudio" preload="auto"> |
|
<source src="https://assets.mixkit.co/sfx/preview/mixkit-bell-notification-933.mp3" type="audio/mpeg"> |
|
<source src="https://www.soundjay.com/misc/sounds/taco-bell-01.mp3" type="audio/mpeg"> |
|
</audio> |
|
<audio id="cricketAudio" preload="auto"> |
|
<source src="https://assets.mixkit.co/sfx/preview/mixkit-crickets-and-insects-in-the-wild-1254.mp3" type="audio/mpeg"> |
|
<source src="https://www.soundjay.com/misc/sounds/crickets-01.mp3" type="audio/mpeg"> |
|
</audio> |
|
<audio id="mlgAirhornAudio" preload="auto"> |
|
<source src="https://assets.mixkit.co/sfx/preview/mixkit-horn-call-2916.mp3" type="audio/mpeg"> |
|
<source src="https://www.soundjay.com/misc/sounds/mlg-airhorn-01.mp3" type="audio/mpeg"> |
|
</audio> |
|
<audio id="vineBoomAudio" preload="auto"> |
|
<source src="https://assets.mixkit.co/sfx/preview/mixkit-explosion-impact-1680.mp3" type="audio/mpeg"> |
|
<source src="https://www.soundjay.com/misc/sounds/vine-boom-01.mp3" type="audio/mpeg"> |
|
</audio> |
|
|
|
<script> |
|
document.addEventListener('DOMContentLoaded', function() { |
|
|
|
const meta = document.createElement('meta'); |
|
meta.httpEquiv = 'Permissions-Policy'; |
|
meta.content = 'interest-cohort=()'; |
|
document.head.appendChild(meta); |
|
|
|
const sounds = [ |
|
{ id: 'yodelAudio', name: 'Yodeling Kid', icon: 'fa-music', color: 'bg-yellow-400', border: 'border-yellow-500' }, |
|
{ id: 'wompWompAudio', name: 'Womp Womp', icon: 'fa-face-sad-cry', color: 'bg-purple-400', border: 'border-purple-500' }, |
|
{ id: 'rickrollAudio', name: 'Rickroll', icon: 'fa-user-secret', color: 'bg-blue-400', border: 'border-blue-500' }, |
|
{ id: 'sadViolinAudio', name: 'Sad Violin', icon: 'fa-violin', color: 'bg-indigo-400', border: 'border-indigo-500' }, |
|
{ id: 'bruhAudio', name: 'Bruh Sound', icon: 'fa-face-grin-squint-tears', color: 'bg-green-400', border: 'border-green-500' }, |
|
{ id: 'airhornAudio', name: 'Airhorn', icon: 'fa-bullhorn', color: 'bg-red-400', border: 'border-red-500' }, |
|
{ id: 'oofAudio', name: 'Roblox Oof', icon: 'fa-gamepad', color: 'bg-orange-400', border: 'border-orange-500' }, |
|
{ id: 'windowsErrorAudio', name: 'Windows Error', icon: 'fa-window-restore', color: 'bg-gray-400', border: 'border-gray-500' }, |
|
{ id: 'tacoBellAudio', name: 'Taco Bell Bong', icon: 'fa-bell', color: 'bg-pink-400', border: 'border-pink-500' }, |
|
{ id: 'cricketAudio', name: 'Cricket Sounds', icon: 'fa-bug', color: 'bg-lime-400', border: 'border-lime-500' }, |
|
{ id: 'mlgAirhornAudio', name: 'MLG Airhorn', icon: 'fa-glasses', color: 'bg-cyan-400', border: 'border-cyan-500' }, |
|
{ id: 'vineBoomAudio', name: 'Vine Boom', icon: 'fa-burst', color: 'bg-amber-400', border: 'border-amber-500' } |
|
]; |
|
|
|
const soundboard = document.getElementById('soundboard'); |
|
const errorMessage = document.getElementById('errorMessage'); |
|
const errorText = document.getElementById('errorText'); |
|
|
|
sounds.forEach(sound => { |
|
const soundBtn = document.createElement('button'); |
|
soundBtn.className = `sound-btn ${sound.color} ${sound.border} border-2 rounded-xl p-4 flex flex-col items-center justify-center h-32`; |
|
soundBtn.innerHTML = ` |
|
<i class="fas ${sound.icon} text-3xl mb-2"></i> |
|
<span class="font-bold text-gray-800">${sound.name}</span> |
|
`; |
|
|
|
soundBtn.addEventListener('click', function() { |
|
playSound(sound.id, soundBtn); |
|
}); |
|
|
|
soundboard.appendChild(soundBtn); |
|
}); |
|
|
|
const volumeControl = document.getElementById('volumeControl'); |
|
const volumeValue = document.getElementById('volumeValue'); |
|
const stopAllBtn = document.getElementById('stopAllBtn'); |
|
|
|
|
|
const allAudioElements = document.querySelectorAll('audio'); |
|
|
|
|
|
allAudioElements.forEach(audio => { |
|
audio.volume = volumeControl.value; |
|
|
|
|
|
audio.addEventListener('error', function() { |
|
showError(`Failed to load ${audio.id.replace('Audio', '')} sound`); |
|
}); |
|
}); |
|
|
|
|
|
volumeControl.addEventListener('input', function() { |
|
const volume = this.value; |
|
volumeValue.textContent = `${Math.round(volume * 100)}%`; |
|
|
|
allAudioElements.forEach(audio => { |
|
audio.volume = volume; |
|
}); |
|
}); |
|
|
|
|
|
stopAllBtn.addEventListener('click', function() { |
|
allAudioElements.forEach(audio => { |
|
audio.pause(); |
|
audio.currentTime = 0; |
|
}); |
|
|
|
|
|
document.querySelectorAll('.sound-btn').forEach(btn => { |
|
btn.classList.remove('playing'); |
|
}); |
|
}); |
|
|
|
function playSound(soundId, button) { |
|
|
|
allAudioElements.forEach(audio => { |
|
audio.pause(); |
|
audio.currentTime = 0; |
|
}); |
|
|
|
|
|
document.querySelectorAll('.sound-btn').forEach(btn => { |
|
btn.classList.remove('playing'); |
|
}); |
|
|
|
|
|
const audio = document.getElementById(soundId); |
|
|
|
try { |
|
audio.currentTime = 0; |
|
const playPromise = audio.play(); |
|
|
|
if (playPromise !== undefined) { |
|
playPromise.catch(error => { |
|
showError("Couldn't play sound. Try clicking again or check your browser permissions."); |
|
}); |
|
} |
|
|
|
|
|
button.classList.add('playing'); |
|
|
|
|
|
audio.addEventListener('ended', function() { |
|
button.classList.remove('playing'); |
|
}); |
|
} catch (error) { |
|
showError("Error playing sound. Please try again."); |
|
} |
|
} |
|
|
|
function showError(message) { |
|
errorText.textContent = message; |
|
errorMessage.style.display = 'block'; |
|
|
|
setTimeout(() => { |
|
errorMessage.style.display = 'none'; |
|
}, 3000); |
|
} |
|
}); |
|
</script> |
|
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=Enderchef/memeboard" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
|
</html> |