js+css实现本地音乐音频声音变速变调调节音量预览试听导出代码

代码语言:html

所属分类:多媒体

代码描述:js+css实现本地音乐音频声音变速变调调节音量预览试听导出代码

代码标签: js css 本地 音乐 音频 声音 变速 变调 调节 音量 预览 试听 导出 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>TEMPO LAB — 本地音频变速变调工具</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,300..800&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<script src="https://cdn.tailwindcss.com"></script>
<style>
  :root {
    --bg: #0a0a0f;
    --bg-card: #13131c;
    --bg-elevated: #1c1c28;
    --border: #2a2a3a;
    --fg: #f5f5f7;
    --muted: #8b8b9c;
    --accent: #fb923c;
    --accent-glow: rgba(251, 146, 60, 0.4);
    --secondary: #22d3ee;
    --secondary-glow: rgba(34, 211, 238, 0.4);
    --danger: #ef4444;
    --success: #10b981;
  }
  * { box-sizing: border-box; }
  body {
    margin: 0;
    background: var(--bg);
    color: var(--fg);
    font-family: 'Bricolage Grotesque', sans-serif;
    min-height: 100vh;
    overflow-x: hidden;
    -webkit-font-smoothing: antialiased;
  }
  body::before {
    content: '';
    position: fixed; inset: 0;
    background:
      radial-gradient(ellipse 80% 50% at 15% 0%, rgba(251, 146, 60, 0.18), transparent 60%),
      radial-gradient(ellipse 60% 50% at 90% 100%, rgba(34, 211, 238, 0.12), transparent 60%),
      radial-gradient(ellipse 40% 40% at 50% 50%, rgba(251, 146, 60, 0.04), transparent 70%);
    pointer-events: none; z-index: 0;
  }
  body::after {
    content: '';
    position: fixed; inset: 0;
    background-image:
      linear-gradient(rgba(255,255,255,0.015) 1px, transparent 1px),
      linear-gradient(90deg, rgba(255,255,255,0.015) 1px, transparent 1px);
    background-size: 48px 48px;
    pointer-events: none; z-index: 0;
    mask-image: radial-gradient(ellipse 80% 80% at 50% 50%, black 30%, transparent 80%);
  }
  .mono { font-family: 'JetBrains Mono', monospace; }
  .display-title {
    font-family: 'Bricolage Grotesque', sans-serif;
    font-weight: 800;
    letter-spacing: -0.04em;
    line-height: 0.95;
  }
  input[type="range"] {
    -webkit-appearance: none;
    width: 100%; height: 6px;
    background: var(--bg-elevated);
    border-radius: 3px;
    outline: none;
    border: 1px solid var(--border);
  }
  input[type="range"]::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 22px; height: 22px;
    background: var(--accent);
    border-radius: 50%;
    cursor: pointer;
    box-shadow: 0 0 0 4px rgba(251, 146, 60, 0.15), 0 0 24px var(--accent-glow);
    transition: transform 0.15s;
    border: 2px solid #1a1a24;
  }
  input[type="range"]::-webkit-slider-thumb:hover { transform: scale(1.15); }
  input[type="range"]::-moz-range-thumb {
    width: 18px; height: 18px;
    background: var(--accent);
    border-radius: 50%;
    cursor: pointer;
    border: 2px solid #1a1a24;
    box-shadow: 0 0 24px var(--accent-glow);
  }
  .pitch-slider::-webkit-slider-thumb { background: var(--secondary); box-shadow: 0 0 0 4px rgba(34,211,238,0.15), 0 0 24px var(--secondary-glow); }
  .pitch-slider::-moz-range-thumb { background: var(--secondary); box-shadow: 0 0 24px var(--secondary-glow); }
  .volume-slider::-webkit-slider-thumb { background: var(--fg); box-shadow: 0 0 0 4px rgba(255,255,255,0.08); }
  .volume-slider::-moz-range-thumb { background: var(--fg); }
  .drop-zone { border: 2px dashed var(--border); transition: all 0.3s; }
  .drop-zone.dragging {
    border-color: var(--accent);
    background: rgba(251, 146, 60, 0.06);
    transform: scale(1.01);
  }
  .btn { transition: all 0.18s; position: relative; }
  .btn:active { transform: scale(0.95); }
  .preset-btn { transition: all 0.18s; background: transparent; color: var(--muted); }
  .preset-btn:hover { color: var(--fg); border-color: var(--accent); background: rgba(251, 146, 60, 0.08); }
  .preset-btn.active { background: var(--accent); color: var(--bg); border-color: var(--accent); font-weight: 600; }
  .preset-btn.pitch-preset.active { background: var(--secondary); border-color: var(--secondary); }
  @keyframes pulse-dot { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.5; transform: scale(1.4); } }
  .live-dot { animation: pulse-dot 1.2s ease-in-out infinite; }
  ::-webkit-scrollbar { width: 8px; height: 8px; }
  ::-webkit-scrollbar-track { background: var(--bg-card); }
  ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
  ::-webkit-scrollbar-thumb:hover { background: var(--muted); }
  .toast {
    position: fixed; bottom: 28px; left: 50%;
    transform: translateX(-50%) translateY(120px);
    background: var(--bg-elevated);
    border: 1px solid var(--border);
    padding: 12px 22px;
    border-radius: 12px;
    opacity: 0;
    transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
    z-index: 100;
    backdrop-filter: blur(12px);
    box-shadow: 0 8px 32px rgba(0,0,0,0.4);
    max-width: 90vw;
  }
  .toast.show { transform: translateX(-50%) translateY(0); opacity: 1; }
  .digit { font-variant-numeric: tabular-nums; }
  .level-bar {
    background: linear-gradient(90deg, var(--success) 0%, var(--success) 50%, var(--accent) 75%, var(--danger) 100%);
  }
  @keyframes spin { to { transform: rotate(360deg); } }
  .spin { animation: spin 1s linear infinite; }
  .progress-bar { position: relative; }
  .progress-bar:hover #progressHandle { opacity: 1; }
  @keyframes wave-float { 0%, 100% { transform: translateY(0) scaleY(1); } 50% { transform: translateY(-8px) scaleY(1.05); } }
  .hero-bar { animation: wave-float 2.5s ease-in-out infinite; transform-origin: center; }
  .key-hint {
    display: inline-flex; align-items: center;
    padding: 2px 7px;
    border: 1px solid var(--border);
    border-radius: 4px;
    background: var(--bg-elevated);
    font-size: 10px; color: var(--muted);
  }
</style>
</head>
<body>
<div class="rel.........完整代码请登录后点击上方下载按钮下载查看

网友评论0