|
14 | 14 | /> |
15 | 15 | <!-- OpenGraph Meta Tags --> |
16 | 16 | <meta property="og:title" content="Bitcoin Synth" /> |
17 | | - <meta property="og:description" content="A crazy experiment turning Bitcoin transactions into synth music!" /> |
18 | | - <meta property="og:image" content="https://turinglabsorg.github.io/bitcoin-synth/banner.png" /> |
| 17 | + <meta |
| 18 | + property="og:description" |
| 19 | + content="A crazy experiment turning Bitcoin transactions into synth music!" |
| 20 | + /> |
| 21 | + <meta |
| 22 | + property="og:image" |
| 23 | + content="https://turinglabsorg.github.io/bitcoin-synth/banner.png" |
| 24 | + /> |
19 | 25 | <meta property="og:type" content="website" /> |
20 | | - <meta property="og:url" content="https://turinglabsorg.github.io/bitcoin-synth/" /> |
| 26 | + <meta |
| 27 | + property="og:url" |
| 28 | + content="https://turinglabsorg.github.io/bitcoin-synth/" |
| 29 | + /> |
21 | 30 |
|
22 | 31 | <!-- Twitter Card Meta Tags --> |
23 | 32 | <meta name="twitter:card" content="summary_large_image" /> |
24 | 33 | <meta name="twitter:title" content="Bitcoin Synth" /> |
25 | | - <meta name="twitter:description" content="A crazy experiment turning Bitcoin transactions into synth music!" /> |
26 | | - <meta name="twitter:image" content="https://turinglabsorg.github.io/bitcoin-synth/banner.png" /> |
| 34 | + <meta |
| 35 | + name="twitter:description" |
| 36 | + content="A crazy experiment turning Bitcoin transactions into synth music!" |
| 37 | + /> |
| 38 | + <meta |
| 39 | + name="twitter:image" |
| 40 | + content="https://turinglabsorg.github.io/bitcoin-synth/banner.png" |
| 41 | + /> |
27 | 42 | <style> |
28 | 43 | html, |
29 | 44 | body { |
|
56 | 71 | font-family: "Roboto Mono", monospace; |
57 | 72 | position: relative; |
58 | 73 | justify-content: flex-start; |
59 | | - padding: 10px 70px 10px 10px; |
60 | 74 | } |
61 | 75 | .btcamp-header { |
62 | 76 | background: #181c20; |
|
284 | 298 | height: 100px; |
285 | 299 | width: 60px; |
286 | 300 | } |
287 | | - .synth-knob[type=range]::-webkit-slider-thumb { |
| 301 | + .synth-knob[type="range"]::-webkit-slider-thumb { |
288 | 302 | appearance: none; |
289 | 303 | width: 24px; |
290 | 304 | height: 24px; |
|
294 | 308 | box-shadow: none; |
295 | 309 | cursor: pointer; |
296 | 310 | } |
297 | | - .synth-knob[type=range]::-moz-range-thumb { |
| 311 | + .synth-knob[type="range"]::-moz-range-thumb { |
298 | 312 | width: 24px; |
299 | 313 | height: 24px; |
300 | 314 | border-radius: 50%; |
|
303 | 317 | box-shadow: none; |
304 | 318 | cursor: pointer; |
305 | 319 | } |
306 | | - .synth-knob[type=range]::-ms-thumb { |
| 320 | + .synth-knob[type="range"]::-ms-thumb { |
307 | 321 | width: 24px; |
308 | 322 | height: 24px; |
309 | 323 | border-radius: 50%; |
|
312 | 326 | box-shadow: none; |
313 | 327 | cursor: pointer; |
314 | 328 | } |
315 | | - .synth-knob[type=range] { |
| 329 | + .synth-knob[type="range"] { |
316 | 330 | background: #23272b; |
317 | 331 | width: 60px; |
318 | 332 | height: 60px; |
|
323 | 337 | border: 2px solid #888; |
324 | 338 | box-shadow: none; |
325 | 339 | } |
326 | | - .synth-knob[type=range]:focus { |
| 340 | + .synth-knob[type="range"]:focus { |
327 | 341 | border: 3px solid #00c3ff; |
328 | 342 | } |
329 | | - .synth-knob[type=range]::-webkit-slider-runnable-track { |
| 343 | + .synth-knob[type="range"]::-webkit-slider-runnable-track { |
330 | 344 | height: 100px; |
331 | 345 | background: transparent; |
332 | 346 | } |
333 | | - .synth-knob[type=range]::-ms-fill-lower { |
| 347 | + .synth-knob[type="range"]::-ms-fill-lower { |
334 | 348 | background: transparent; |
335 | 349 | } |
336 | | - .synth-knob[type=range]::-ms-fill-upper { |
| 350 | + .synth-knob[type="range"]::-ms-fill-upper { |
337 | 351 | background: transparent; |
338 | 352 | } |
339 | | - .synth-knob[type=range]:focus::-webkit-slider-runnable-track { |
| 353 | + .synth-knob[type="range"]:focus::-webkit-slider-runnable-track { |
340 | 354 | background: transparent; |
341 | 355 | } |
342 | | - .synth-knob[type=range]:focus::-ms-fill-lower { |
| 356 | + .synth-knob[type="range"]:focus::-ms-fill-lower { |
343 | 357 | background: transparent; |
344 | 358 | } |
345 | | - .synth-knob[type=range]:focus::-ms-fill-upper { |
| 359 | + .synth-knob[type="range"]:focus::-ms-fill-upper { |
346 | 360 | background: transparent; |
347 | 361 | } |
348 | | - .synth-knob[type=range]::-moz-range-track { |
| 362 | + .synth-knob[type="range"]::-moz-range-track { |
349 | 363 | height: 100px; |
350 | 364 | background: transparent; |
351 | 365 | } |
352 | | - .synth-knob[type=range]:focus::-moz-range-track { |
| 366 | + .synth-knob[type="range"]:focus::-moz-range-track { |
353 | 367 | background: transparent; |
354 | 368 | } |
355 | | - .synth-knob[type=range]:focus::-ms-fill-lower { |
| 369 | + .synth-knob[type="range"]:focus::-ms-fill-lower { |
356 | 370 | background: transparent; |
357 | 371 | } |
358 | | - .synth-knob[type=range]:focus::-ms-fill-upper { |
| 372 | + .synth-knob[type="range"]:focus::-ms-fill-upper { |
359 | 373 | background: transparent; |
360 | 374 | } |
361 | | - .synth-knob[type=range]:focus { |
| 375 | + .synth-knob[type="range"]:focus { |
362 | 376 | outline: none; |
363 | 377 | } |
364 | | - .synth-knob[type=range]:active::-webkit-slider-thumb { |
| 378 | + .synth-knob[type="range"]:active::-webkit-slider-thumb { |
365 | 379 | background: #00ffea; |
366 | 380 | } |
367 | | - .synth-knob[type=range]:active::-moz-range-thumb { |
| 381 | + .synth-knob[type="range"]:active::-moz-range-thumb { |
368 | 382 | background: #00ffea; |
369 | 383 | } |
370 | | - .synth-knob[type=range]:active::-ms-thumb { |
| 384 | + .synth-knob[type="range"]:active::-ms-thumb { |
371 | 385 | background: #00ffea; |
372 | 386 | } |
373 | | - .synth-knob[type=range]:disabled { |
| 387 | + .synth-knob[type="range"]:disabled { |
374 | 388 | opacity: 0.5; |
375 | 389 | } |
376 | 390 | </style> |
|
381 | 395 | <img src="bitcoin-pixelated.png" alt="Bitcoin Logo" /> |
382 | 396 | Bitcoin Synth |
383 | 397 | </div> |
384 | | - <div class="btcamp-display" style="margin-top:2.5em; margin-bottom:2.5em;"> |
| 398 | + <div |
| 399 | + class="btcamp-display" |
| 400 | + style="margin-top: 2.5em; margin-bottom: 2.5em" |
| 401 | + > |
385 | 402 | <div id="txplaying"></div> |
386 | 403 | <div id="progress-bar"> |
387 | 404 | <div id="progress-bar-fill"></div> |
388 | 405 | </div> |
389 | 406 | </div> |
390 | | - <div class="btcamp-btn-row" style="display:flex;flex-direction:row;gap:2rem;justify-content:center;width:100%;margin-bottom:2em;"> |
| 407 | + <div |
| 408 | + class="btcamp-btn-row" |
| 409 | + style=" |
| 410 | + display: flex; |
| 411 | + flex-direction: row; |
| 412 | + gap: 2rem; |
| 413 | + justify-content: center; |
| 414 | + width: 100%; |
| 415 | + margin-bottom: 2em; |
| 416 | + " |
| 417 | + > |
391 | 418 | <button id="playpause-indicator" class="btcamp-btn">▶️ Play</button> |
392 | 419 | <button id="next" class="btcamp-btn">⏭️ Next</button> |
393 | 420 | </div> |
394 | | - <div class="synth-controls-row" style="display:flex;flex-direction:row;align-items:flex-end;justify-content:center;gap:2.5em;margin-bottom:2.5em;"> |
| 421 | + <div |
| 422 | + class="synth-controls-row" |
| 423 | + style=" |
| 424 | + display: flex; |
| 425 | + flex-direction: row; |
| 426 | + align-items: flex-end; |
| 427 | + justify-content: center; |
| 428 | + gap: 2.5em; |
| 429 | + margin-bottom: 2.5em; |
| 430 | + " |
| 431 | + > |
395 | 432 | <div class="synth-control"> |
396 | | - <input type="range" id="tempo-slider" min="0.5" max="2" step="0.01" value="1" class="synth-knob vertical-knob"> |
397 | | - <div class="synth-label"><span style="color:#00ffea;">Tempo</span><br><span id="tempo-value" style="color:#00ffea;">1.00x</span></div> |
| 433 | + <input |
| 434 | + type="range" |
| 435 | + id="tempo-slider" |
| 436 | + min="0.5" |
| 437 | + max="2" |
| 438 | + step="0.01" |
| 439 | + value="1" |
| 440 | + class="synth-knob vertical-knob" |
| 441 | + /> |
| 442 | + <div class="synth-label"> |
| 443 | + <span style="color: #00ffea">Tempo</span><br /><span |
| 444 | + id="tempo-value" |
| 445 | + style="color: #00ffea" |
| 446 | + >1.00x</span |
| 447 | + > |
| 448 | + </div> |
398 | 449 | </div> |
399 | 450 | <div class="synth-control"> |
400 | | - <input type="range" id="mood-slider" min="0" max="1" step="0.01" value="0" class="synth-knob vertical-knob"> |
401 | | - <div class="synth-label"><span style="color:#ffb347;">Mood</span><br><span id="mood-value" style="color:#ffb347;">Sad</span></div> |
| 451 | + <input |
| 452 | + type="range" |
| 453 | + id="mood-slider" |
| 454 | + min="0" |
| 455 | + max="1" |
| 456 | + step="0.01" |
| 457 | + value="0" |
| 458 | + class="synth-knob vertical-knob" |
| 459 | + /> |
| 460 | + <div class="synth-label"> |
| 461 | + <span style="color: #ffb347">Mood</span><br /><span |
| 462 | + id="mood-value" |
| 463 | + style="color: #ffb347" |
| 464 | + >Sad</span |
| 465 | + > |
| 466 | + </div> |
402 | 467 | </div> |
403 | 468 | <div class="synth-control"> |
404 | | - <input type="range" id="key-slider" min="0" max="6" step="1" value="0" class="synth-knob vertical-knob"> |
405 | | - <div class="synth-label"><span style="color:#b3ff00;">Key</span><br><span id="key-value" style="color:#b3ff00;">C</span></div> |
| 469 | + <input |
| 470 | + type="range" |
| 471 | + id="key-slider" |
| 472 | + min="0" |
| 473 | + max="6" |
| 474 | + step="1" |
| 475 | + value="0" |
| 476 | + class="synth-knob vertical-knob" |
| 477 | + /> |
| 478 | + <div class="synth-label"> |
| 479 | + <span style="color: #b3ff00">Key</span><br /><span |
| 480 | + id="key-value" |
| 481 | + style="color: #b3ff00" |
| 482 | + >C</span |
| 483 | + > |
| 484 | + </div> |
406 | 485 | </div> |
407 | 486 | </div> |
408 | 487 | <div class="btcamp-info"> |
409 | 488 | <span id="info-label">Playing transaction:</span> |
410 | 489 | <span id="info-value"></span> |
411 | 490 | </div> |
412 | | - <div class="btcamp-raw" id="rawtx">Still need to be fetched, press play..</div> |
| 491 | + <div class="btcamp-raw" id="rawtx"> |
| 492 | + Still need to be fetched, press play.. |
| 493 | + </div> |
413 | 494 | <div class="btcamp-nowplaying" id="nowplaying"></div> |
414 | 495 | <div class="btcamp-footer"> |
415 | 496 | <span |
|
421 | 502 | >turinglabs</a |
422 | 503 | ></span |
423 | 504 | > |
424 | | - <div style="margin-top: 0.5em; color: #00ffea; font-size: 0.8em; letter-spacing: 1px; display: flex; align-items: center; justify-content: center; gap: 1.5em;"> |
| 505 | + <div |
| 506 | + style=" |
| 507 | + margin-top: 0.5em; |
| 508 | + color: #00ffea; |
| 509 | + font-size: 0.8em; |
| 510 | + letter-spacing: 1px; |
| 511 | + display: flex; |
| 512 | + align-items: center; |
| 513 | + justify-content: center; |
| 514 | + gap: 1.5em; |
| 515 | + " |
| 516 | + > |
425 | 517 | <span>Version: v1.0.0</span> |
426 | | - <span id="btc-price-display" style="color:#ffb347; font-size:1.1em;"></span> |
| 518 | + <span |
| 519 | + id="btc-price-display" |
| 520 | + style="color: #ffb347; font-size: 1.1em" |
| 521 | + ></span> |
427 | 522 | </div> |
428 | 523 | </div> |
429 | 524 | </div> |
430 | 525 | <script src="main.js"></script> |
431 | 526 | <script> |
432 | | - document.addEventListener('contextmenu', function(e) { |
| 527 | + document.addEventListener("contextmenu", function (e) { |
433 | 528 | e.preventDefault(); |
434 | 529 | }); |
435 | 530 | </script> |
|
0 commit comments