Cross Platform MIDI Tools Advent Calendar #1: クロスプラットフォームMIDIプレイヤーを作る


もう4年ほど前になるが、かつて、X68000時代に存在していた美しい音楽プレイヤーを再現するという目的で、MLDSPというプロジェクトを作った。MLDSPは、つい最近まで存在していたMicrosoft Silverlightという技術を、MonoチームがLinuxで実現するために作った、MoonlightというGUI基盤の上に作られていた。Silverlightはブラウザプラグインとしてのみ存在したが、Moonlightはデスクトップ上でも実行できるGUIを構築できるよう、Moonlight Desktop (Gtk.Moonlight)というGUIフレームワークも開発していたのである。 その後、Moonlightがdisconになり、MLDSPはその巻き添えを食らう形で動かせなくなった。その後、筆者の興味がこの方面に戻ってくるまで、この音楽プレイヤーのプロジェクトは死んだままだった。それが2013年になって、Web MIDIやYamaha eVY1といったかたちで、MIDI音源が再び遊ばれるようになったので、それならMLDSPを別の実装のかたちで復活させよう、と思ったのだった。

今日は書き始めなので、簡単にこのプロジェクトの経緯についてだけまとめる。今後何日間かは、当日書いたコードや、それぞれの日の進捗について書くのではなく、これまで調べたことなどを中心に書くと思う。

今日はとりあえずスクリーンショットを載せておこう。実のところ、既にSMFファイルを選択して演奏させながらキーボードで演奏状態をリアルタイムに楽しむことはできる。今後は、このAdvent Calendarを書きながら、このプレイヤーや周辺ツールを改善していくことになると思う(筆者のやる気次第で)。

Initial screenshot

基本的な目標として、筆者は日常的にUbuntu Linuxを使っていて、この環境で使えるMIDIツールがほしいので、今回書くコードは全て最低でも筆者の環境で動作することを目的としている。開発言語・環境は今のところC#とMonoとなっている(C#でなくても良いのだが、とりあえずは使用したい自作のMIDIライブラリがC#なので、今はC#を使っている)。また、筆者の手元には、主に使う予定のMIDI音源として、20世紀に発売されたRoland SC-8820とYamaha eVY1というUSB MIDI楽器がある(他にもあるが割愛)。さらに、ソフトウェアMIDI音源としてtimidityとfluidsynthを使うこともあるし、今後はfluidsynthを中心に使うことも考えている。

これらの一部でも動作対象外とする環境は、筆者が支持し使用するところではない。たとえばWeb MIDI APIは、その実装においてLinuxが対象外であったり、ソフトウェア音源を積極的に排除するものだから、まともな仕様になってまともな実装が実現するまでは、支持しないので使わない。

また、当座はデスクトップ環境を中心に構築していくつもりでいる。モバイル環境はオーサリング環境としては未整備な部分が多すぎて、作業環境とするには厳しいので、今は対象としない(おもちゃとしてはアリだけど)。実のところAndroidの習作としてMLDSPのようなものを作ったこともあるが、手持ちの端末のない頃に作ったもので、全く利用していない。その辺りは作るとしても今ではない。

初日にあまりいろいろ書くと今後全くもたなくなるので、今日はここまでとしたい。

December 1, 2013
20 words


Categories

Tags

Author

Backlog