diff --git a/player-asbuilt.html b/player-asbuilt.html index 6a3840a..31bd933 100644 --- a/player-asbuilt.html +++ b/player-asbuilt.html @@ -9,11 +9,9 @@ "As-built" variant of the PM-1 player: the same firmware/engine, drawn with the parts you'd actually solder for an RP2040 build — • a 2.0″ 320×240 colour IPS TFT (ST7789, e.g. Pimoroni Pico Display 2.0): - the upgrade from the cramped 128×64 mono OLED — full colour, ~5× the - resolution, smooth anti-aliased type (rendered hi-DPI on a canvas); - • a 4×16 WS2812 ("NeoPixel") RGB matrix (PIO-driven): the bottom row is the - beat (cyan downbeats / amber group-starts), and the three rows above stack - the current beat's subdivisions as they pass (driven by the finest lane); + the upgrade from the cramped 128×64 mono OLED — full colour, smooth type, + hi-DPI. It also draws the beat indicator itself — a row of beat dots with + the current beat's subdivisions below — so there's no separate LED bar; • controls arranged for use: an EC11 encoder below the screen (turning it never hides the readout) with arcade pushbuttons spread below — PREV far left, NEXT far right, a big central PLAY — so you don't hit the wrong one; @@ -55,7 +53,7 @@ display:flex; flex-direction:column; align-items:center; gap:14px; } a{color:var(--link)} - .topbar{width:100%; max-width:380px; display:flex; align-items:center; justify-content:space-between; gap:10px; font-size:13px; color:var(--muted); flex-wrap:wrap} + .topbar{width:100%; max-width:778px; display:flex; align-items:center; justify-content:space-between; gap:10px; font-size:13px; color:var(--muted); flex-wrap:wrap} .topbar b{color:var(--txt)} .topbar-right{ display:flex; align-items:center; gap:12px } .tbtn{ background:transparent; color:var(--muted); border:1px solid var(--panel-bd); border-radius:8px; @@ -92,16 +90,14 @@ .tft-cap{ text-align:center; font-size:10px; color:var(--muted); margin-top:7px; letter-spacing:.02em } /* ---- 4×16 WS2812 RGB matrix: bottom row = beat, 3 rows above = subdivisions ---- */ - .ledgrid{ display:flex; flex-direction:column; gap:4px; width:max-content; margin:12px auto 3px; - background:linear-gradient(180deg,#10221c,var(--pcb)); border:1px solid #07140f; border-radius:5px; padding:8px 9px; - box-shadow:inset 0 1px 2px rgba(0,0,0,.6) } - .ledrow{ display:flex; gap:4px } - .ledrow.beatrow{ margin-top:4px; padding-top:6px; border-top:1px solid rgba(255,255,255,.07) } - .npx{ width:15px; height:15px; border-radius:3px; background:#0c0e10; border:1px solid #060708; - position:relative; transition:background .05s, box-shadow .05s } - .npx::after{ content:""; position:absolute; inset:4px; border-radius:1px; background:rgba(255,255,255,.05) } /* the 5050 die */ + /* the beat indicator lives on the TFT now (no LED matrix) */ .ledbar-cap{ text-align:center; font-size:10px; color:var(--muted); margin:2px 0 0; letter-spacing:.02em } + /* side-by-side: player on the left, BOM on the right (stacks when narrow) */ + .cols{ display:flex; flex-wrap:wrap; align-items:flex-start; justify-content:center; gap:18px; width:100% } + .col-left{ display:flex; flex-direction:column; align-items:center; gap:14px; width:380px; max-width:100% } + .bom-panel{ width:380px; max-width:100%; align-self:flex-start } + /* ---- controls: encoder above (under the screen), arcade buttons spread below ---- wheel never hides the readout · PREV far-left / NEXT far-right · big central PLAY */ .controls{ display:flex; flex-direction:column; align-items:center; gap:13px; margin:14px 0 2px } @@ -177,6 +173,9 @@ +
+
+
@@ -191,10 +190,7 @@
-
2.0″ 320×240 IPS TFT (ST7789)
- -
-
4×16 WS2812 — beat (bottom) + 3 subdivision rows
+
2.0″ 320×240 IPS TFT (ST7789) — beat & subdivisions on‑screen
TEMPO
@@ -233,9 +229,10 @@
+ -
+

Bill of materials

Rough parts list for the device above — an RP2040 build with analog click injection. Ballpark one-off prices (USD); cheaper at volume.

@@ -245,8 +242,6 @@ Brain & display RP2040 board, USB‑C — e.g. Waveshare RP2040‑Zero / Pico‑clone14 2.0″ 320×240 IPS TFT, ST7789 — SPI18 - Beat bar - WS2812B / SK6812 RGB LED — 4×16 matrix (or 4× 16‑px strips), PIO‑driven646 Controls Arcade pushbutton, 24 mm — Prev · Next · Tap34 Arcade pushbutton, 30 mm — Play12 @@ -264,13 +259,14 @@ Custom PCB (or perfboard)15 Passives, headers, wire — R/C for the analog stage + decoupling—3 3D‑printed enclosure + screws / standoffs15 - Total (one‑off)≈ $61 + Total (one‑off)≈ $55

Audio is summed in the analog domain: the DAC's click is mixed with a high‑impedance buffer of the 1/4″ instrument input, then fed to the balanced line driver (1/4″ TRS out) and the monitor amp — so your instrument is never re‑digitised (no added latency).

+