for choral rehearsal rooms
OCR と楽譜記号認識を組み合わせた、合唱練習のための変換パイプライン。oemer + music21 で構築中。
ここでは、PDF → MusicXML 変換ツール v0.4 の設計と実装判断を残します。 合唱の練習現場で「紙の楽譜を、そのまま道具として扱えない」という課題に対する、自前パイプラインの記録です。
合唱の練習現場では、紙の楽譜のスキャン PDF が日常的に共有されます。 ところが、個別パートの抽出、伴奏を抜いた練習音源の生成、移調による声の負荷調整 —— これらを「PDF のまま」やるのは現実的ではありません。
既存の楽譜認識ツールは精度が出ない箇所、特に 歌詞テキストと音符の対応付け、繰り返し記号、フェルマータの認識で詰まります。 合唱の現場が必要としている粒度に届かない、というのが出発点でした。
入力 PDF は、まず <pre-process /> 段で傾き補正・五線抽出を行い、 <oemer /> へ渡します。OMR の出力は粗いので、 歌詞アライナと反復記号ソルバを通して、 最終的に <music21 /> の内部表現へ正規化します。
ここから先は、MusicXML と MIDI の二系統に分岐するだけです。 「正規化された中間表現を作る」ことが、合唱の現場が必要とする操作(移調、抽出、繰り返し展開)を後付け可能にしました。
1def convert(pdf_path: Path) -> Score:
2 page = preprocess(pdf_path)
3 raw = oemer.recognize(page)
4 aligned = lyric.align(raw)
5 score = music21.from_omr(aligned)
6 return score.resolve_repeats() /works/pdf-to-musicxml に埋め込み試用版を公開