Edited at

12-20 alphaTab

https://adventar.org/calendars/3353 の20日目のエントリーです。

alphaTabは5線譜とギタータブ譜のレンダリングを実現する、JavaScript/HaxeやC#のクロスプラットフォームライブラリです。

https://github.com/CoderLine/alphaTab

楽譜のレンダリングについてはLilypond、musescoreをはじめさまざまなライブラリがあるのですが、今回は自分がC#のアプリケーションに組み込めそうなライブラリとして探している時に発見したものを取り上げます。他の言語環境であれば、他にもlomseVexFlow/VexTabなど、いくつかの選択肢があります。

alphaTabは、基本的にWeb用とクライアントUI用(C#)に分かれていて、Web用には同開発者らのalphaSynth(Web Audio APIとsoundfontを使用したシンセサイザー)を使用して演奏する機能まで統合されているようです。これはJavaScript/Haxeのみです。

「クライアントUI」にはWindows.Forms、WPF、Xamarin.Android、Xamarin.Formsがあります。実際にレンダリングに使用されているのはSkiaSharpです(キャンバスの実装はSkiaとGDI+で分かれます)。JavaScriptとC#の両方で実現できているのはSkia/SVGで一貫性のあるコードが実現できるからでしょう。

スコアのレイアウト構成についてはクロスプラットフォーム部分(AlphaTab.shprojの内容)で、レイアウトの適用やレイアウトされたモデルの反映はプラットフォームごとに、という感じで実装されているようです。(そういうわけで、たとえばconstraint layoutのような環境に適した楽譜を生成できるかというと、レイアウト部分にそれなりの変更を加えない限り難しそうだなという印象です。)

スコアのデータソースについては、(ギタータブ譜がメインなのか)Guitar Proのサポートが手厚いです。MusicXmlもサポートしているようです。それと、独自にAlphaTexというTeXライクな言語を用意しており、これでインポートとエクスポートが可能になっています。(TeXと同じで、わたしは人間が入力する言語とはみなさないです…)