| | <!DOCTYPE html> |
| | <html lang="ko"> |
| | <head> |
| | <meta charset="UTF-8"> |
| | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| | <title>음악 업로드 - AI Music Hub</title> |
| | <link rel="icon" type="image/x-icon" href="/static/favicon.ico"> |
| | <script src="https://cdn.tailwindcss.com"></script> |
| | <script> |
| | tailwind.config = { |
| | darkMode: 'class', |
| | theme: { |
| | extend: { |
| | colors: { |
| | navy: '#0f172a', |
| | charcoal: '#1e293b', |
| | accent: { |
| | from: '#a855f7', |
| | to: '#ec4899' |
| | } |
| | }, |
| | backgroundImage: { |
| | 'glass': 'linear-gradient(135deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.05))', |
| | 'neon-glow': 'linear-gradient(45deg, #a855f7, #ec4899, #a855f7)', |
| | }, |
| | boxShadow: { |
| | 'neon': '0 0 5px #a855f7, 0 0 10px #ec4899, 0 0 15px #a855f7', |
| | 'neon-hover': '0 0 10px #a855f7, 0 0 20px #ec4899, 0 0 30px #a855f7' |
| | } |
| | } |
| | } |
| | } |
| | </script> |
| | <link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet"> |
| | <script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script> |
| | <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script> |
| | <script src="https://unpkg.com/feather-icons"></script> |
| | <style> |
| | @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;600;700&display=swap'); |
| | |
| | body { |
| | font-family: 'Noto Sans KR', sans-serif; |
| | background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%); |
| | color: #f8fafc; |
| | min-height: 100vh; |
| | } |
| | |
| | .glass-button { |
| | background: linear-gradient(135deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.05)); |
| | backdrop-filter: blur(10px); |
| | border: 1px solid rgba(255, 255, 255, 0.1); |
| | border-radius: 12px; |
| | transition: all 0.3s ease; |
| | } |
| | |
| | .glass-button:hover { |
| | box-shadow: 0 0 10px #a855f7, 0 0 20px #ec4899, 0 0 30px #a855f7; |
| | transform: translateY(-2px); |
| | } |
| | |
| | .neon-border { |
| | border: 1px solid transparent; |
| | background: linear-gradient(#0f172a, #0f172a) padding-box, |
| | linear-gradient(45deg, #a855f7, #ec4899) border-box; |
| | } |
| | |
| | .upload-area { |
| | background: linear-gradient(135deg, rgba(30, 41, 59, 0.5), rgba(15, 23, 42, 0.5)); |
| | backdrop-filter: blur(10px); |
| | border: 2px dashed rgba(168, 85, 247, 0.3); |
| | transition: all 0.3s ease; |
| | } |
| | |
| | .upload-area:hover, .upload-area.dragover { |
| | border-color: #a855f7; |
| | box-shadow: 0 0 15px rgba(168, 85, 247, 0.2); |
| | } |
| | |
| | .form-input { |
| | background: rgba(30, 41, 59, 0.5); |
| | backdrop-filter: blur(10px); |
| | border: 1px solid rgba(255, 255, 255, 0.1); |
| | transition: all 0.3s ease; |
| | } |
| | |
| | .form-input:focus { |
| | box-shadow: 0 0 5px #a855f7, 0 0 10px #ec4899; |
| | border-color: transparent; |
| | } |
| | |
| | .select-box { |
| | background: rgba(30, 41, 59, 0.5); |
| | backdrop-filter: blur(10px); |
| | border: 1px solid rgba(255, 255, 255, 0.1); |
| | } |
| | </style> |
| | </head> |
| | <body class="min-h-screen"> |
| | |
| | <nav class="fixed w-full z-50 bg-navy/80 backdrop-blur-md border-b border-gray-800"> |
| | <div class="container mx-auto px-4 py-3 flex items-center justify-between"> |
| | <a href="index.html" class="flex items-center space-x-2"> |
| | <div class="w-8 h-8 rounded-full bg-gradient-to-r from-accent-from to-accent-to flex items-center justify-center"> |
| | <i data-feather="music" class="text-white"></i> |
| | </div> |
| | <span class="text-xl font-bold bg-gradient-to-r from-accent-from to-accent-to bg-clip-text text-transparent">AI Music Hub</span> |
| | </a> |
| | |
| | <div class="flex items-center space-x-4"> |
| | <a href="index.html" class="text-gray-300 hover:text-white transition">홈으로</a> |
| | <a href="collection.html" class="text-gray-300 hover:text-white transition">컬렉션</a> |
| | <a href="mypage.html" class="text-gray-300 hover:text-white transition">마이페이지</a> |
| | |
| | <div class="relative"> |
| | <a href="mypage.html" class="w-10 h-10 rounded-full bg-gradient-to-r from-accent-from to-accent-to flex items-center justify-center"> |
| | <i data-feather="user" class="text-white"></i> |
| | </a> |
| | </div> |
| | </div> |
| | </div> |
| | </nav> |
| |
|
| | |
| | <section class="pt-32 pb-20 px-4"> |
| | <div class="container mx-auto max-w-4xl"> |
| | <h1 class="text-3xl md:text-4xl font-bold mb-2 text-center" data-aos="fade-up">AI 음악 업로드</h1> |
| | <p class="text-gray-400 text-center mb-10" data-aos="fade-up" data-aos-delay="100">AI로 생성한 음악을 업로드하고 커뮤니티와 공유하세요</p> |
| | |
| | <div class="bg-charcoal/50 backdrop-blur-md rounded-2xl p-6 md:p-8" data-aos="fade-up" data-aos-delay="200"> |
| | |
| | <div class="upload-area rounded-xl p-8 text-center mb-8 cursor-pointer" id="dropArea"> |
| | <i data-feather="upload-cloud" class="w-12 h-12 mx-auto text-accent-from mb-4"></i> |
| | <h3 class="text-xl font-semibold mb-2">음악 파일 업로드</h3> |
| | <p class="text-gray-400 mb-4">MP3, WAV, FLAC 파일을 드래그 앤 드롭하거나 클릭하여 선택하세요</p> |
| | <button class="glass-button px-6 py-2 text-white mx-auto">파일 선택</button> |
| | <input type="file" class="hidden" id="fileInput" accept="audio/*"> |
| | </div> |
| | |
| | |
| | <div class="grid grid-cols-1 md:grid-cols-2 gap-6 mb-6"> |
| | <div> |
| | <label class="block text-sm font-medium mb-2">음악 제목</label> |
| | <input type="text" class="form-input w-full px-4 py-3 rounded-lg focus:outline-none" placeholder="제목을 입력하세요"> |
| | </div> |
| | |
| | <div> |
| | <label class="block text-sm font-medium mb-2">커버 아트</label> |
| | <div class="flex items-center space-x-4"> |
| | <div class="w-16 h-16 bg-gray-700 rounded-lg flex items-center justify-center"> |
| | <i data-feather="image" class="text-gray-400"></i> |
| | </div> |
| | <button class="glass-button px-4 py-2 text-white">이미지 업로드</button> |
| | </div> |
| | </div> |
| | </div> |
| | |
| | <div class="mb-6"> |
| | <label class="block text-sm font-medium mb-2">음악 설명</label> |
| | <textarea class="form-input w-full px-4 py-3 rounded-lg focus:outline-none h-32" placeholder="음악에 대한 설명을 입력하세요"></textarea> |
| | </div> |
| | |
| | <div class="grid grid-cols-1 md:grid-cols-2 gap-6 mb-8"> |
| | <div> |
| | <label class="block text-sm font-medium mb-2">태그</label> |
| | <input type="text" class="form-input w-full px-4 py-3 rounded-lg focus:outline-none" placeholder="#일렉트로닉 #앰비언트 #AI"> |
| | <p class="text-gray-400 text-xs mt-2">쉼표로 구분하여 여러 태그를 추가하세요</p> |
| | </div> |
| | |
| | <div> |
| | <label class="block text-sm font-medium mb-2">생성 AI 도구</label> |
| | <div class="relative"> |
| | <select class="select-box w-full px-4 py-3 rounded-lg appearance-none focus:outline-none"> |
| | <option>Soundful AI</option> |
| | <option>AIVA</option> |
| | <option>Amper Music</option> |
| | <option>OpenAI MuseNet</option> |
| | <option>Jukebox AI</option> |
| | <option>Amadeus Code</option> |
| | <option>Ecrett Music</option> |
| | <option>기타</option> |
| | </select> |
| | <i data-feather="chevron-down" class="absolute right-3 top-1/2 transform -translate-y-1/2 pointer-events-none"></i> |
| | </div> |
| | </div> |
| | </div> |
| | |
| | |
| | <div class="mb-8"> |
| | <label class="block text-sm font-medium mb-4">공개 설정</label> |
| | <div class="flex flex-wrap gap-4"> |
| | <label class="flex items-center space-x-2"> |
| | <input type="radio" name="privacy" checked> |
| | <span>공개</span> |
| | </label> |
| | <label class="flex items-center space-x-2"> |
| | <input type="radio" name="privacy"> |
| | <span>비공개</span> |
| | </label> |
| | <label class="flex items-center space-x-2"> |
| | <input type="radio" name="privacy"> |
| | <span>링크 공유만</span> |
| | </label> |
| | </div> |
| | </div> |
| | |
| | |
| | <button class="w-full glass-button py-4 text-white font-semibold rounded-lg flex items-center justify-center space-x-2"> |
| | <i data-feather="upload" class="w-5 h-5"></i> |
| | <span>음악 업로드</span> |
| | </button> |
| | </div> |
| | |
| | |
| | <div class="mt-12 bg-charcoal/50 backdrop-blur-md rounded-2xl p-6" data-aos="fade-up" data-aos-delay="300"> |
| | <h3 class="text-xl font-semibold mb-4 flex items-center"> |
| | <i data-feather="info" class="w-5 h-5 text-accent-from mr-2"></i> |
| | 업로드 팁 |
| | </h3> |
| | <ul class="space-y-2 text-gray-300"> |
| | <li class="flex items-start"> |
| | <i data-feather="check" class="w-4 h-4 text-green-400 mt-1 mr-2"></i> |
| | <span>고음질 오디오 파일(320kbps MP3 또는 무손실 형식)을 사용하세요</span> |
| | </li> |
| | <li class="flex items-start"> |
| | <i data-feather="check" class="w-4 h-4 text-green-400 mt-1 mr-2"></i> |
| | <span>정확한 태그를 추가하면 더 많은 사람들이 음악을 발견할 수 있습니다</span> |
| | </li> |
| | <li class="flex items-start"> |
| | <i data-feather="check" class="w-4 h-4 text-green-400 mt-1 mr-2"></i> |
| | <span>커버 아트는 최소 1000x1000 픽셀 이상의 정사각형 이미지를 사용하세요</span> |
| | </li> |
| | <li class="flex items-start"> |
| | <i data-feather="check" class="w-4 h-4 text-green-400 mt-1 mr-2"></i> |
| | <span>음악 생성에 사용한 AI 도구를 정확하게 선택해 주세요</span> |
| | </li> |
| | </ul> |
| | </div> |
| | </div> |
| | </section> |
| |
|
| | |
| | <footer class="py-12 px-4 border-t border-gray-800"> |
| | <div class="container mx-auto text-center"> |
| | <div class="flex items-center justify-center space-x-2 mb-4"> |
| | <div class="w-6 h-6 rounded-full bg-gradient-to-r from-accent-from to-accent-to flex items-center justify-center"> |
| | <i data-feather="music" class="text-white"></i> |
| | </div> |
| | <span class="text-lg font-bold">AI Music Hub</span> |
| | </div> |
| | <p class="text-gray-400 mb-6">AI 생성 음악의 프리미엄 플랫폼</p> |
| | |
| | <div class="flex justify-center space-x-4 mb-6"> |
| | <a href="#" class="text-gray-400 hover:text-white transition">이용약관</a> |
| | <a href="#" class="text-gray-400 hover:text-white transition">개인정보처리방침</a> |
| | <a href="#" class="text-gray-400 hover:text-white transition">문의하기</a> |
| | </div> |
| | |
| | <p class="text-gray-400">© 2023 AI Music Hub. All rights reserved.</p> |
| | </div> |
| | </footer> |
| |
|
| | <script> |
| | AOS.init({ |
| | duration: 800, |
| | easing: 'ease-in-out', |
| | once: true |
| | }); |
| | |
| | feather.replace(); |
| | |
| | |
| | const dropArea = document.getElementById('dropArea'); |
| | const fileInput = document.getElementById('fileInput'); |
| | |
| | ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { |
| | dropArea.addEventListener(eventName, preventDefaults, false); |
| | }); |
| | |
| | function preventDefaults(e) { |
| | e.preventDefault(); |
| | e.stopPropagation(); |
| | } |
| | |
| | ['dragenter', 'dragover'].forEach(eventName => { |
| | dropArea.addEventListener(eventName, highlight, false); |
| | }); |
| | |
| | ['dragleave', 'drop'].forEach(eventName => { |
| | dropArea.addEventListener(eventName, unhighlight, false); |
| | }); |
| | |
| | function highlight() { |
| | dropArea.classList.add('dragover'); |
| | } |
| | |
| | function unhighlight() { |
| | dropArea.classList.remove('dragover'); |
| | } |
| | |
| | dropArea.addEventListener('drop', handleDrop, false); |
| | |
| | function handleDrop(e) { |
| | const dt = e.dataTransfer; |
| | const files = dt.files; |
| | handleFiles(files); |
| | } |
| | |
| | dropArea.addEventListener('click', () => { |
| | fileInput.click(); |
| | }); |
| | |
| | fileInput.addEventListener('change', () => { |
| | handleFiles(fileInput.files); |
| | }); |
| | |
| | function handleFiles(files) { |
| | if (files.length > 0) { |
| | |
| | console.log('File selected:', files[0].name); |
| | dropArea.querySelector('p').textContent = `선택된 파일: ${files[0].name}`; |
| | } |
| | } |
| | </script> |
| | </body> |
| | </html> |
| |
|