🎹

古の楽譜や MIDI を集めて検索サイトを作った

2022/12/21に公開

古の楽譜や MIDI 集めて、手軽に検索・視聴できるサイト Free MIDI を作りました。foobar2000 っぽい UI なのでエンジニアには馴染みやすいかも知れません。現在はライセンスが明確なクラシックや民謡を 7,000曲ほどサポートしています。いまさら MIDI と思う方も多いかも知れませんが、通信量が小さいので視聴がしやすく、再利用がしやすい利点があります。

その特徴を活かし、検索データを再生するだけでなく、様々な応用ができるサイトになっています。たとえば少し前に MIDI を楽譜に変換するツール midi2abc を作った (記事) ので、α版ながら楽譜を見たり編集することができます。また MIDI を音ゲー形式の楽譜で眺められる Waterfall Piano を作った (記事) ので、ピアノの練習などにも使えるかも知れません。さらに、これから様々な音楽ゲームを追加していく予定です。遊んでみてね。

https://marmooo.github.io/free-midi/

なぜ検索サイトを作ったか

日本にも MIDI サイトはたくさんありますが、Web ブラウザの MIDI サポートが切れた期間が長かったので、放置されて使いにくくなってしまったサイト、失われたサイトが多いです。特に古めのサイトの場合、視聴が大変です。 MIDI ファイルは昔ならプラグインで簡単に再生できましたが、今はサポートされていないので、聴くだけでも一苦労です。海外の MIDI サイトは視聴しやすいものも多いですが、有料が多くなっています。無料だけどほぼ有料のサイトとしては MuseScore が一番人気そうで、非常に多くの曲と楽譜を整備しており、楽譜サイトとしては完成されています。反面、有料またはサブスクリプションをしないとダウンロードができなかったり、色々難しいです。楽譜も改善できそうなケースが見受けられます。他にもいくつかの有料 MIDI サイトや、様々な無料サイトはあるのですが、扱いが難しいものばかりです。そのような現状を見て、使いやすい MIDI サイトが欲しいと思いました。

また最近人気の生成モデルによってコンテンツが爆発して、色々な意味ですごいことになる時代が来るんじゃないかと思っています。最近はテキストや画像に続いて、動画や音楽のモデルも増えてきましたね。ライセンスや著作権の扱いは、今後どうなることやらと心配しています。今後に備える意味でも、人間の作った音楽の歴史を保全し、ライセンスと著作権をきちんと遵守して整理し、自分が使いやすい状態にしておきたいとも思いました。最近の AI トレンドの真逆を行くサイトですが、技術の進化で MIDI を再びブラウザで再生できるようになり、良いものが作れそうだったので作りました。MIDI だからこそできる応用にも興味があったので、良い機会になりました。

MIDI と楽譜

MIDI は MP3 などのフォーマットと異なり、音符の情報の多くが残っている特徴があります。そのため視聴するだけでなく、楽譜も見れたら嬉しいですし、他にも様々な活用ができると面白いです。Free MIDI のサイトにもゲーミフィケーションを TODO として掲げて、既にいくつか作ってもいるのですが、何事も基盤を整えてからが重要です。この記事では楽譜へ焦点を絞りました。

楽譜フォーマットに目を向けると、PDF、ABC、LilyPond、MuseScore、MuseXML、その他無数の有料アプリのフォーマットがあることに気付きます。すべてに対応するのは無理ですし、それ以前の問題として楽譜同士の相互変換もまともにできないものがほとんどです。ほとんどのケースについては一度 MIDI に変換した後、楽譜に変換となりそうでした。MIDI から楽譜への変換には今のところ MuseScore (アプリ) が使われているように思います。そのせいもあってか、MuseScore (アプリ/サービス) で使いやすい MuseScore 形式と MusicXML の楽譜を使うことが増えているのではないかと思います。ただ無料で使いやすい MuseScore 形式と MusicXML のデータを見たことがありません。ABC、LilyPond は音楽家よりプログラマや研究者の間で有名なようですが、ネット上に点在するデータも含めてかき集めれば、かなりの量があります。

楽譜フォーマットを考える上では、古の楽譜がどう扱われているかにも目を向ける必要があります。研究の結果を特定の楽譜フォーマットに書き起こした例も多いのですが、ほとんどは個人利用や研究利用以外では使えません。その点、VWMLIMSLP に保管されている楽譜データは自由に利用できて良いのですが、今度は画像データなのでそのままではとても一般人が再利用できるものではありません。視聴もできなくはないのですが、かなりつらいです。そこで一個人が特定の楽譜フォーマットに手作業で翻訳してライセンスされたものが、ネット上にはたくさんあります。あるのですが、これもまた気持ち良く検索・視聴をできないものがほとんどです。このように、現代人はいまだに古の音楽になかなかアクセスできない状況が続いているのです。この辺の事情は、なぜ作ったのかにも関係しますが、とにかく非常にもったいないと思っていました。そこでライセンスが明確な部分だけでも検索・視聴できるようにすることを、最初の目標にしました。もちろん自分が聞いてみたかった側面も大きいです。

まとめとしては、楽譜と楽譜フォーマットの扱いは、あらゆる場面でとにかく難しいです。特に様々な解釈のある楽譜フォーマットをどこまで対応するかは難しい問題です。現実的には MIDI を介してしか楽譜を生成しにくいので、楽譜フォーマットの信頼性は意外と低いのが現状と考えています。そして世の中には視聴しにくい古の音楽があまりにも多いのが現状です。さらに世の中には楽譜のない MIDI が大量にあるので、それらも活用できる仕組みも同時に欲しいです。以上を踏まえると、MIDI を主体に扱い、楽譜は自動生成を主として扱い、検索・視聴そして応用をメインにしたサービスが面白いと思ったので、実現するサイトを構築しました。

MIDI 再生ライブラリの選定

MIDI サイトの開発にあたっては、まず JavaScript / wasm のMIDI 再生ライブラリを探すことから始めました。まず念のため MIDI の仕組みを先に書いておくと、楽器を鳴らすための音源 (サウンドフォント) を読み込んで、MIDI ファイルの音符情報をもとに音楽を再生します。このとき問題となるのがサウンドフォントのファイルサイズです。質を向上させるほど巨大な容量が必要となります。一般的に利用されている .sf2 形式のサウンドフォントを使った場合、すべての楽器の音階・音源をダウンロードすると 100MB〜2GB になります。フロントエンドでは当然使えません。

そこで Magenta.jssoundfont-player といったライブラリでは、楽器ごと・音階ごとに MP3 にした独自のサウンドフォントを生成して再生しています。そして再生時には必要な楽器と必要な音だけダウンロードすることで、通信量を下げます。この MP3 形式のサウンドフォントを生成する技術は 2013年に確立されていましたが、MIDI をワンパスで再生できる Magenta.js の実装が出てきたのは 2020年で、意外と最近の話です。サウンドフォントの形式は sf2 以外にも sfpack, sfArk などの拡張子がありますが、今や sfpack はメンテされておらず変換にも苦労する状況です。それなら誰にでもメンテしやすい MP3 形式もアリかな、と最近は感じています。

今のところ MIDI をワンパス再生できるのは Magenta.js と、Magenta.js を使いやすくした html-midi-player、あとは timidity.wasmabc.js くらいかなと思っています。他にも楽譜表示ライブラリが再生できる可能性はありますが、未確認です。この中で timidity.wasm は wasm なので中身を弄りにくく拡張しにくい欠点があり、中身を弄るのも大変なので採用は諦めました。abc.js も使いやすくて便利ですが、後述するネットワーク帯域上の利点が大きいので、事前準備なしにすぐに使うなら Magenta.js が無難のため採用しています。

MIDI 再生ライブラリの課題

Magenta.js の MIDI 再生にも課題はあります。MP3 のサウンドフォントを利用している訳ですが、それによって通信容量と同時接続数の問題が生じます。音楽は同じ音を繰り返すので分割した MP3 を適切に鳴らす方法は良いアプローチではありますが、音階ごとにネットワークアクセスが発生するので、再生前の初期接続数は酷いことになります。また圧縮が効きにくいので、MP3 化した場合と比較すると通信量が増えてしまいます。

初期接続数はどうしようもないので諦めます。どれくらい通信量が増えるかですが、Free MIDI にあるクラッシクのデータでは体感的に MP3 の 2倍の通信量を必要とします。ちなみに 1曲あたりの通信量がたった 2倍なら、かなり良い結果と思っています。というのも、ある程度のサウンドフォントをダウンロードしてしまえば、それ以降は MIDI (10KB〜100KB) をダウンロードするだけで音楽をいくらでも再生できるからです。たくさんの曲を聴く場合、MIDI のほうが圧倒的に効率が良くなります。また Magenta.js は Google 製でサウンドフォントも公開されているので、ある程度の通信量は頼ることができます。この利点は他のライブラリと比較して結構大きいです。このあたりまで検証した結果、だいぶ開発の手応えを感じました。

ただし今後は現代音楽も増やしていくつもりなので、そうなった時に通信量は注意が必要です。楽器数が増えるとより多くの通信量を必要となるので、ゲーム音楽では通信量が MP3 の 10倍になったものもありました。そのため現代音楽についてはクラシックとは扱いを変える必要があるかも知れません。解決策は色々と考えてあるのですが、MP3 より高圧縮のフォーマットが出てくる可能性もあります。現時点で耐えられるくらいの状態なら、将来的には期待ができます。

MIDI を活かした機能

ライブラリの選定が終われば、あとは作り込むだけです。せっかく MIDI を使っているので、Free MIDI には MIDI を活かした視聴機能をいくつか入れました。まずは (1) 楽器を指定したアレンジを加えて再生する機能です。ピアノ好きの人などに良いかも知れません。(2) 1 の機能を使うと通信量が大幅に抑えられるので、気軽にいくらでも音楽が聞けます。スマホでもそれほど通信量を気にする必要がなく、気軽に聴けます。(3) 音程を変えずに再生速度を自由に変えられます。MP3 では速度を変えて再生すると周波数が変わってしまいピッチを維持できなくなりますが、MIDI はピッチ情報が記載されているので音が変わりません。(4) MIDI を解析することで、MIDI を難易度順にソートする機能を付けました。音楽を始めたばかりの子が練習するのにちょうどいい曲を探しやすいです。難易度は音符の数で算出しています。今はかなりざっくりとした指標なので、改善の必要はあります。

データ収集

UI が完成した後は、データ収集を行いました。まずはサポートしやすい約 7,000件の部分について公開しています。利用可能とわかっているデータはさらに 1万件以上あるのですが、未整理データのため著作権情報のチェックに時間が掛かります。1年くらい掛けてもまったく終わる気がしない作業量があるので、整理作業は長期的なライフワークとしてまったりやろうと思っています。そこで短期的には、音楽ゲームを開発しながら、ライセンス的に問題のない現代音楽をサポートしていく予定です。このとき、どうせサポートするなら使いにくいデータを使いやすくすることを重視したいと考えています。具体的には消滅してしまったサイトをサルベージして、失われた MIDI データの復活を試みています。日本の消滅 MIDI サイトは割と把握しやすいので、サルベージは何とかなります。ただ海外の消滅 MIDI サイトはさすがに把握しきれません。また日本の消滅 MIDI サイトも、ファイルが残っておらず復元できないケースは結構あります。もしライセンス的に利用可能な消滅データを保有していたり、消滅サイトを知っている方がいましたら、ぜひコメントを頂けると幸いです。

データ整形

収集データは著作権をチェックしながら、統一的に利用できるようデータ整形します。良い方法はないので根性です。たとえば Mutopia のデータはそれなりに整理されていますが、RDF の記述は HTML の記載とかなりズレがあります。他にも著者名と生年没年が間違っていたり、表記ゆれが激しかったり、文字化けていたり、ファイルのパスが壊れていたり、ファイル形式が違ったりするので、地道に手作業で修正します。生年没年は想像以上にデータミスが多いです。歴史研究が進んで更新されたケースもあるので、いくつかのサイトを突合しながら記載し直します。怪しいデータは生年没年を真面目に調査しているので、意外と時間が掛かります。他のデータも同じような問題や、メタデータがおかしい問題が多々あるので手作業で修正します。ただし VWML のデータだけは元の画像データを確認すること自体が困難のため、最低限の同一チェックで済ませています。VWML は古のフォークソングなので著作権的には大丈夫とは思いますが、メモしておきます。ちなみにフォークソングや伝統音楽などは、作曲者を「Traditional」や「民謡」で統一してあります。

著作権情報の調査の次に変だったのは、名前の表記ゆれでした。たとえばショパンはフランスとポーランドで活動していますが、名前はどちらの言語に統一するべきでしょうか。他にも大半の国ではロシア人の名前を読めない問題や、日本人の名前を読めない問題もあるでしょう。今のところは Wikipedia (en) の記載を採用しながらまとめています。ただし正式名称にしてしまうと、たとえば Muzio Filippo Vincenzo Francesco Saverio Clementi となり長すぎて見づらいので、Muzio Clementi およびムツィオ・クレメンティとします。日本語と英語に対応するのも割と手間でしたが、日本語に対応していたほうが音楽の授業に使いやすいでしょうし、一般人の方は検索しやすいだろうと思って頑張りました。このような綺麗なアノテーション付与は既存の多くの MIDI サイトでは扱っていないですし、投稿型サイトだと扱いが困難なので、多少の差別化になるかも知れません。

著作権

まず MIDI の著作権の仕組みについて書いておきます。いま Free MIDI で扱っている MIDI は、楽譜については著作権が切れているものがほとんどですが、楽譜を MIDI や特定の楽譜フォーマットに書き起こした際にさらに著作権が発生します。つまり最近作られたデータしかないので、著作権が放棄されていない限り、著作権が切れていることはありません。つまり書き起こしてくれた方がユーザに自由なライセンスを与えてくれたおかげで、初めて無料で使えるデータだということです。

まずは変換されたデータのライセンスは守る必要があります。また Public Domain の楽譜を利用したデータと書いてあっても、日本では戦時加算があるので著作権のチェックは必ず行う必要があります。そして真面目に楽曲を調査すると、やはり登録ミスや著作権の考慮不足があります。古いデータが多いので著作権のチェック自体も大変なのですが、日本のデータはそれほど多くないので、戦時加算が考慮されていないケースが一番多いです。

著作権は正確に扱おうとするのは非常に困難で、たとえば著作権の期間が定められた時期も国によって異なります。戦争に伴って活動地域を変えている可能性などもあり得るので、根性で扱える範囲を超えていますし、下手に扱うと死にかねません。ただ正確に扱えば良いかというとそうではないと思っています。たとえば海外の楽曲サイトは Public Domain だけど NON-PD-US、NON-PD-EU みたいなキーワードが付いていることがよくあります。これユーザも扱うのに困るんですよね。そこで Free MIDI ではデータを減らしてでも怪しいデータはすべて排除することにしました。個人での対応には限界があるから仕方ないね。代わりにサッパリします。

怪しいデータを削除する方法は簡単です。没年情報をメタデータでしっかり管理して自動削除です。日本の楽曲の著作権は通常通り 2019年を区切りとして没後 50年と 70年で考慮しますが、他国の楽曲は楽譜の利用に考慮が必要な3つの権利事項を最大限に考慮します。考慮すべき権利事項は、(1) 国ごとの著作権、(2) 国ごとの職務著作権、(3) 戦時加算です。他国の著作権も一部の例外を除けば最大 70年と考えれば良いですが、メキシコのように 100年続く国があります。職務著作権は国ごとの情報を正確に掴むことが大変なのですが、米国の95年が最長と思われます。戦時加算は日本、ベルギー、イタリア、フランス、ロシアに適用されています。特にフランスは難しいのですが、フランスの Wikipedia によくまとまっており、最大95年とわかります。最初はメキシコの著作権が長いように感じましたが、実はアメリカもフランスも大差ないのです。

著作権の最長保護期間についてまとめると、1941年より前で最長となるのはメキシコの著作権 100年です。ちなみにコードジボワールの 99年や、アメリカの職務著作権 95年、フランスの戦時加算した著作権 95年などがそれに続きます。1941年以降で最長となるのは、米国で亡くなる直前に職務著作権を行使した著作物を、戦時加算込で日本で利用する場合だと理解しています。これは没年から 95 + 11 = 106年間の保護となります。これらの結果から、2022年現在、日本の著作物なら 1968年没の方まで、他国なら 1921年没の方までの著作物は世界中で安全に利用できると考えて管理しています。このルールで管理すると使える楽曲は減りますが、世界中のどこでも気軽に使えるのが良いところです。

著作権は既存配布のチェック、自分の目チェック、厳しい保護期間ルール、機械の自動チェックと、4重のチェック体制になっているので侵害はまずないと信じていますが、もし侵害しているデータがあればすぐに削除します。出典となる国が明確な楽曲 は保護期間の短縮を検討してはいますが、Mutopia などでも 95年ルールを適用しているくらいなので、ひとまずは現状のルールで良いかなと考えています。

まとめ

古の楽譜や MIDI 集めて、手軽に検索・視聴できるサイト Free MIDI を作りました。思ったより開発に時間が掛かったので、今回は一区切りが付いたところでの公開ですが、TODO は山のようにあります。まずは MIDI から楽譜への変換精度を向上したいと思っています。データ数を増やしながら、MIDI を活かした関連サービスも色々と作っていきます。

https://marmooo.github.io/free-midi/

Discussion