ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Palmas — a flamenco metronome. The compás of 50+ palos with real palmas, cajón and jaleo. Web, macOS, Windows, Linux, iOS and Android.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A flamenco metronome — compás y palmas. It plays the compás of more than fifty palos with real palmas, cajón and jaleo, and draws it as you listen. Every platform can be built from source today — see Building for a specific platform. On the desktop, and on iPad with beats silenced — tap a beat to silence it. Palmas is a modified version of A Compás by Olivier Ricordeau and Jérémie Sieffert, who wrote the great majority of this code and hold copyright in it from 2014 to 2023. It is distributed under the same AGPL-3.0 licence, which is what makes this fork possible.README 전문 보기 ↗
A flamenco metronome — compás y palmas. It plays the compás of more than fifty palos with real palmas, cajón and jaleo, and draws it as you listen.
| Platform | Release | Built with |
|---|---|---|
| Web browser — installs and works offline | dolcesfogato.com/palmas | Quasar PWA |
| iPhone and iPad | App Store | Capacitor |
| Android | GitHub Releases | Capacitor |
| macOS (Apple silicon), Windows and Linux | GitHub Releases | Electron |
Desktop and Android versions do not update themselves: new versions appear on the releases page. Every platform can also be built from source — see Building for a specific platform.
Palmas is a modified version of A Compás by Olivier Ricordeau and Jérémie Sieffert, who wrote the great majority of this code and hold copyright in it from 2014 to 2023. It is distributed under the same AGPL-3.0 licence, which is what makes this fork possible.
It is renamed because it is not their work any more: they neither review nor support these changes, and shipping them under their name would misrepresent both projects. Palmas is published separately, under its own application identifiers, and bugs here are not their problem — report them on this repository.
Changes made in this fork include a Node toolchain in place of Python, cross-platform setup and packaging scripts, subfolder-relative web hosting, lazily loaded locales, removal of the analytics, and a content security policy. See the commit history for the full account.
Palmas is developed on develop, the default branch. upstream-master is an
unchanged copy of A Compás's own master branch, kept so that upstream changes
can be merged into develop; it is not Palmas, and is never updated with it.
It is based on the following technologies :
For what every dependency is actually for, and which layer of the app it belongs to, see docs/stack.md.
Everyone taking part is asked to follow the code of conduct.
The A Compás Slack is the upstream project's, not this one's — please do not take questions about Palmas there.
Three steps. The setup script handles the rest — including installing Node.js if this machine does not already have it.
1. Clone the project.
git clone https://github.com/dwsdolce/palmas.git
cd palmas
2. Run the setup script. Choose by the shell you are typing into, not by your operating system:
powershell -ExecutionPolicy Bypass -File .\setup.ps1
./setup.sh
3. Start the app.
yarn dev
It opens at http://localhost:9000/.
Pick by shell, because on Windows both are common:
PS> or C:\> prompt — setup.ps1.$ prompt — setup.sh. That includes Git Bash, Cygwin and WSL on
Windows, and it includes those terminals inside VS Code. Running
./setup.ps1 there makes bash try to parse PowerShell and produces a screen
of command not found and syntax error near unexpected token.Both scripts do the same job; only the language differs.
The Windows command is spelled out in full because Windows refuses to run local scripts by default, with:
.\setup.ps1 : File ...\setup.ps1 cannot be loaded because running scripts is
disabled on this system.
-ExecutionPolicy Bypass -File applies to that one invocation and changes
nothing about the machine. If you would rather allow local scripts generally —
read setup.ps1 first, it is short — then
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned lets you use the shorter
.\setup.ps1 from then on.
You do not need to work out first whether Node.js is on the machine. The script determines that, which is not something you could reasonably be expected to know anyway — plenty of applications install Node without ever mentioning it.
setup.ps1 / setup.sh check for a usable Node and install one if there
is none. That is all they do. They exist only because the main script is
written in Node, and so cannot be the thing that discovers Node is missing.scripts/setup.mjs takes over: the Node version this project needs,
Yarn, ffmpeg, the project's dependencies — both of them, since
src-capacitor is a second install that even the web build requires — and
the Electron runtime, which no install fetches on its own.It changes nothing without asking, asks only where there is a real decision to make, and is safe to run repeatedly — re-running it is how you resume after a step that needs a new terminal.
To see what it would do without changing anything, add --check:
powershell -ExecutionPolicy Bypass -File .\setup.ps1 --check
./setup.sh --check
When it finishes cleanly, yarn build, yarn build:desktop, yarn test and
yarn test:e2e all work on this machine. That is the whole promise, and it is
deliberately the same promise on macOS, Windows and Linux: the web build is
cheap enough that there is no reason not to have it everywhere, and the desktop
build has to happen on each platform anyway, because electron-builder does not
cross-compile.
The tests are in the promise because building is not the bar —
CLAUDE.md asks for lint, tests and a run of what you touched before
calling anything done, and a suite that cannot start is a suite that gets
skipped. Both things this covers that yarn install does not fetch — the
Electron runtime and Playwright's chromium — fail far from their cause: fifty
red specs and an "Executable doesn't exist" reads as a broken suite rather than
a missing download.
Android and iOS are not part of it. Their toolchains are large, they are set up once on whichever machine you choose to build them from, and they ask questions no script should answer for you — which JDK, an IDE or the command-line SDK, which Apple team. Xcode cannot be installed non-interactively at all. Each has its own one-time setup, written out in full:
JAVA_HOME and ANDROID_HOME, API 36, an emulator, a keystore.Do the setup script first either way: both build on the same Node, Yarn and dependencies it installs.
docs/setup.md is the same work done manually, with the
reasoning behind every step: what each prerequisite is for, the Node version
manager question, the Windows shell and PATH traps, and what yarn install
generates. Read it if the script fails, if you would rather not run a script
that installs things, or if you want to know what is being checked and why.
Everything the setup produces is gitignored, so deleting it never touches a tracked file. To return to an earlier state:
rm -rf src-capacitor/node_modules # redo just the Capacitor install
rm -rf node_modules .quasar # redo the dependency install
node scripts/format-audio.mjs unconvert # redo the audio generation
rm -rf node_modules src-capacitor/node_modules .quasar dist plus that
unconvert puts you back to a freshly cloned tree. Re-running the setup script
then rebuilds all of it; budget a few minutes, most of it ffmpeg converting the
audio masters. The unconvert command needs no dependencies, so it still works
with node_modules deleted.
yarn dev # serve with hot reload at localhost:9000
yarn build # build for production into dist/pwa
yarn preview # serve that production build at localhost:4173
yarn preview is how you run the built app. You cannot simply open
dist/pwa/index.html: the browser blocks module scripts over file://, and the
app would not load. yarn preview serves it properly, returning a real 404 for
a missing asset so that a broken build still looks broken. It is the same server
the end-to-end tests and the CI smoke test use:
scripts/serve-static.mjs.
The Quasar CLI is a project dependency rather than a global install, so run it
through yarn as above, or with npx quasar dev / npx quasar build. A bare
quasar command only works if you happen to have one installed globally, which
is why every command in these docs uses yarn or npx.
⚠️ On Windows,
yarn devin Windows PowerShell may fail with "cannot be loaded because running scripts is disabled on this system". That is not this project: npm installs ayarn.ps1shim, PowerShell prefers it overyarn.cmd, andRestricted— Microsoft's default for Windows PowerShell — forbids running it. Fix it once, per-user and without elevation:Set-ExecutionPolicy -Scope CurrentUser RemoteSignedOr use cmd, PowerShell 7, or any POSIX shell, none of which are affected. See docs/setup.md for the detail.
| Target | Build from | Command | Guide |
|---|---|---|---|
| Web (PWA) | macOS, Windows, Linux | yarn build | see Run the app above |
| Desktop (Electron) | macOS, Windows, Linux | yarn build:desktop | docs/desktop.md |
| Android | macOS, Windows, Linux | npx quasar build -m capacitor -T android | docs/android.md |
| iOS | macOS only | npx quasar build -m capacitor -T ios | docs/ios.md |
The names, subtitles and identifiers the app is published under are in docs/store-listing.md, along with what each store requires before it will accept a first release.
Each build runs on the platform it targets — electron-builder does not
cross-compile, and the mobile toolchains are the vendors' own.
yarn build:desktop checks its prerequisites, picks up signing credentials if
you have any, and describes what it produced; on macOS it also signs, notarises
and staples the disk image.
⚠️ The desktop build needs Electron's runtime, a separate ~150MB download that
yarn installdoes not fetch — Electron 44 removed the postinstall hook that used to. The setup script fetches it, so this matters only if you set the machine up by hand, or if it goes missing later after an Electron version bump:yarn build:desktopthen stops with "The Electron runtime is missing", and the Electron end-to-end tests have nothing to launch. Re-run the setup script, ornpx install-electron. See docs/desktop.md.
yarn test # unit and component tests (Vitest), ~6s
yarn test:watch # the same, re-running on change
yarn test:e2e # Electron and web end-to-end tests (Playwright)
yarn install prepares the project via quasar prepare, so a fresh clone can
lint and test without a build; run npx quasar prepare by hand if you ever
delete .quasar.
yarn test runs in CI on every push. It covers four things:
nbBeatsInPattern, accents
fall inside the pattern and ascend, tempos are ordered, names are unique.
These lock in properties that are easy to break by hand-editing the data.en-US
does, with nothing excluded. The release history is not interface text and
lives in src/assets/data/changelog.ts, untranslated on purpose: six of the
nine locales had fallen five to eight releases behind, so their readers saw a
changelog that simply stopped. One English list beats a truncated translated
one, and the drift cannot come back.yarn test:e2e needs a build first — yarn build for the web specs and
npx quasar build -m electron for the Electron ones. Each group skips itself
with a message if its build is missing. The Electron specs also need the
Electron runtime, which the setup script installs — see
docs/desktop.md if they report it
missing.
The Electron specs launch the app and check that a window opens with a populated
#q-app, that every image loads, that a sample decodes, and that nothing logs an
error - the white-page class of failure. The web specs serve dist/pwa with
scripts/serve-static.mjs and drive the help controls
under both touch and pointer input.
The metronome schedules audio at the transport time and the dots at that time
plus the output latency, so the visual matches the click you hear rather than
the moment the sample is queued. The compensation is baseLatency + outputLatency plus the manual offset slider, which allows 500ms with no clamp
against the beat grid.
A slot is an eighth note: 231ms at 130 BPM. So an offset above ~230ms lights the
dot while the next slot is sounding, which looks like a strong beat shown
against a weak one. test/metronome-sync.spec.ts documents that with a
deliberately failing case (it.fails); once the offset is clamped to one slot,
turn it into a plain it.
The source code is published under the terms of the GNU AGPL license (see the LICENSE file at the root of the git repository). There is an exception to this : the drumkits. All the .wav files located in audio/ are licensed under the terms of the CC0 license.
If you're a musician and would like to contribute, you can submit new rhythms. Palmas is getting more generalistic and will ultimately be able to play any kind of rhythm. See docs/contributing.md for the pattern, sequence and sound formats with worked examples. You can also contribute to the code by submitting a pull request.
The fuller list of known work, with pointers to where each item is discussed, is in TODO.md.