ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
모든 조의 피아노 스케일·코드·아르페지오와 손가락표, 악보·키보드 도표, 그리고 연주를 녹음해 듣는 연습 페이지 제공
Every piano scale, chord and arpeggio in every key, with fingering, sheet music and keyboard diagrams, and a practice page that can listen to your own piano.
교육JavaScript · CSSGitHub @0xOdin온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A clear and practical piano reference: scales, chords and arpeggios in every key, with fingering, sheet music and keyboard diagrams.
Each key (C major, F♯ minor, ...) has its own pages for the scale, arpeggio and chord. /scales/ and /arpeggios/
list them, each card opening the page itself, and each has a fingering chart with every key on one page. The chord
explorer at /chords/ covers every chord type on every root, and links to the key pages for major and minor triads.
/practice/ asks for a random scale, chord or chord of a key to play or write out, or something to name by eye or
ear. Answers can be played on the page's keys, on a MIDI keyboard, or on a real piano through the microphone, or
typed. Chords and Name it can show the question in sheet music (practice-staff.js), which fetches VexFlow only when
it is first wanted.
The piano you hear is a real Steinway: the recordings of the University of Iowa Electronic Music Studios (theremin.music.uiowa.edu), which "may be downloaded and used for any projects, without restrictions".
The site is plain HTML, CSS and JavaScript, built by a small Node.js script with no packages to install.
npm run dev # build, serve at http://localhost:3000, rebuild and reload on every save
npm run build # build the site into dist/
npm start # serve the last build
Needs Node.js 20 or newer. Set SITE_URL when building for the live site, so canonical links and the sitemap point
at the right address: SITE_URL=https://your-domain.com npm run build. Then upload the contents of dist/. If the
site lives in a folder of its address, set BASE_PATH to that folder as well, and every link on the site starts with
it: BASE_PATH=/piano-guide npm run build. Without it the build is just as before.
Every push to main builds the site and publishes it at https://0xodin.github.io/piano-guide/
(.github/workflows/pages.yml, which sets both SITE_URL and BASE_PATH from the repository's Pages address, so a
new repository name needs no change here). On GitHub, the repository's Settings → Pages → Source must be "GitHub
Actions".
src/
layout.html the <head>, header, menu and footer shared by every page
pages/ hand-written pages: src/pages/chords/index.html becomes /chords/
templates/ the key pages, the lists and the fingering charts, filled in from the data
data/ the keys (keys-data.js) and the major scales (scales-data.js)
public/ copied as it is: css/, js/, assets/ (assets/piano/ holds the piano sounds)
scripts/
build.js builds everything into dist/ and checks every link
serve.js local server for dist/
make-sounds.js makes the piano sounds from the recordings (aiff.js reads them)
recordings/ the original piano recordings, about 300 MB (not in git)
dist/ the finished site (not in git)
public/assets/piano/ has one short recording per key from C2 to C6 (60.m4a is middle C), about 1.4 MB in all,
made from the Iowa recordings in recordings/ by node scripts/make-sounds.js (macOS, as it uses afconvert). To
make them again, download the medium-loudness files Piano.mf.C2.aiff to Piano.mf.C6.aiff from
theremin.music.uiowa.edu/MISpiano.html into recordings/, then run it.
Create src/pages/<name>/index.html with the page's content (what goes inside <main>) and a few settings on top:
---
title: Intervals | PianoGuide
description: The distance between two notes, on the keyboard and in sheet music.
nav: theory
styles: page
scripts: vexflow intervals
---
<section class="page-hero">
<h1>Intervals</h1>
</section>
nav marks the current menu item (scales, arpeggios, chords or theory)styles loads /css/<name>.css after main.css (page has the hero, tabs and cards the inner pages share)scripts loads /js/<name>.js after main.js (vexflow is the sheet music library from its CDN)sitemap: no leaves the page out of sitemap.xmlThe menu items are listed once, in NAV at the top of scripts/build.js.
Add an entry to src/data/keys-data.js (the comment at the top of the file explains every field). The build writes
its scale, arpeggio and chord pages, adds it to the lists, the fingering charts, the circle of fifths and the sitemap, and stops with a message if an
index in the entry points at the wrong scale or chord.
The build fails if any href="/..." or src="/..." leads nowhere, and lists them. Pages that are planned but not
written yet (Theory, Intervals, Circle of Fifths) are shown on the homepage with a "Soon" label instead of a link.