>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Java

如何使用Audiveris将乐谱转换为代码和XML

如果你曾经尝试过扫描旧乐谱,然后在合成器上播放或用MuseScore等乐谱编辑器打开,你可能知道这个过程有多痛苦。标准的OCR(如Tesseract)在这种情况下无能为力:文字字符依附于五线谱的五条线,而音符时值、和弦、休止符和力度记号则构成了一个二维图结构。

这正是OMR(光学音乐识别)大显身手的地方。这个领域的项目并不多,成熟的开源系统屈指可数。Audiveris或许是最知名的开源音乐识别引擎,多年来一直在积极开发中。

音乐识别的主要挑战

Audiveris的开发者在文档中坦诚承认:通过纯算法手段实现100%的音乐识别准确率几乎是不可能的。来自IMSLP等档案的真实扫描件通常存在纸张折痕、倾斜、墨水褪色以及19世纪出版商使用的非标准字体等问题。如果在行首的调号中引入一个错误,整个后续解码就会变成一片混乱。

因此,Audiveris的设计理念建立在两个紧密关联的组件之上:

  • 计算引擎(OMR Engine)
  • 内置图形编辑器(OMR Editor)

首先由引擎进行识别,然后由人工介入修正。在程序界面中,你可以校正倾斜、修正识别出的符号,或即时调整算法参数,而无需重新处理整个文档。

识别引擎的工作原理

Audiveris的架构可以描述为混合式的。创建者没有盲目地完全依赖经典计算机分析或完全依赖深度学习。对于每种类型的音乐符号元素,他们都选择了各自适用的方法:

  1. 五线谱线和网格使用专门的直线检测算法识别。
  2. 音符符干(连接八分音符和十六分音符的横线)通过数学图像形态学识别。
  3. 文本元素(如标题、速度标记和歌词)被传递给外部OCR引擎。
  4. 符头通过模板匹配识别。
  5. 所有其他固定大小的符号由神经网络处理。

结果以内部XML格式保存(扩展名为.omr),或导出为标准MusicXML 4.0。这种格式几乎被所有现代乐谱软件所支持:Finale、Sibelius、Dorico和MuseScore。

警惕域名陷阱

仓库README中的一个有趣细节:作者特别警告用户提防一个假冒网站audiveris.com

真正的项目托管在GitHub及其关联的GitHub Pages站点上。一个使用.com域名的网站模仿了官方资源,但会将用户重定向到提供加密货币和博彩的第三方服务。如果你想下载现成的安装包,请务必小心。

如何构建和运行项目

代码使用Java编写,使用Gradle构建。你需要JDK 17或更高版本以及Git才能操作它。

该项目使用经典的分支策略:

  • master分支仅包含稳定版本。
  • 所有 active 开发都在development分支上进行。

克隆仓库并从开发分支构建项目:

git clone https://github.com/Audiveris/audiveris.git
cd audiveris
git checkout development
./gradlew build

构建完成后,你可以直接通过Gradle运行应用程序:

./gradlew run

如果你不打算修改代码本身,只是想转换乐谱,开发者为Windows(.msi)、Linux(.deb和Flathub上的Flatpak)以及macOS(.dmg)提供了现成的安装包。它们已经包含了所需的Java运行时环境,因此你无需手动配置环境。

这对开发者意味着什么

Audiveris不仅对音乐家有趣。如果你正在开发媒体内容、数字档案或教育程序相关的服务,这个项目提供了几个很好的机会:

  • 使用Java API。你可以将Audiveris作为库集成到你的项目中,在服务器上自动化处理乐谱PDF。
  • 访问原始文档结构。.omr格式包含识别元素的详细几何信息,便于分析或训练你自己的模型。

这里的学习曲线相当平缓,AGPLv3许可的代码提供了一个构建复杂混合图像处理系统的好范例。

总结

如果你面临数字化乐谱档案或在你的应用中嵌入乐谱识别的任务,就无需再考虑那些售价数百美元的专业工具了。Audiveris展示了一种务实的OMR方法:将自动算法与便捷的手动修正相结合,能够带来出色的实际效果。

相关项目