【免费下载链接】NoteLiteOpen-source OMR and guided music practice: turn sheet music PDFs/images into MusicXML/MIDI, refine scores, and practice with MIDI or microphone feedback.项目地址https://gitcode.com/gh_mirrors/no/NoteLite点击查看免费下载NoteLite 是一款开源 OMR 与音乐练习工具把乐谱 PDF/图片识别成 MusicXML然后跟随乐谱练习用 MIDI 或麦克风获得实时反馈。本文完整拆解它的麦克风音准检测原理——浏览器内基于 Pitchy 的单音检测如何从一段波形中算出音高与音分偏差以及PitchGate门控机制如何保证持续音不会被误判成重复起音。全程无需上传任何音频适合想理解浏览器音准检测怎么做的新手。 为什么音准检测可以直接跑在浏览器里NoteLite 的练习模式practice workspace把乐谱排版和音高检测都放在本地完成麦克风采样在浏览器内处理没有遥测、上传、CDN 或云端 API 调用。对新手来说这意味着练琴音频不离开设备隐私友好不需要安装额外插件桌面端由本地浏览器窗口承载音准检测与 MIDI 输入走同一个判定层反馈逻辑一致。三种演奏输入的分工如下来自 README.md输入方式检测能力适用场景麦克风Pitchy 单音检测 置信度/稳定性门控一次只接受一个音高独奏单音旋律远离伴奏音源MIDI 乐器音符音高匹配、和弦、错音/漏音与起音时机键盘类、含和弦的声部电脑键盘功能演示输入A–K 键对应 C4–C5快速体验跟随逻辑麦克风输入有一个硬限制所选段落若含和弦或重叠音多音NoteLite 会直接拒绝并要求改用 MIDI因为 Pitchy 是单声部检测器。从 PDF 到可练习的乐谱在谈音频之前先看图了解乐谱数据从哪来OMR 引擎先把扫描图识别成 Book再导出 MusicXML 供练习界面使用——麦克风检测的标准答案就来自这份 MusicXML。 第一步拿到干净的麦克风波形检测质量从采集端就开始控制。NoteLite 请求麦克风时主动关闭浏览器自带的回声消除、噪声抑制和自动增益见 practice-web/src/app.js// practice-web/src/app.js navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: false, noiseSuppression: false, autoGainControl: false }, video: false });这三个开关的意图很直白系统级处理会改变波形幅度与频谱干扰音高估计。随后通过AnalyserNodefftSize 4096按requestAnimationFrame轮询读取时域浮点波形约每秒 60 帧每帧 4096 个采样点。图中即桌面端 Book 菜单打开的练习工作区左侧乐谱光标逐音推进右侧面板实时显示本次练习的错音记录底部状态栏给出当前速度与小节范围。 Pitchy 单音检测原理一帧波形给出两个数NoteLite 使用 MIT 许可的 Pitchy 4.1.0第三方声明见 app/res/practice/THIRD-PARTY.txt初始化只有一行const detector PitchDetector.forFloat32Array(4096); // 固定 4096 采样窗口每帧调用detector.findPitch(buffer, sampleRate)返回两个关键数值输出含义用途hz基频估计Hz换算成 MIDI 音高clarity周期性清晰度0–1判断像不像一个稳定的音供门控使用Pitchy 内部用 FFT 寻找波形中最强的周期clarity反映该周期占整体能量的比例——持续吹奏/拉奏的音 clarity 高瞬态噪声、起音爆音则低。得到频率后NoteLite 还做了一个细节处理按你在设置中指定的A4 调音基准415–466 Hz 可调缩放频率再换算 MIDI 与音分raw 69 12 · log2(频率 / A4基准) // 未取整的小数 MIDI midi round(raw) // 最接近的标准音 cents (raw − midi) × 100 // 音分偏差正为偏高负为偏低这就是为什么练习旧谱如 A4 415 Hz 的历史曲目时音准判定不会整体偏移。 PitchGate 门控机制五道关卡过滤误判如果每帧检测到一个音就上报弹了一个音一个持续音会在几秒内触发几十个假起音。所以 NoteLite 在 practice-web/src/session.js 中实现了PitchGate门控类每帧数据必须依次通过以下关卡#关卡阈值不通过时的行为1静音门限RMS 0.008计为静音帧连续 3 帧才释放正在按住状态2音高有效域27.5 – 4200 Hz重置稳定性计数3清晰度阈值clarity ≥ 0.9重置稳定性计数但不释放按住状态4稳定确认同一 MIDI 连续稳定 ≥ 3 帧丢弃防止瞬态触发5持续音去重上一事件last midi丢弃按住不重复计数简化后的决策流程如下完整实现约 20 行// practice-web/src/session.js —— PitchGate.push 的决策顺序 if (rms 0.008) { /* 静音连续3帧后 lastnull */ } if (hz超范围 || clarity 0.9) { /* 重置稳定计数但保留 last */ } if (midi连续稳定 3帧 || lastmidi) return null; // 抑制持续音 return { midi, cents }; // 通过放行一次真实起音两处设计值得新手注意只有真静音才释放音符弓弦/吹奏音在持续过程中会出现短暂的周期性丢失clarity 掉下去如果此时就释放last一个音会被拆成两段甚至触发错音。所以低 clarity 只重置稳定计数不释放状态——这正是 practice-web/README.md 中记录的门控修正。3 帧 ≈ 50 毫秒起音确认窗口很短实时感损失小同时足以滤掉单击、敲击等瞬态。门控放行的事件随后进入统一判定层receive(midi, time, cents)practice-web/src/app.js与 MIDI、键盘输入走同一条session.noteOn路径practice-web/src/session.js产出五类结果错音wrong、多弹/过早extra、漏音missing、抢拍/慢拍early/late、音准偏差intonation。 音分偏差怎么反馈给你界面顶部的听到栏会实时显示音名及偏差如A4 8¢偏差超过 3¢ 才显示数字当|cents| 35音分时记一条intonation音准偏差错误回顾页会写明偏高/偏低 N 音分可直接重练此小节。35 音分大约是一个半音的 29%——对初学者足够宽容对进阶者又能暴露明显偏音。开始练习前NoteLite 还会要求你试听或人工校对乐谱桌面编辑器仍在手边见下图避免把识别错误当成你的演奏错误。⚠️ 边界与验证作者公开承认的限制诚实的边界说明是这套系统值得信任的原因。NoteLite 明确披露practice-web/README.md仅单声部和弦、扫弦、合奏不做逐音评分多选段落会被拒绝重复同音需静音间隔没有包络起音检测器同一音高连击需要至少 3 帧约 50 ms静音才能再次被识别为起音——连音legato是同音高重复的已知难点不评估触键、踏板、力度与指法。验证方面practice-web/test/audio.test.mjs 用真实的 Pitchy 4.1.0 生产环境 PitchGate跑确定性回归6 类乐器谐波轮廓正弦、长笛、单簧管、弓弦、拨弦、人声× 3 种信噪比 × 44.1/48 kHz × 13 个音高要求每个持续音恰好产生 1 次精确起音并用纯静音/白噪声验证零虚假触发另有失谐 A4±42 音分用例验证音准反馈符号正确。针对真实乐器录音CC-BY 采样库的基准结果如下批次首音匹配未检出恰 1 次正确事件/文件错误音高事件初始 30 文件门控修正前30/30025/3011同批 30 文件修正后30/30026/3011独立保留 20 文件修正后20/20020/200修正门控后按住音被拆碎导致的重复事件从 46 降到 20独立保留集实现零错误音高事件。作者同时提醒这些数字不能外推为真实房间、实时演奏的整体准确率。在 Apple 原生客户端上麦克风采集改由 apple/NoteLite/NativePracticeInput.swift 的AVAudioEngine完成4096 采样 tap随后逐帧调用同一个window.NoteLiteNative.audioFrame门控与判定逻辑和浏览器完全一致保证跨平台体验统一。 相关源码与文档索引模块路径每帧处理与麦克风连接practice-web/src/app.jsPitchGate 门控实现practice-web/src/session.js音符匹配与错误分类practice-web/src/session.js输入方式与 A4 设置界面practice-web/src/index.htmlPitchy 版本声明practice-web/package.json音频回归测试practice-web/test/audio.test.mjs练习模式范围说明practice-web/README.md第三方许可声明app/res/practice/THIRD-PARTY.txt原生端麦克风采集apple/NoteLite/NativePracticeInput.swift一句话总结NoteLite 的麦克风音准检测 Pitchy 每帧给出频率 清晰度 × 五道门控关卡只放行真实起音再叠加 A4 缩放与 35 音分反馈——全部在浏览器本地完成简单、透明、可复现。赞分享【免费下载链接】NoteLiteOpen-source OMR and guided music practice: turn sheet music PDFs/images into MusicXML/MIDI, refine scores, and practice with MIDI or microphone feedback.项目地址https://gitcode.com/gh_mirrors/no/NoteLite点击查看免费下载相关推荐uppy/audio 音频录制插件浏览器麦克风录音的完整接入指南uppy/audio 音频录制插件浏览器麦克风录音的完整接入指南 导读 uppy/audio 是 Uppy 官方提供的 音频采集acquirer插件前端UI组件后端MicMute麦克风静音控制工具完整使用指南MicMute麦克风静音控制工具完整使用指南 想要在视频会议或语音通话中快速切换麦克风状态吗MicMute这款轻量级工具能够让你通过简单的托盘点击或快捷键操作桌面应用用 p5.js ml5.js CREPE 搭建尤克里里调音器基于预训练音高检测模型的浏览器实时调音实践用 p5.js ml5.js CREPE 搭建尤克里里调音器基于预训练音高检测模型的浏览器实时调音实践 本文以 Coding Train 的 Codi教程文档示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?