ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Real-time pitch detection & sheet music engine for the browser: microphone or MIDI to notation, MIDI and MusicXML export, no server.
Motor open source de captura y escritura musical para la web: convierte lo que tocas en el piano (micrófono, MIDI o entrada de línea) en notas y partitura, en vivo y en el dispositivo.
▶ Probar la demo · la interfaz es una demo del motor
El motor es un módulo ES sin DOM publicado en engine/v1/, con interfaz estable (engine.INTERFACE = 1).
const root = 'https://juliangdeveloper.github.io/piano-transcribe/engine/v1/';
const version = (await (await fetch(root + 'version.txt', { cache: 'no-store' })).text()).trim();
const engine = await import(root + 'capture.js?v=' + version);
const session = engine.createCapture({ profile: 'score', score: { bpm: 80, timeSig: '4/4', clef: 'treble' } });
const out = session.hop(frame, sampleRate, performance.now());
hop cada engine.HOP_MS (20 ms) con un Float32Array de un AnalyserNode (fftSize 2048). Devuelve out.events (notas que empiezan o terminan) y out.score (compases con notas y silencios).session.press('C4', 'midi', now) y session.release('C4', 'midi', now).profile: 'combat' limita el rango a C3–C6; maxVoices: 2 permite dos notas a la vez con el micrófono.engine.toMidi(session.score()) devuelve los bytes de un .mid y engine.toMusicXML(session.score()) el texto de un .musicxml, con el tempo y el compás de la sesión.examples/minimal.html escucha el micrófono y descarga el MIDI en unas 50 líneas.engine/v1, versión 1.13.0)| Función | Qué hace |
|---|---|
createCapture(opts) | Crea una sesión: profile, maxVoices, a4 y score: { bpm, timeSig, clef }. |
session.hop · press · release | Alimentan la sesión con audio o con notas MIDI/teclado. |
session.score() · setScore({ bpm, timeSig }) | Leen la partitura o cambian tempo y compás. |
session.held() · advance · releaseSource · reset | Notas sonando, avanzar el tiempo, soltar una fuente y empezar de cero. |
toMidi(score) · toMusicXML(score) | Exportan la partitura. |
detectPitch(buffer, sampleRate) | Detecta la frecuencia de un bloque de audio. |
noteFromFreq · noteFromMidi · hzForNote | Convierten entre Hz, número MIDI y nombre de nota. |
TEMPO · TIME_SIGNATURES | Tempo de 40 a 208 y compases 2/4, 3/4, 4/4 y 6/8. |
Abre un issue o un PR. Áreas abiertas:
JavaScript vanilla, Web Audio y Web MIDI; la partitura se dibuja con VexFlow. Sin dependencias de npm.
python3 -m http.server 8000
npm test
Licencia: MIT. Incluye VexFlow (MIT) y la fuente Gonville (uso libre).
Más proyectos: https://juliangdeveloper.github.io/
Hecho con ❤️ y 🎼