ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
MIDI 키보드와 악보를 연결하면 Arabesque가 실시간으로 음표를 색칠하고 연습을 추적해 클래식 연주 실력을 높여줍니다
Connectez votre clavier MIDI, ouvrez une partition et jouez : Arabesque colore les notes en temps réel, suit votre pratique et vous aide à progresser sur un répertoire classique.
교육JavaScript · RubyGitHub @isc온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Practise the piano with real-time feedback. Connect a MIDI keyboard, open a
score and play: every note lights up depending on whether you nailed it,
missed it or jumped ahead, and your practice is logged bar by bar.
Live at arabesque.app, in French and English. It runs
in the browser, installs as an app on Android, and ships as a native wrapper on
iPhone and iPad.README 전문 보기 ↗Practise the piano with real-time feedback. Connect a MIDI keyboard, open a score and play: every note lights up depending on whether you nailed it, missed it or jumped ahead, and your practice is logged bar by bar.
Live at arabesque.app, in French and English. It runs in the browser, installs as an app on Android, and ships as a native wrapper on iPhone and iPad.
.xml, .mxl) onto the page.A static site with no build step: everything the browser loads lives in
public/, and the few libraries it uses are vendored in public/vendor/
(Alpine.js, OpenSheetMusicDisplay, Tone.js, JSZip). Production and the branch
previews are served from GitHub Pages.
supabase/ holds the canonical DDL and auth config.public/sw.js) precaches the app shell and caches
scores as they are opened.app.rb is a small Sinatra server for development and the test suite.
It serves public/, plus the test fixtures under /test-fixtures/.ios/ is the native wrapper: a WKWebView over the deployed app, with
CoreMIDI injected as navigator.requestMIDIAccess. See
ios/README.md.| Path | What |
|---|---|
public/index.html | Landing page |
public/library.html | Score library |
public/score.html | Score page, where the playing happens |
public/practice.html | Practice calendar |
public/data.html | Account, profiles, backup import/export |
public/js/ | One ES module per concern, e.g. midi.js, musicxml.js, practiceTracker.js, storage.js, sync.js, i18n.js (strings in locales/) |
public/styles.css | The whole stylesheet: tokens, base layer, .pt-* components |
public/data/scores.json | The library catalog |
public/data/fingerprints.json | Opening-note fingerprints, generated from the catalog |
public/scores/ | The MusicXML files |
changelog.d/ | Pending entries for the in-app "What's new" |
supabase/ | Database schema and auth config |
scripts/ | Maintenance tools: fingerprints, changelog, feedback, deploy stamping, App Store, score sourcing |
landing-video/ | Build pipeline for the landing page's hero video |
test/ | Browser tests (Minitest + Capybara + Cuprite) and test/js/ (Vitest) |
Requires Ruby 3.3 and, to play, Chrome or Edge (Web MIDI).
bundle install
ruby app.rb
Then open http://localhost:4567/library.html. No keyboard is needed to browse and view scores.
Two suites, both run in CI on every pull request:
bundle exec rake test:parallel > tmp/test-output.txt 2>&1; cat tmp/test-output.txt
npm ci && npm run test:js
The first drives a headless Chrome through the real pages
(DISABLE_HEADLESS=1 to watch it). rake test runs it serially. The second
unit-tests the modules with Vitest. No Ruby or Chrome on the machine?
scripts/test-in-docker.sh runs the browser suite in a container.
Every change goes through a pull request, squash-merged. Each pull request is
deployed at https://arabesque.app/previews/<branch-slug>/library.html.
CLAUDE.md holds the working conventions: how to add a score, write a changelog entry, handle user feedback, change the Supabase config, and write browser tests that do not flake.
If no keyboard shows up after clicking "Connect MIDI keyboard":
Roland FP-30X (or FP-30) over Bluetooth, if it does not appear:
This resets the keyboard's Bluetooth connection state.