TutorLoom
기업·대학·교육기관을 위한 학습 플랫폼, 무료 오픈소스이며 엔터프라이즈 버전 제공
피아노가 보컬 연습을 반음씩 올리거나 내려주며, 연습 세트를 만들고 파일로 공유할 수 있는 무료 서비스
A piano plays your vocal exercises and moves them up or down a half step at a time, from the note you start on to the note you end on. Build practice sets and share them as files. Free, no sign-up, wo
교육HTML · JavaScriptGitHub @ktkwmr온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Vocal warm-up scales on the piano, moving up a half step at a time. 半音ずつ上がる発声練習のピアノ伴奏
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A piano accompanist for vocal warm-ups. Choose an exercise (Do-Re-Mi-Fa-Sol-Fa-Mi-Re-Do, arpeggios, scales, or your own), the key to start on, the key to end on, and the tempo. The piano plays it, then moves up or down a half step and plays it again until it reaches the end key. Line exercises up into practice sets that play straight through, and export / import them to share as a file.
発声練習のピアノ伴奏ツールです。練習パターン(ドレミファソファミレド・ドミソ・スケール・オリジナル)、開始のキーと終了のキー、テンポを選ぶと、ピアノが半音ずつ上げ下げしながら終了のキーまで繰り返し弾きます。練習を並べた「練習セット」は通しで再生でき、エクスポート・インポートでほかの人と共有できます。
▶ https://ktkwmr.com/vocalladder/ (日本語: https://ktkwmr.com/vocalladder/ja/)
/vocalladder/ja/, ?lang=en|ja)
ホーム画面に追加でき、オフラインでも動作。英語・日本語| Write | Meaning |
|---|---|
1–7 | Do Re Mi Fa Sol La Ti (major scale from the key) / ド〜シ |
8–15 | the next octave (8 = Do an octave up) / 1オクターブ上 |
b3, #4 | b before a number lowers it a half step, # raises it (b3 = Mi lowered a half step) / 数字の前の b で半音下がり、# で半音上がる |
5, / 1' | an octave lower / higher / 1オクターブ下・上 |
- | one beat longer (1-- = 3 beats) / 1拍のばす |
/ | half as long (1/ = half a beat) / 半分の長さ |
r | rest / 休み |
Example: 1 2 3 4 5 4 3 2 1- = Do-Re-Mi-Fa-Sol-Fa-Mi-Re-Do with a 2-beat last note. The built-in patterns plus the 2-beat chord fill whole bars of 4 beats, so the next key starts right on the beat. Patterns with a minor third (b3) and no major third get a minor chord.
Export saves all sets and My patterns in one file. Import adds every set and pattern in the file (patterns whose notes are already saved are skipped); a set with the same name and the same exercises as one already there is skipped, and a different set with a name that already exists gets “(2)”. Nothing saved is replaced. Version 3 files (no listenFirst; their melody is ignored, as the melody is always played), version 2 files (no patterns) and version 1 files (one set, "format": "vocalladder-set") can still be imported.
エクスポートはすべてのセットとマイパターンを 1 つのファイルに保存します。インポートはファイルのセットとマイパターンをすべて追加します(同じ音のマイパターンはすでにあれば追加しません)。名前も中身も同じセットがすでにあれば読み込まず、名前だけ同じなら「(2)」を付けます。既存のセットは置き換えません。listenFirst のない version 3(melody は無視し、メロディーはいつも弾く)、マイパターンのない version 2 と、1 セットだけの version 1 も読み込めます。
{
"format": "vocalladder-sets", "version": 4,
"patterns": [ { "name": "Do-Mi-Sol twice", "pattern": "1 3 5 3 1 3 5 3 1-" } ],
"sets": [
{ "name": "Soprano A",
"exercises": [
{ "name": "", "pattern": "1 2 3 4 5 4 3 2 1-", "start": "C4", "end": "G4", "step": 1,
"roundTrip": false, "bpm": 100, "rest": 0, "chord": true, "listenFirst": false }
] }
]
}
Full policy: /vocalladder/privacy/ (/vocalladder/ja/privacy/). Operator: /vocalladder/about/.
public/
_headers # security headers (CSP etc.)
404.html # page for unknown URLs under /vocalladder/ (status 404)
vocalladder/
index.html # the app (HTML / CSS / JS, English and Japanese text)
timer.js # worker that ticks the player's scheduler (keeps running in a background tab)
ja/index.html # Japanese page, generated from index.html (do not edit)
guide/ patterns/ warmup-scales/ faq/ about/ privacy/ ja/... # articles and info pages, generated from scripts/pages/ (do not edit)
images/guide/ # app screenshots for the guide (scripts/render-guide-images.mjs)
sitemap.xml # generated by scripts/build-pages.mjs (do not edit)
sw.js manifest.json icons/ og-image.png THIRD_PARTY_LICENSES.md
scripts/
build-ja.mjs build-pages.mjs pages/ update-third-party-licenses.mjs
pages/vocal.mjs # values for the articles, read from the app (patterns, note names, parser)
render-guide-images.mjs # takes the guide screenshots (Playwright)
og-image.html render-og-image.mjs render-icons.mjs
wrangler.jsonc # Cloudflare Workers (static assets, route ktkwmr.com/vocalladder*)
CLAUDE.md docs/baseline-status.md
This Worker only serves /vocalladder/*; the domain root belongs to the ktkwmr-home Worker (ktkwmr/ktkwmr.com).
When you load anything from a new external host, add it to the CSP in public/_headers and update the privacy text.
Serve public/ and open /vocalladder/. Opening index.html as a file:// URL does not work (Service Worker, worker timer).
file:// で直接開くと動きません。ローカルのサーバーで public/ を配信してください。
npx wrangler dev # http://localhost:8787/vocalladder/ (also runs the generators)
# or
npx serve public
If the app shows an old version, reload (or restart the installed app). 古い画面が出るときは再読み込みしてください。
Cloudflare Workers static assets. With Workers Builds connected, a push to main deploys; other branches get preview builds. By hand: npx wrangler deploy.
Edit only public/vocalladder/index.html, timer.js, sw.js, and scripts/. ja/index.html, the articles (guide, patterns, warmup-scales, faq), the info pages, and sitemap.xml are generated by wrangler deploy / wrangler dev and by the Build generated pages workflow on push to main:
node scripts/build-ja.mjs # regenerate ja/index.html
node scripts/build-pages.mjs # regenerate the articles, info pages, and sitemap.xml
node scripts/build-ja.mjs --check # exit 1 if out of date (same for build-pages.mjs)
編集するのは index.html・timer.js・sw.js と scripts/ だけです。生成ファイルは手で編集しません。
node scripts/build-preview.mjs writes .preview/ (not committed): index.html without the Service Worker, manifest, and analytics, plus the files it loads (timer.js, …). Claude publishes it as an Artifact to show a working version before deploying. Export uses the viewer's downloads capability there.
npm install --no-save playwright && npx playwright install chromium
node scripts/render-og-image.mjs # og-image.png from scripts/og-image.html
node scripts/render-icons.mjs # PNG icons from icons/icon.svg
node scripts/render-guide-images.mjs # screenshots for the guide (re-run when the app's look changes)
No third-party libraries. If a pinned CDN library is added under public/, the Update third-party licenses workflow adds it to THIRD_PARTY_LICENSES.md.
MIT © 2026 ktkwmr