feat: [sound-logo] 프리셋 10종 → 50종 확장 + 카테고리 필터 추가
- 8개 카테고리: 기업시그널, 알림/메시지, 상태/피드백, 전환효과, 게임효과, UI인터랙션, 브랜드징글, 방송/미디어 - 카테고리별 필터 탭 UI 추가
This commit is contained in:
@@ -293,10 +293,22 @@
|
||||
<!-- Preset Mode -->
|
||||
<template x-if="mode === 'preset'">
|
||||
<div>
|
||||
<div class="sl-section-title" style="margin-bottom: 12px;">프리셋 템플릿 (10종) — 클릭하면 즉시 로드</div>
|
||||
<div style="display: flex; align-items: center; gap: 12px; margin-bottom: 14px; flex-wrap: wrap;">
|
||||
<div class="sl-section-title" style="margin: 0;">프리셋 템플릿 (50종)</div>
|
||||
<div style="display: flex; gap: 3px; flex-wrap: wrap;">
|
||||
<template x-for="c in presetCategories" :key="c.code">
|
||||
<button class="sl-btn sm"
|
||||
:class="presetCategory === c.code && 'primary'"
|
||||
@click="presetCategory = c.code"
|
||||
x-text="c.label + (c.code === 'all' ? ' (' + presets.length + ')' : ' (' + presets.filter(p => p.cat === c.code).length + ')')">
|
||||
</button>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 10px;">
|
||||
<template x-for="(p, i) in presets" :key="i">
|
||||
<div style="background: var(--sl-card); border: 1px solid var(--sl-border); border-radius: 10px; padding: 14px; cursor: pointer; transition: all .15s;"
|
||||
<div x-show="presetCategory === 'all' || p.cat === presetCategory"
|
||||
style="background: var(--sl-card); border: 1px solid var(--sl-border); border-radius: 10px; padding: 14px; cursor: pointer; transition: all .15s;"
|
||||
:style="presetIdx === i ? 'border-color: var(--sl-indigo); box-shadow: 0 0 12px rgba(99,102,241,.3);' : ''"
|
||||
@click="loadPreset(i)">
|
||||
<div style="display: flex; align-items: center; gap: 8px; margin-bottom: 8px;">
|
||||
@@ -421,6 +433,7 @@ function soundLogo() {
|
||||
savedSounds: [],
|
||||
currentSoundId: null,
|
||||
presetIdx: -1,
|
||||
presetCategory: 'all',
|
||||
audioCtx: null,
|
||||
|
||||
synthTypes: [
|
||||
@@ -430,6 +443,18 @@ function soundLogo() {
|
||||
{ code: 'sawtooth', label: 'Sawtooth (날카로움)', icon: '🟧' },
|
||||
],
|
||||
|
||||
presetCategories: [
|
||||
{ code: 'all', label: '전체' },
|
||||
{ code: 'corporate', label: '기업 시그널' },
|
||||
{ code: 'notification', label: '알림/메시지' },
|
||||
{ code: 'status', label: '상태/피드백' },
|
||||
{ code: 'transition', label: '전환 효과' },
|
||||
{ code: 'game', label: '게임 효과' },
|
||||
{ code: 'ui', label: 'UI 인터랙션' },
|
||||
{ code: 'jingle', label: '브랜드 징글' },
|
||||
{ code: 'broadcast', label: '방송/미디어' },
|
||||
],
|
||||
|
||||
allNotes: [
|
||||
'C3','D3','E3','F3','G3','A3','B3',
|
||||
'C4','D4','E4','F4','G4','A4','B4',
|
||||
@@ -447,108 +472,177 @@ function soundLogo() {
|
||||
},
|
||||
|
||||
presets: [
|
||||
{
|
||||
name: '기업 시그널 (밝음)', icon: '🏢', style: 'Intel 스타일', duration: '1.5', desc: '밝고 미래적인 5음 시그널',
|
||||
synth: 'sine', adsr: { attack: 10, decay: 80, sustain: 0.6, release: 400 }, volume: 0.8, reverb: 0.3,
|
||||
notes: [
|
||||
{ type:'note', note:'G5', duration: 0.18, velocity: 0.8 },
|
||||
{ type:'note', note:'D5', duration: 0.18, velocity: 0.9 },
|
||||
{ type:'note', note:'G5', duration: 0.18, velocity: 0.7 },
|
||||
{ type:'note', note:'D5', duration: 0.18, velocity: 0.8 },
|
||||
{ type:'note', note:'G5', duration: 0.50, velocity: 1.0 },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: '기업 시그널 (무게감)', icon: '🎬', style: 'Netflix 스타일', duration: '2.5', desc: '깊은 울림의 2음 시그널',
|
||||
synth: 'sine', adsr: { attack: 30, decay: 200, sustain: 0.8, release: 2000 }, volume: 0.9, reverb: 0.6,
|
||||
notes: [
|
||||
{ type:'chord', chord:['D3','A3'], duration: 0.6, velocity: 0.9 },
|
||||
{ type:'rest', duration: 0.15 },
|
||||
{ type:'chord', chord:['D3','A3','D4','F#4'], duration: 1.2, velocity: 1.0 },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: '알림음 (경쾌)', icon: '💬', style: '카카오톡 스타일', duration: '0.5', desc: '짧고 귀여운 2음 알림',
|
||||
synth: 'triangle', adsr: { attack: 5, decay: 50, sustain: 0.4, release: 200 }, volume: 0.7, reverb: 0.1,
|
||||
notes: [
|
||||
{ type:'note', note:'E5', duration: 0.12, velocity: 0.8 },
|
||||
{ type:'note', note:'A5', duration: 0.20, velocity: 0.9 },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: '알림음 (정보)', icon: '🔔', style: 'Slack 스타일', duration: '1.0', desc: '차분한 3음 정보 알림',
|
||||
synth: 'sine', adsr: { attack: 10, decay: 80, sustain: 0.5, release: 300 }, volume: 0.6, reverb: 0.2,
|
||||
notes: [
|
||||
{ type:'note', note:'C5', duration: 0.15, velocity: 0.7 },
|
||||
{ type:'note', note:'E5', duration: 0.15, velocity: 0.8 },
|
||||
{ type:'note', note:'G5', duration: 0.30, velocity: 0.9 },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: '성공 사운드', icon: '✅', style: '레벨업', duration: '1.0', desc: '상승 진행 4음 성공 효과',
|
||||
synth: 'triangle', adsr: { attack: 5, decay: 60, sustain: 0.5, release: 400 }, volume: 0.7, reverb: 0.3,
|
||||
notes: [
|
||||
{ type:'note', note:'C5', duration: 0.12, velocity: 0.7 },
|
||||
{ type:'note', note:'E5', duration: 0.12, velocity: 0.8 },
|
||||
{ type:'note', note:'G5', duration: 0.12, velocity: 0.9 },
|
||||
{ type:'note', note:'C6', duration: 0.40, velocity: 1.0 },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: '에러 사운드', icon: '❌', style: '경고음', duration: '0.5', desc: '낮은 2음 하강 경고',
|
||||
synth: 'square', adsr: { attack: 5, decay: 40, sustain: 0.3, release: 150 }, volume: 0.5, reverb: 0.1,
|
||||
notes: [
|
||||
{ type:'note', note:'E4', duration: 0.15, velocity: 0.8 },
|
||||
{ type:'note', note:'C4', duration: 0.25, velocity: 0.9 },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: '전환 효과 (업)', icon: '⬆️', style: '상승 스윕', duration: '0.5', desc: '빠른 상승 전환음',
|
||||
synth: 'sine', adsr: { attack: 5, decay: 30, sustain: 0.3, release: 100 }, volume: 0.5, reverb: 0.2,
|
||||
notes: [
|
||||
{ type:'note', note:'C4', duration: 0.06, velocity: 0.5 },
|
||||
{ type:'note', note:'E4', duration: 0.06, velocity: 0.6 },
|
||||
{ type:'note', note:'G4', duration: 0.06, velocity: 0.7 },
|
||||
{ type:'note', note:'C5', duration: 0.06, velocity: 0.8 },
|
||||
{ type:'note', note:'E5', duration: 0.06, velocity: 0.9 },
|
||||
{ type:'note', note:'G5', duration: 0.10, velocity: 1.0 },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: '전환 효과 (다운)', icon: '⬇️', style: '하강 스윕', duration: '0.5', desc: '빠른 하강 전환음',
|
||||
synth: 'sine', adsr: { attack: 5, decay: 30, sustain: 0.3, release: 100 }, volume: 0.5, reverb: 0.2,
|
||||
notes: [
|
||||
{ type:'note', note:'G5', duration: 0.06, velocity: 1.0 },
|
||||
{ type:'note', note:'E5', duration: 0.06, velocity: 0.9 },
|
||||
{ type:'note', note:'C5', duration: 0.06, velocity: 0.8 },
|
||||
{ type:'note', note:'G4', duration: 0.06, velocity: 0.7 },
|
||||
{ type:'note', note:'E4', duration: 0.06, velocity: 0.6 },
|
||||
{ type:'note', note:'C4', duration: 0.10, velocity: 0.5 },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: '팡파레', icon: '🎉', style: '축하', duration: '2.0', desc: '화려한 6음 축하 팡파레',
|
||||
synth: 'triangle', adsr: { attack: 10, decay: 100, sustain: 0.6, release: 600 }, volume: 0.8, reverb: 0.4,
|
||||
notes: [
|
||||
{ type:'note', note:'G4', duration: 0.12, velocity: 0.7 },
|
||||
{ type:'note', note:'C5', duration: 0.12, velocity: 0.8 },
|
||||
{ type:'note', note:'E5', duration: 0.12, velocity: 0.9 },
|
||||
{ type:'rest', duration: 0.08 },
|
||||
{ type:'note', note:'G5', duration: 0.20, velocity: 1.0 },
|
||||
{ type:'rest', duration: 0.06 },
|
||||
{ type:'chord', chord:['C5','E5','G5','C6'], duration: 0.80, velocity: 1.0 },
|
||||
]
|
||||
},
|
||||
{
|
||||
name: '로딩 루프', icon: '🔄', style: '반복 패턴', duration: '1.5', desc: '리듬감 있는 4음 대기 루프',
|
||||
synth: 'sine', adsr: { attack: 10, decay: 60, sustain: 0.4, release: 200 }, volume: 0.5, reverb: 0.2,
|
||||
notes: [
|
||||
{ type:'note', note:'E4', duration: 0.15, velocity: 0.6 },
|
||||
{ type:'note', note:'G4', duration: 0.15, velocity: 0.7 },
|
||||
{ type:'note', note:'A4', duration: 0.15, velocity: 0.8 },
|
||||
{ type:'note', note:'G4', duration: 0.15, velocity: 0.6 },
|
||||
]
|
||||
},
|
||||
// ━━━ 기업 시그널 (Corporate) ━━━
|
||||
{ cat:'corporate', name:'기업 시그널 (밝음)', icon:'🏢', style:'Intel 스타일', duration:'1.5', desc:'밝고 미래적인 5음 시그널',
|
||||
synth:'sine', adsr:{attack:10,decay:80,sustain:0.6,release:400}, volume:0.8, reverb:0.3,
|
||||
notes:[{type:'note',note:'G5',duration:0.18,velocity:0.8},{type:'note',note:'D5',duration:0.18,velocity:0.9},{type:'note',note:'G5',duration:0.18,velocity:0.7},{type:'note',note:'D5',duration:0.18,velocity:0.8},{type:'note',note:'G5',duration:0.50,velocity:1.0}] },
|
||||
{ cat:'corporate', name:'기업 시그널 (무게감)', icon:'🎬', style:'Netflix 스타일', duration:'2.5', desc:'깊은 울림의 코드 시그널',
|
||||
synth:'sine', adsr:{attack:30,decay:200,sustain:0.8,release:2000}, volume:0.9, reverb:0.6,
|
||||
notes:[{type:'chord',chord:['D3','A3'],duration:0.6,velocity:0.9},{type:'rest',duration:0.15},{type:'chord',chord:['D3','A3','D4','F#4'],duration:1.2,velocity:1.0}] },
|
||||
{ cat:'corporate', name:'기업 시그널 (미래)', icon:'🚀', style:'Microsoft 스타일', duration:'2.0', desc:'상승 4음 테크 시그널',
|
||||
synth:'sine', adsr:{attack:20,decay:100,sustain:0.7,release:600}, volume:0.8, reverb:0.4,
|
||||
notes:[{type:'note',note:'E4',duration:0.25,velocity:0.6},{type:'note',note:'B4',duration:0.25,velocity:0.7},{type:'note',note:'D#5',duration:0.25,velocity:0.8},{type:'note',note:'E5',duration:0.60,velocity:1.0}] },
|
||||
{ cat:'corporate', name:'기업 시그널 (단순)', icon:'🍎', style:'Apple 스타일', duration:'1.0', desc:'미니멀 단음 + 여운',
|
||||
synth:'sine', adsr:{attack:50,decay:150,sustain:0.8,release:1500}, volume:0.7, reverb:0.5,
|
||||
notes:[{type:'note',note:'C5',duration:0.80,velocity:0.9}] },
|
||||
{ cat:'corporate', name:'기업 시그널 (반복)', icon:'📱', style:'Samsung 스타일', duration:'1.0', desc:'경쾌한 3음 반복 패턴',
|
||||
synth:'triangle', adsr:{attack:5,decay:50,sustain:0.5,release:200}, volume:0.7, reverb:0.2,
|
||||
notes:[{type:'note',note:'E5',duration:0.12,velocity:0.7},{type:'note',note:'E5',duration:0.12,velocity:0.8},{type:'rest',duration:0.05},{type:'note',note:'G5',duration:0.12,velocity:0.9},{type:'note',note:'E5',duration:0.30,velocity:1.0}] },
|
||||
{ cat:'corporate', name:'기업 시그널 (디지털)', icon:'💻', style:'스타트업', duration:'1.5', desc:'디지털 아르페지오 상승',
|
||||
synth:'square', adsr:{attack:5,decay:40,sustain:0.4,release:300}, volume:0.5, reverb:0.2,
|
||||
notes:[{type:'note',note:'C4',duration:0.10,velocity:0.5},{type:'note',note:'E4',duration:0.10,velocity:0.6},{type:'note',note:'G4',duration:0.10,velocity:0.7},{type:'note',note:'C5',duration:0.10,velocity:0.8},{type:'note',note:'E5',duration:0.40,velocity:1.0}] },
|
||||
{ cat:'corporate', name:'기업 시그널 (프리미엄)', icon:'👑', style:'럭셔리', duration:'3.0', desc:'깊은 베이스 + 하이 코드',
|
||||
synth:'sine', adsr:{attack:40,decay:200,sustain:0.8,release:2500}, volume:0.9, reverb:0.7,
|
||||
notes:[{type:'note',note:'F3',duration:0.8,velocity:0.7},{type:'rest',duration:0.2},{type:'chord',chord:['C4','E4','G4','C5'],duration:1.5,velocity:1.0}] },
|
||||
|
||||
// ━━━ 알림/메시지 (Notification) ━━━
|
||||
{ cat:'notification', name:'알림음 (경쾌)', icon:'💬', style:'카카오톡 스타일', duration:'0.5', desc:'짧고 귀여운 2음 알림',
|
||||
synth:'triangle', adsr:{attack:5,decay:50,sustain:0.4,release:200}, volume:0.7, reverb:0.1,
|
||||
notes:[{type:'note',note:'E5',duration:0.12,velocity:0.8},{type:'note',note:'A5',duration:0.20,velocity:0.9}] },
|
||||
{ cat:'notification', name:'알림음 (정보)', icon:'🔔', style:'Slack 스타일', duration:'1.0', desc:'차분한 3음 정보 알림',
|
||||
synth:'sine', adsr:{attack:10,decay:80,sustain:0.5,release:300}, volume:0.6, reverb:0.2,
|
||||
notes:[{type:'note',note:'C5',duration:0.15,velocity:0.7},{type:'note',note:'E5',duration:0.15,velocity:0.8},{type:'note',note:'G5',duration:0.30,velocity:0.9}] },
|
||||
{ cat:'notification', name:'알림음 (부드러움)', icon:'🕊️', style:'iMessage 스타일', duration:'0.8', desc:'부드러운 상승 3음',
|
||||
synth:'sine', adsr:{attack:15,decay:60,sustain:0.6,release:400}, volume:0.6, reverb:0.3,
|
||||
notes:[{type:'note',note:'F5',duration:0.12,velocity:0.6},{type:'note',note:'A5',duration:0.12,velocity:0.7},{type:'note',note:'C6',duration:0.30,velocity:0.8}] },
|
||||
{ cat:'notification', name:'알림음 (채팅)', icon:'💭', style:'Discord 스타일', duration:'0.4', desc:'빠른 2음 팝 사운드',
|
||||
synth:'triangle', adsr:{attack:3,decay:30,sustain:0.3,release:150}, volume:0.6, reverb:0.1,
|
||||
notes:[{type:'note',note:'E4',duration:0.08,velocity:0.7},{type:'note',note:'G4',duration:0.15,velocity:0.8}] },
|
||||
{ cat:'notification', name:'알림음 (이메일)', icon:'📧', style:'전통 메일', duration:'1.2', desc:'클래식 메일 도착음',
|
||||
synth:'sine', adsr:{attack:10,decay:100,sustain:0.5,release:500}, volume:0.6, reverb:0.3,
|
||||
notes:[{type:'note',note:'E5',duration:0.15,velocity:0.7},{type:'rest',duration:0.05},{type:'note',note:'E5',duration:0.12,velocity:0.8},{type:'note',note:'G5',duration:0.25,velocity:0.7},{type:'note',note:'E5',duration:0.35,velocity:0.6}] },
|
||||
{ cat:'notification', name:'알림음 (긴급)', icon:'🚨', style:'긴급 알림', duration:'0.8', desc:'빠른 반복 긴급 알림',
|
||||
synth:'square', adsr:{attack:3,decay:20,sustain:0.5,release:80}, volume:0.7, reverb:0.1,
|
||||
notes:[{type:'note',note:'A5',duration:0.08,velocity:0.9},{type:'rest',duration:0.03},{type:'note',note:'A5',duration:0.08,velocity:1.0},{type:'rest',duration:0.03},{type:'note',note:'A5',duration:0.08,velocity:1.0},{type:'rest',duration:0.03},{type:'note',note:'A5',duration:0.15,velocity:1.0}] },
|
||||
{ cat:'notification', name:'알림음 (리마인더)', icon:'⏰', style:'차임벨', duration:'1.5', desc:'은은한 차임 리마인더',
|
||||
synth:'sine', adsr:{attack:20,decay:120,sustain:0.5,release:800}, volume:0.5, reverb:0.5,
|
||||
notes:[{type:'note',note:'G5',duration:0.25,velocity:0.7},{type:'note',note:'E5',duration:0.25,velocity:0.6},{type:'note',note:'C5',duration:0.25,velocity:0.5},{type:'note',note:'G5',duration:0.50,velocity:0.8}] },
|
||||
|
||||
// ━━━ 상태/피드백 (Status) ━━━
|
||||
{ cat:'status', name:'성공 사운드', icon:'✅', style:'레벨업', duration:'1.0', desc:'상승 진행 4음 성공 효과',
|
||||
synth:'triangle', adsr:{attack:5,decay:60,sustain:0.5,release:400}, volume:0.7, reverb:0.3,
|
||||
notes:[{type:'note',note:'C5',duration:0.12,velocity:0.7},{type:'note',note:'E5',duration:0.12,velocity:0.8},{type:'note',note:'G5',duration:0.12,velocity:0.9},{type:'note',note:'C6',duration:0.40,velocity:1.0}] },
|
||||
{ cat:'status', name:'에러 사운드', icon:'❌', style:'경고음', duration:'0.5', desc:'낮은 2음 하강 경고',
|
||||
synth:'square', adsr:{attack:5,decay:40,sustain:0.3,release:150}, volume:0.5, reverb:0.1,
|
||||
notes:[{type:'note',note:'E4',duration:0.15,velocity:0.8},{type:'note',note:'C4',duration:0.25,velocity:0.9}] },
|
||||
{ cat:'status', name:'경고음', icon:'⚠️', style:'주의', duration:'1.0', desc:'반복되는 주의 경고',
|
||||
synth:'sawtooth', adsr:{attack:5,decay:30,sustain:0.4,release:100}, volume:0.4, reverb:0.1,
|
||||
notes:[{type:'note',note:'A4',duration:0.12,velocity:0.8},{type:'rest',duration:0.08},{type:'note',note:'A4',duration:0.12,velocity:0.9},{type:'rest',duration:0.08},{type:'note',note:'A4',duration:0.30,velocity:1.0}] },
|
||||
{ cat:'status', name:'완료 사운드', icon:'🎯', style:'태스크 완료', duration:'0.8', desc:'깔끔한 완료 확인음',
|
||||
synth:'sine', adsr:{attack:5,decay:50,sustain:0.5,release:300}, volume:0.6, reverb:0.2,
|
||||
notes:[{type:'note',note:'G4',duration:0.10,velocity:0.6},{type:'note',note:'D5',duration:0.10,velocity:0.7},{type:'note',note:'G5',duration:0.30,velocity:0.9}] },
|
||||
{ cat:'status', name:'취소 사운드', icon:'↩️', style:'되돌리기', duration:'0.5', desc:'부드러운 하강 취소음',
|
||||
synth:'sine', adsr:{attack:10,decay:60,sustain:0.4,release:200}, volume:0.5, reverb:0.2,
|
||||
notes:[{type:'note',note:'B4',duration:0.12,velocity:0.6},{type:'note',note:'G4',duration:0.20,velocity:0.5}] },
|
||||
{ cat:'status', name:'연결 성공', icon:'🔗', style:'커넥트', duration:'0.8', desc:'상승 2음 연결 확인',
|
||||
synth:'sine', adsr:{attack:10,decay:80,sustain:0.6,release:350}, volume:0.6, reverb:0.3,
|
||||
notes:[{type:'note',note:'D5',duration:0.15,velocity:0.7},{type:'note',note:'A5',duration:0.35,velocity:0.9}] },
|
||||
{ cat:'status', name:'연결 해제', icon:'🔌', style:'디스커넥트', duration:'0.8', desc:'하강 2음 연결 해제',
|
||||
synth:'sine', adsr:{attack:10,decay:80,sustain:0.5,release:350}, volume:0.5, reverb:0.3,
|
||||
notes:[{type:'note',note:'A5',duration:0.15,velocity:0.7},{type:'note',note:'D5',duration:0.35,velocity:0.5}] },
|
||||
|
||||
// ━━━ 전환 효과 (Transition) ━━━
|
||||
{ cat:'transition', name:'전환 효과 (업)', icon:'⬆️', style:'상승 스윕', duration:'0.5', desc:'빠른 상승 전환음',
|
||||
synth:'sine', adsr:{attack:5,decay:30,sustain:0.3,release:100}, volume:0.5, reverb:0.2,
|
||||
notes:[{type:'note',note:'C4',duration:0.06,velocity:0.5},{type:'note',note:'E4',duration:0.06,velocity:0.6},{type:'note',note:'G4',duration:0.06,velocity:0.7},{type:'note',note:'C5',duration:0.06,velocity:0.8},{type:'note',note:'E5',duration:0.06,velocity:0.9},{type:'note',note:'G5',duration:0.10,velocity:1.0}] },
|
||||
{ cat:'transition', name:'전환 효과 (다운)', icon:'⬇️', style:'하강 스윕', duration:'0.5', desc:'빠른 하강 전환음',
|
||||
synth:'sine', adsr:{attack:5,decay:30,sustain:0.3,release:100}, volume:0.5, reverb:0.2,
|
||||
notes:[{type:'note',note:'G5',duration:0.06,velocity:1.0},{type:'note',note:'E5',duration:0.06,velocity:0.9},{type:'note',note:'C5',duration:0.06,velocity:0.8},{type:'note',note:'G4',duration:0.06,velocity:0.7},{type:'note',note:'E4',duration:0.06,velocity:0.6},{type:'note',note:'C4',duration:0.10,velocity:0.5}] },
|
||||
{ cat:'transition', name:'전환 (스파크)', icon:'✨', style:'반짝임', duration:'0.6', desc:'높은 음역의 반짝이는 전환',
|
||||
synth:'sine', adsr:{attack:3,decay:20,sustain:0.2,release:150}, volume:0.4, reverb:0.4,
|
||||
notes:[{type:'note',note:'C6',duration:0.05,velocity:0.9},{type:'note',note:'G5',duration:0.05,velocity:0.7},{type:'note',note:'C6',duration:0.05,velocity:1.0},{type:'note',note:'E5',duration:0.05,velocity:0.6},{type:'note',note:'G5',duration:0.05,velocity:0.8},{type:'note',note:'C6',duration:0.15,velocity:1.0}] },
|
||||
{ cat:'transition', name:'전환 (워프)', icon:'🌀', style:'워프/이동', duration:'0.8', desc:'공간 이동 느낌의 전환',
|
||||
synth:'sawtooth', adsr:{attack:5,decay:50,sustain:0.3,release:200}, volume:0.3, reverb:0.5,
|
||||
notes:[{type:'note',note:'C3',duration:0.08,velocity:0.4},{type:'note',note:'G3',duration:0.08,velocity:0.5},{type:'note',note:'E4',duration:0.08,velocity:0.6},{type:'note',note:'C5',duration:0.08,velocity:0.7},{type:'note',note:'G5',duration:0.08,velocity:0.8},{type:'note',note:'C6',duration:0.20,velocity:0.9}] },
|
||||
{ cat:'transition', name:'전환 (클릭)', icon:'🔘', style:'기계적', duration:'0.2', desc:'짧은 기계적 클릭 전환',
|
||||
synth:'square', adsr:{attack:1,decay:10,sustain:0.2,release:50}, volume:0.4, reverb:0.0,
|
||||
notes:[{type:'note',note:'C5',duration:0.03,velocity:0.9},{type:'rest',duration:0.02},{type:'note',note:'G5',duration:0.05,velocity:0.7}] },
|
||||
{ cat:'transition', name:'전환 (슬라이드)', icon:'➡️', style:'글라이드', duration:'0.6', desc:'부드러운 슬라이드 전환',
|
||||
synth:'sine', adsr:{attack:20,decay:40,sustain:0.5,release:200}, volume:0.5, reverb:0.3,
|
||||
notes:[{type:'note',note:'E4',duration:0.08,velocity:0.5},{type:'note',note:'F4',duration:0.08,velocity:0.5},{type:'note',note:'G4',duration:0.08,velocity:0.6},{type:'note',note:'A4',duration:0.08,velocity:0.6},{type:'note',note:'B4',duration:0.08,velocity:0.7},{type:'note',note:'C5',duration:0.15,velocity:0.8}] },
|
||||
|
||||
// ━━━ 게임 효과 (Game) ━━━
|
||||
{ cat:'game', name:'코인 획득', icon:'🪙', style:'마리오 스타일', duration:'0.4', desc:'경쾌한 코인 수집 효과',
|
||||
synth:'square', adsr:{attack:2,decay:20,sustain:0.3,release:100}, volume:0.5, reverb:0.1,
|
||||
notes:[{type:'note',note:'E5',duration:0.08,velocity:0.8},{type:'note',note:'B5',duration:0.20,velocity:1.0}] },
|
||||
{ cat:'game', name:'파워업', icon:'⚡', style:'버프', duration:'1.0', desc:'상승 아르페지오 파워업',
|
||||
synth:'square', adsr:{attack:3,decay:30,sustain:0.4,release:150}, volume:0.5, reverb:0.2,
|
||||
notes:[{type:'note',note:'C4',duration:0.06,velocity:0.5},{type:'note',note:'E4',duration:0.06,velocity:0.6},{type:'note',note:'G4',duration:0.06,velocity:0.7},{type:'note',note:'C5',duration:0.06,velocity:0.8},{type:'note',note:'E5',duration:0.06,velocity:0.9},{type:'note',note:'G5',duration:0.06,velocity:1.0},{type:'note',note:'C6',duration:0.30,velocity:1.0}] },
|
||||
{ cat:'game', name:'게임 오버', icon:'💀', style:'패배', duration:'2.0', desc:'하강 반음계 게임 오버',
|
||||
synth:'sawtooth', adsr:{attack:10,decay:100,sustain:0.5,release:800}, volume:0.5, reverb:0.4,
|
||||
notes:[{type:'note',note:'E4',duration:0.20,velocity:0.8},{type:'note',note:'D#4',duration:0.20,velocity:0.7},{type:'note',note:'D4',duration:0.20,velocity:0.6},{type:'note',note:'C#4',duration:0.20,velocity:0.5},{type:'note',note:'C4',duration:0.60,velocity:0.4}] },
|
||||
{ cat:'game', name:'보너스', icon:'🎁', style:'보상', duration:'0.8', desc:'빠른 팡파레 보너스',
|
||||
synth:'triangle', adsr:{attack:3,decay:40,sustain:0.4,release:200}, volume:0.6, reverb:0.2,
|
||||
notes:[{type:'note',note:'C5',duration:0.06,velocity:0.7},{type:'note',note:'E5',duration:0.06,velocity:0.8},{type:'note',note:'G5',duration:0.06,velocity:0.9},{type:'rest',duration:0.03},{type:'note',note:'C5',duration:0.06,velocity:0.7},{type:'note',note:'E5',duration:0.06,velocity:0.8},{type:'note',note:'G5',duration:0.06,velocity:0.9},{type:'note',note:'C6',duration:0.25,velocity:1.0}] },
|
||||
{ cat:'game', name:'점프', icon:'🦘', style:'액션', duration:'0.3', desc:'짧은 상승 점프 효과',
|
||||
synth:'square', adsr:{attack:2,decay:15,sustain:0.2,release:80}, volume:0.5, reverb:0.1,
|
||||
notes:[{type:'note',note:'C4',duration:0.05,velocity:0.7},{type:'note',note:'G4',duration:0.10,velocity:0.9}] },
|
||||
{ cat:'game', name:'아이템 드롭', icon:'📦', style:'드롭', duration:'0.5', desc:'하강 아이템 획득음',
|
||||
synth:'triangle', adsr:{attack:3,decay:25,sustain:0.3,release:120}, volume:0.5, reverb:0.2,
|
||||
notes:[{type:'note',note:'G5',duration:0.06,velocity:0.8},{type:'note',note:'E5',duration:0.06,velocity:0.7},{type:'note',note:'C5',duration:0.06,velocity:0.6},{type:'note',note:'G4',duration:0.15,velocity:0.9}] },
|
||||
|
||||
// ━━━ UI 인터랙션 (UI) ━━━
|
||||
{ cat:'ui', name:'버튼 클릭', icon:'👆', style:'탭', duration:'0.1', desc:'미세한 버튼 터치 피드백',
|
||||
synth:'sine', adsr:{attack:1,decay:10,sustain:0.1,release:50}, volume:0.3, reverb:0.0,
|
||||
notes:[{type:'note',note:'C5',duration:0.05,velocity:0.6}] },
|
||||
{ cat:'ui', name:'토글 On', icon:'🟢', style:'활성화', duration:'0.2', desc:'상승 2음 토글 켜기',
|
||||
synth:'sine', adsr:{attack:3,decay:20,sustain:0.3,release:100}, volume:0.4, reverb:0.1,
|
||||
notes:[{type:'note',note:'E5',duration:0.06,velocity:0.6},{type:'note',note:'A5',duration:0.10,velocity:0.8}] },
|
||||
{ cat:'ui', name:'토글 Off', icon:'🔴', style:'비활성화', duration:'0.2', desc:'하강 2음 토글 끄기',
|
||||
synth:'sine', adsr:{attack:3,decay:20,sustain:0.3,release:100}, volume:0.4, reverb:0.1,
|
||||
notes:[{type:'note',note:'A5',duration:0.06,velocity:0.6},{type:'note',note:'E5',duration:0.10,velocity:0.5}] },
|
||||
{ cat:'ui', name:'스와이프', icon:'👉', style:'제스처', duration:'0.3', desc:'부드러운 스와이프 피드백',
|
||||
synth:'sine', adsr:{attack:5,decay:15,sustain:0.2,release:80}, volume:0.3, reverb:0.2,
|
||||
notes:[{type:'note',note:'G4',duration:0.04,velocity:0.4},{type:'note',note:'B4',duration:0.04,velocity:0.5},{type:'note',note:'D5',duration:0.04,velocity:0.6},{type:'note',note:'G5',duration:0.08,velocity:0.7}] },
|
||||
{ cat:'ui', name:'팝업 등장', icon:'💡', style:'어텐션', duration:'0.4', desc:'팝업 알림 등장 효과',
|
||||
synth:'triangle', adsr:{attack:5,decay:30,sustain:0.4,release:150}, volume:0.5, reverb:0.2,
|
||||
notes:[{type:'note',note:'G4',duration:0.08,velocity:0.6},{type:'note',note:'C5',duration:0.08,velocity:0.7},{type:'note',note:'E5',duration:0.15,velocity:0.9}] },
|
||||
{ cat:'ui', name:'드래그 시작', icon:'✊', style:'그랩', duration:'0.15', desc:'드래그 시작 피드백',
|
||||
synth:'sine', adsr:{attack:2,decay:10,sustain:0.2,release:40}, volume:0.3, reverb:0.0,
|
||||
notes:[{type:'note',note:'D5',duration:0.04,velocity:0.5},{type:'note',note:'F5',duration:0.06,velocity:0.6}] },
|
||||
|
||||
// ━━━ 브랜드 징글 (Jingle) ━━━
|
||||
{ cat:'jingle', name:'팡파레', icon:'🎉', style:'축하', duration:'2.0', desc:'화려한 축하 팡파레',
|
||||
synth:'triangle', adsr:{attack:10,decay:100,sustain:0.6,release:600}, volume:0.8, reverb:0.4,
|
||||
notes:[{type:'note',note:'G4',duration:0.12,velocity:0.7},{type:'note',note:'C5',duration:0.12,velocity:0.8},{type:'note',note:'E5',duration:0.12,velocity:0.9},{type:'rest',duration:0.08},{type:'note',note:'G5',duration:0.20,velocity:1.0},{type:'rest',duration:0.06},{type:'chord',chord:['C5','E5','G5','C6'],duration:0.80,velocity:1.0}] },
|
||||
{ cat:'jingle', name:'엔딩 징글', icon:'🔚', style:'마무리', duration:'2.0', desc:'깔끔한 하강 마무리 멜로디',
|
||||
synth:'sine', adsr:{attack:15,decay:100,sustain:0.6,release:800}, volume:0.7, reverb:0.4,
|
||||
notes:[{type:'note',note:'G5',duration:0.20,velocity:0.8},{type:'note',note:'E5',duration:0.20,velocity:0.7},{type:'note',note:'C5',duration:0.20,velocity:0.8},{type:'rest',duration:0.10},{type:'chord',chord:['C4','E4','G4'],duration:0.80,velocity:0.9}] },
|
||||
{ cat:'jingle', name:'오프닝 징글', icon:'🎪', style:'시작', duration:'2.0', desc:'밝은 상승 오프닝 멜로디',
|
||||
synth:'triangle', adsr:{attack:10,decay:80,sustain:0.6,release:500}, volume:0.8, reverb:0.3,
|
||||
notes:[{type:'note',note:'C4',duration:0.15,velocity:0.6},{type:'note',note:'E4',duration:0.15,velocity:0.7},{type:'note',note:'G4',duration:0.15,velocity:0.8},{type:'note',note:'C5',duration:0.15,velocity:0.9},{type:'rest',duration:0.05},{type:'chord',chord:['E5','G5','C6'],duration:0.80,velocity:1.0}] },
|
||||
{ cat:'jingle', name:'멜로디 루프', icon:'🔁', style:'반복 멜로디', duration:'2.0', desc:'중독성 있는 루프 멜로디',
|
||||
synth:'sine', adsr:{attack:10,decay:60,sustain:0.5,release:300}, volume:0.6, reverb:0.3,
|
||||
notes:[{type:'note',note:'E5',duration:0.20,velocity:0.7},{type:'note',note:'G5',duration:0.15,velocity:0.8},{type:'note',note:'A5',duration:0.15,velocity:0.9},{type:'note',note:'G5',duration:0.20,velocity:0.7},{type:'note',note:'E5',duration:0.15,velocity:0.8},{type:'note',note:'D5',duration:0.15,velocity:0.7},{type:'note',note:'C5',duration:0.30,velocity:0.6}] },
|
||||
{ cat:'jingle', name:'록 시그널', icon:'🎸', style:'파워 코드', duration:'1.5', desc:'강렬한 파워 코드 시그널',
|
||||
synth:'sawtooth', adsr:{attack:5,decay:60,sustain:0.5,release:400}, volume:0.6, reverb:0.3,
|
||||
notes:[{type:'chord',chord:['E3','B3','E4'],duration:0.30,velocity:1.0},{type:'rest',duration:0.05},{type:'chord',chord:['G3','D4','G4'],duration:0.30,velocity:0.9},{type:'rest',duration:0.05},{type:'chord',chord:['A3','E4','A4'],duration:0.50,velocity:1.0}] },
|
||||
{ cat:'jingle', name:'재즈 시그널', icon:'🎷', style:'스윙', duration:'2.0', desc:'세련된 재즈 코드 진행',
|
||||
synth:'sine', adsr:{attack:20,decay:120,sustain:0.7,release:600}, volume:0.7, reverb:0.5,
|
||||
notes:[{type:'chord',chord:['C4','E4','G4','B4'],duration:0.40,velocity:0.7},{type:'rest',duration:0.10},{type:'chord',chord:['F4','A4','C5','E5'],duration:0.40,velocity:0.8},{type:'rest',duration:0.10},{type:'chord',chord:['G4','B4','D5','F5'],duration:0.40,velocity:0.9},{type:'chord',chord:['C4','E4','G4','C5'],duration:0.60,velocity:1.0}] },
|
||||
|
||||
// ━━━ 방송/미디어 (Broadcast) ━━━
|
||||
{ cat:'broadcast', name:'로딩 루프', icon:'🔄', style:'반복 패턴', duration:'1.5', desc:'리듬감 있는 4음 대기 루프',
|
||||
synth:'sine', adsr:{attack:10,decay:60,sustain:0.4,release:200}, volume:0.5, reverb:0.2,
|
||||
notes:[{type:'note',note:'E4',duration:0.15,velocity:0.6},{type:'note',note:'G4',duration:0.15,velocity:0.7},{type:'note',note:'A4',duration:0.15,velocity:0.8},{type:'note',note:'G4',duration:0.15,velocity:0.6}] },
|
||||
{ cat:'broadcast', name:'뉴스 인트로', icon:'📺', style:'뉴스 시그널', duration:'2.5', desc:'긴장감 있는 뉴스 오프닝',
|
||||
synth:'sine', adsr:{attack:15,decay:100,sustain:0.7,release:800}, volume:0.8, reverb:0.4,
|
||||
notes:[{type:'chord',chord:['C4','G4'],duration:0.25,velocity:0.7},{type:'chord',chord:['D4','A4'],duration:0.25,velocity:0.8},{type:'chord',chord:['E4','B4'],duration:0.25,velocity:0.9},{type:'rest',duration:0.10},{type:'chord',chord:['C4','E4','G4','C5'],duration:0.80,velocity:1.0}] },
|
||||
{ cat:'broadcast', name:'카운트다운', icon:'⏱️', style:'카운트', duration:'3.0', desc:'3-2-1 카운트다운 비프',
|
||||
synth:'square', adsr:{attack:3,decay:20,sustain:0.3,release:100}, volume:0.5, reverb:0.1,
|
||||
notes:[{type:'note',note:'C5',duration:0.10,velocity:0.6},{type:'rest',duration:0.60},{type:'note',note:'C5',duration:0.10,velocity:0.7},{type:'rest',duration:0.60},{type:'note',note:'C5',duration:0.10,velocity:0.8},{type:'rest',duration:0.30},{type:'note',note:'C6',duration:0.40,velocity:1.0}] },
|
||||
{ cat:'broadcast', name:'브레이킹 뉴스', icon:'🔴', style:'속보', duration:'1.5', desc:'긴급한 속보 알림음',
|
||||
synth:'sawtooth', adsr:{attack:5,decay:50,sustain:0.5,release:300}, volume:0.7, reverb:0.2,
|
||||
notes:[{type:'chord',chord:['E4','G#4','B4'],duration:0.15,velocity:1.0},{type:'rest',duration:0.05},{type:'chord',chord:['E4','G#4','B4'],duration:0.15,velocity:1.0},{type:'rest',duration:0.05},{type:'chord',chord:['E4','G#4','B4','E5'],duration:0.50,velocity:1.0}] },
|
||||
{ cat:'broadcast', name:'팟캐스트 인트로', icon:'🎙️', style:'캐주얼', duration:'2.0', desc:'따뜻하고 캐주얼한 인트로',
|
||||
synth:'triangle', adsr:{attack:20,decay:80,sustain:0.6,release:400}, volume:0.6, reverb:0.3,
|
||||
notes:[{type:'note',note:'G4',duration:0.20,velocity:0.6},{type:'note',note:'B4',duration:0.15,velocity:0.7},{type:'note',note:'D5',duration:0.15,velocity:0.8},{type:'note',note:'G5',duration:0.30,velocity:0.7},{type:'rest',duration:0.10},{type:'chord',chord:['G4','B4','D5'],duration:0.50,velocity:0.8}] },
|
||||
{ cat:'broadcast', name:'유튜브 인트로', icon:'▶️', style:'에너제틱', duration:'1.5', desc:'에너지 넘치는 인트로',
|
||||
synth:'sawtooth', adsr:{attack:5,decay:40,sustain:0.4,release:200}, volume:0.5, reverb:0.2,
|
||||
notes:[{type:'note',note:'E4',duration:0.08,velocity:0.7},{type:'note',note:'G4',duration:0.08,velocity:0.8},{type:'note',note:'B4',duration:0.08,velocity:0.9},{type:'rest',duration:0.03},{type:'chord',chord:['E4','G4','B4','E5'],duration:0.40,velocity:1.0}] },
|
||||
{ cat:'broadcast', name:'라디오 징글', icon:'📻', style:'클래식 라디오', duration:'2.0', desc:'클래식 라디오 스테이션 징글',
|
||||
synth:'sine', adsr:{attack:10,decay:80,sustain:0.6,release:500}, volume:0.7, reverb:0.4,
|
||||
notes:[{type:'note',note:'C5',duration:0.15,velocity:0.7},{type:'note',note:'D5',duration:0.10,velocity:0.7},{type:'note',note:'E5',duration:0.15,velocity:0.8},{type:'note',note:'G5',duration:0.10,velocity:0.8},{type:'note',note:'A5',duration:0.15,velocity:0.9},{type:'rest',duration:0.05},{type:'chord',chord:['C5','E5','G5'],duration:0.60,velocity:1.0}] },
|
||||
],
|
||||
|
||||
// ===== Init =====
|
||||
|
||||
Reference in New Issue
Block a user