|
86 | 86 | color: rgba(255, 220, 180, 0.85); |
87 | 87 | } |
88 | 88 |
|
89 | | - /* ---- 提示 ---- */ |
90 | 89 | #hint { |
91 | 90 | position: absolute; |
92 | 91 | bottom: max(16px, env(safe-area-inset-bottom) + 8px); |
|
101 | 100 | white-space: nowrap; |
102 | 101 | transition: opacity 0.8s ease; |
103 | 102 | } |
104 | | - |
105 | | - /* ---- 遮罩(含灵感来源和音量控制) ---- */ |
106 | 103 | #overlay { |
107 | 104 | position: absolute; |
108 | 105 | inset: 0; |
|
155 | 152 | } |
156 | 153 | } |
157 | 154 |
|
158 | | - /* 灵感来源链接 */ |
159 | 155 | .inspire-links { |
160 | 156 | display: flex; |
161 | 157 | gap: 18px; |
|
179 | 175 | border-color: rgba(255, 200, 150, 0.4); |
180 | 176 | } |
181 | 177 |
|
182 | | - /* 底部链接(在遮罩内) */ |
183 | | - .overlay-bottom-links { |
184 | | - display: flex; |
185 | | - gap: 16px; |
186 | | - align-items: center; |
187 | | - margin-top: 2px; |
188 | | - } |
189 | | - .overlay-bottom-links a { |
| 178 | + .footer-simple { |
| 179 | + margin-top: 2.8rem; |
| 180 | + padding-top: 1.2rem; |
| 181 | + border-top: 1px solid #928451; |
190 | 182 | display: flex; |
191 | | - align-items: center; |
| 183 | + flex-wrap: wrap; |
192 | 184 | justify-content: center; |
193 | | - width: 30px; |
194 | | - height: 30px; |
195 | | - color: rgba(255, 210, 160, 0.5); |
196 | | - transition: color 0.25s, transform 0.2s; |
197 | | - cursor: pointer; |
198 | | - pointer-events: auto; |
199 | | - } |
200 | | - .overlay-bottom-links a:hover { |
201 | | - color: rgba(255, 220, 180, 0.85); |
202 | | - transform: scale(1.12); |
| 185 | + gap: 1.2rem 2rem; |
| 186 | + font-size: 0.85rem; |
203 | 187 | } |
204 | | - .overlay-bottom-links svg { |
205 | | - width: 24px; |
206 | | - height: 24px; |
207 | | - fill: currentColor; |
208 | | - stroke: none; |
| 188 | + .footer-simple a { |
| 189 | + display: inline-flex; |
| 190 | + align-items: center; |
| 191 | + gap: 0.4rem; |
| 192 | + text-decoration: none; |
| 193 | + color: #f8efcf; |
| 194 | + background: rgba(0,0,0,0.4); |
| 195 | + padding: 0.4rem 1rem; |
| 196 | + border-radius: 40px; |
| 197 | + transition: 0.2s; |
209 | 198 | } |
| 199 | + .footer-simple a:hover { background: #b48b3f; color: #181d0e; } |
| 200 | + .footer-simple img { width: 18px; height: 18px; filter: invert(0.95); } |
210 | 201 |
|
211 | | - /* 音量控制 */ |
212 | 202 | .volume-control { |
213 | 203 | display: flex; |
214 | 204 | align-items: center; |
|
305 | 295 | .inspire-links a { |
306 | 296 | font-size: 11px; |
307 | 297 | } |
308 | | - .overlay-bottom-links a { |
309 | | - width: 26px; |
310 | | - height: 26px; |
311 | | - } |
312 | | - .overlay-bottom-links svg { |
313 | | - width: 20px; |
314 | | - height: 20px; |
315 | | - } |
316 | 298 | } |
317 | 299 | @media (max-height: 600px) { |
318 | 300 | .inspire-links { |
|
350 | 332 | <span class="vol-value" id="vol-value">25%</span> |
351 | 333 | </div> |
352 | 334 |
|
353 | | - <div class="overlay-bottom-links"> |
| 335 | + <div class="footer-simple"> |
354 | 336 | <a href="https://github.com/CraftSoul/kards-image-tool" target="_blank"><img src="https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/github.svg" alt="github"> GitHub</a> |
355 | 337 | <a href="https://space.bilibili.com/3546775476505152" target="_blank"><img src="https://cdn.jsdelivr.net/gh/simple-icons/simple-icons/icons/bilibili.svg" alt="bili"> BiliBili</a> |
356 | 338 | </div> |
357 | 339 | </div> |
358 | 340 | </div> |
359 | 341 |
|
360 | 342 | <script> |
361 | | - /* ============================================================ |
362 | | - * 拉伸Tap —— 四列音效 (boom, sla, sl, a) |
363 | | - * 行数6 · 音调反向 · 点击修复 · 量化播放 |
364 | | - * 音量:boom减半,a加倍 |
365 | | - * 遮罩含灵感来源和底部链接 |
366 | | - * ============================================================ */ |
367 | | - |
368 | 343 | // ---------- 常量 ---------- |
369 | 344 | const BPM = 128; |
370 | 345 | const SPB = 60 / BPM; |
|
375 | 350 | const INPUT_QUEUE_LOOKAHEAD = 0.03; |
376 | 351 |
|
377 | 352 | const COLS = 4; |
378 | | - const ROWS = 6; // 减少2行 |
379 | | - // 轨道顺序:boom, sla, sl, a |
380 | | - const SAMPLE_NAMES = ['boom', 'sla', 'sl', 'a']; |
| 353 | + const ROWS = 6; |
| 354 | + const SAMPLE_NAMES = ['boom', 'sla', 'sl', 'a'];//赤色黎明,拉,伸,朱可夫 |
381 | 355 | const SAMPLE_FILES = ['boom.wav', 'sla.wav', 'sl.wav', 'a.wav']; |
382 | 356 |
|
383 | 357 | // ---------- 全局状态 ---------- |
|
516 | 490 | loadedCount++; |
517 | 491 | if (loadedCount === SAMPLE_NAMES.length) { |
518 | 492 | loadComplete = true; |
519 | | - console.log('所有音效就绪(部分合成)'); |
| 493 | + console.log('所有音效就绪'); |
520 | 494 | } |
521 | 495 | }); |
522 | 496 | }); |
|
683 | 657 | const gain = ctx.createGain(); |
684 | 658 | let volFactor = 1.0; |
685 | 659 | if (sampleName === 'boom') volFactor = 0.5; |
686 | | - else if (sampleName === 'a') volFactor = 2.0; |
| 660 | + else if (sampleName === 'a') volFactor = 3.0; |
687 | 661 | const baseGain = 0.9 * volFactor; |
688 | 662 | gain.gain.setValueAtTime(baseGain, when); |
689 | 663 | gain.gain.exponentialRampToValueAtTime(0.001, when + 0.4); |
|
0 commit comments