個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 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 🎼