コントリビューター レミリア・スカーレットへのインタビュー
レミリア・スカーレットさんは、これまで自身のオーディオプロジェクトでCrystalを使ってきました。彼女にその経験について尋ねてみたところ、以下のように語ってくれました。
あなたについて少し教えてください。レミリアさんとはどんな人ですか?
私は長年、いくつかの言語を使ってきたオープンソースの開発者です。主にコマンドラインツールを作っていますが、最近はオーディオプログラミングにも興味を持つようになりました。
あなたはLisperであり、Crystalistでもあります。これは言語の組み合わせとしては珍しいですね!Lispに興味を持ったきっかけと、Crystalに興味を持ったきっかけは何ですか?
Common Lispに興味を持ったのは、2000年代半ばに、単なる好奇心からでした。この言語がいかに素晴らしいかという記事を読み続け、当時取り組んでいたプログラムがこの言語の恩恵を受けられるかもしれないと感じました。そこで、私は「Lispで非自明なプログラムを書けるようになるまで諦めない」と決意し、そこから始めました。最終的にそれは私のお気に入りの言語の1つになりました。Crystalについては、数年前、必要なパフォーマンスを提供できる言語を探していましたが、同時にバイナリが小さく、私のプロジェクトに貢献したい人が現れたときに使いやすい言語である必要がありました(当時、Lispを使っていたのは私だけでした)。ウィキペディアで調べた結果、Crystalを発見し、それが私のニーズに完全に合致していることがわかりました。最近では、どちらも私のお気に入りの言語になっていると言えるでしょう。
最初にLispでプロトタイプを作成し、その後Crystalでリライトすることがあるそうですね?
はい、その通りです。これは、私がCommon Lispを使っていた歴史が関係しています。特にEmacsのSlimeというモードと組み合わせると、その即時性に慣れてしまいました。REPLがあるだけでなく、完全なコンパイラとイメージベースの開発を備えたライブコーディング環境なのです。カーソルを関数に置き、C-cを実行すると、プログラム実行中でも関数がネイティブコードに再コンパイルされます。そのため、調整->コンパイル->テストのパイプラインが非常に短くなります。Common Lispは、その機能やパラダイムに関してCrystalと十分に似ているため、それらの間を行き来することもそれほど大きな問題ではありません。
しかし、私のLispコードはほとんどの場合プロトタイプのままです。なぜなら、LispコードはCrystalほどメモリ効率が良くないからです。ほとんどの場合、最初のLispプロトタイプからCrystalに移行すると、メモリ使用量が約50〜75%減少します。誰かがダウンロードしてコンパイルできるソースリポジトリを配布することも、Shardsほど簡単ではありません。また、仮に簡単だとしても、自分のソフトウェアをコンパイルしたいユーザーのほとんどは、さまざまなLispコンパイラの癖を知らないと思います。そのため、ほとんどの場合、プロトタイプの段階を超えると、Crystalの方がはるかに理にかなっているのです。
また、Common LispでビルドされたHello Worldバイナリは約42MB(しかもstripを実行できない)なのに対し、CrystalのHello Worldは約300KBです。
最も誇りに思っている3つのプロジェクトについて教えてください。
私が今最も誇りに思っている3つのプロジェクトは、Benben(VGMという音楽形式のプレーヤー)、midi123(SoundFontsを使ってオーディオ合成できるコマンドラインMIDIプレーヤー)、そしてそれらに共有されている汎用オーディオ処理ライブラリであるRemiAudioだと思います。
Benbenにオーディオチップセットを追加していますが、これにはどんな経緯があるのでしょうか?
はい!ほとんどのオーディオファイル(WAV、MP3など)は、ストレートなPCM形式または圧縮形式で録音されたオーディオサンプルを保存しているだけです。VGMファイルは、さまざまなサウンドチップに送信された、レジスタ値を読み書きするための生のコマンドを記録している点が異なります。それらを再生するには、これらのサウンドチップのエミュレータが必要になります。Benbenは、バックエンドライブラリであるYunoSynthを使用してこれらのエミュレータを実装しています。80年代から90年代にかけて、アーケードゲームや家庭用ゲーム機、コンピューターで使用するために、かなりの数のサウンドチップが開発されました。これらは、「このサンプルをこの時間に再生する」という単純なチップから、周波数変調合成を使用してその場で音を生成する本格的なシンセサイザーオンチップまで多岐にわたりました。VGM形式はこれらのチップの多くをサポートしており、私はそれらのエミュレータをMAMEプロジェクトからYunoSynth/Benbenにゆっくりと移植しています。
まだ多くのチップが欠けていますか?そして、このプロジェクトに興味を持ったきっかけは何ですか?
まだ10数個のチップが欠けていて、そのうちのいくつかは共通のエミュレーションコアを共有しています。これらの移植には、より複雑であるため、少し時間がかかると思っています。後回しにしたことは、エミュレーションコアを移植する経験を積む上で役立っています。今のところ、Benbenはすでに存在するVGMファイルの約半分を再生できると推定しています。
このプロジェクトに興味を持ったのは、主に昔のビデオゲーム音楽への愛と、公式のコマンドラインVGMプレーヤーに全く満足できなかったことが理由です。私はより良いプレーヤーを書けると感じましたが、同時にプレーンなCやC++コードを書きたくありませんでした。Crystalは、その速度と機能から、まさに最適だと感じました。公式のVGMライブラリへのCrystalバインディングを書くこともできましたが、それよりも100%ネイティブなCrystalポートを書く方がずっと楽しいと感じました。
このようなローレベルな作業でCrystalを経験した現在の感想として、Crystalプログラムを書くことのメリットとデメリットは何ですか?
これらの作業にCrystalを**とても**気に入っています。Crystalの型システム、特に型ユニオンは、動的言語であるかのように、非常に快適な感触を与えてくれます。型を気にせずに実験的なコードをすばやく書くことができ、それでも優れたパフォーマンスを得ることができます。後で、最初のコードを取り出して、型アノテーションで厳密にすることができます。さらに、標準ライブラリには多くの高レベルツールが用意されていますが、必要な稀なケースではポインタ操作にまで踏み込むことを妨げられることもありません。基本的に、私は高レベルプログラミング言語と低レベルプログラミング言語の完璧なバランスだと感じています。
私が今のところ遭遇した唯一の欠点は、エラーメッセージが時々少し分かりにくいことです。しかし、それらは0.3x時代から大幅に改善されており、時間の経過とともにさらに改善されると確信しています。
完全に無関係な個人的な質問ですが、なぜレミリア・スカーレットなのですか?
ああ、名前ですか?私は東方Projectというゲームシリーズの大ファンです。その中でも私のお気に入りのキャラクターの1人が、レミリアという名前の吸血鬼の女性です。数年前からオンラインでその名前を使うようになり、すっかり慣れてしまったので、そのまま本名として採用しました。彼女にちょっと共感したのかもしれません(笑)。私の本当の名前はAlexaです。レミリアを使っていることで、誰かが私を呼んでも、Amazon Alexaデバイスが反応することはありません。
あなたのプロジェクトに戻りますが、それらを使っている人はいるのでしょうか?
最近のオーディオ関連のプロジェクトを使用している人は、まだ誰も知らないです。それらの背後にあるライブラリが、ビデオゲームでの音楽再生の良い選択肢になりうることを考えると、状況が変わることを願っています。
つまり、Crystalで作られたビデオゲームのことですか?
はい、その通りです!Crystalでいくつかのプロトタイプエンジンと、未完成のDoomのポートを作成しましたが、それらの経験から、ビデオゲームを作成するのに最適な言語だと感じています。
あなたのDoomポートは覚えています!そこでカスタムメイドのレベルを作っていましたよね?
ええ!私は90年代半ばからDoomのレベルを作り続けており、自分自身のDoomポートを作成することは、子供の頃からの夢でした。
今後の見通しはどうですか?
Benbenが、近い将来の私の主なプロジェクトになるでしょう。VGM形式がサポートするほとんど、またはすべてのチップをサポートすることが、このプロジェクトの重要な目標です。また、フロントエンドの機能の一部をmidi123にバックポートしたいと考えています。なぜなら、フロントエンドは内部的に非常に似ているからです。それとは別に、実際のレトロスタイルのゲーム(おそらくFPSか縦スクロールシューティングゲーム)を作ろうと考えています。
Crystalのビデオゲームの歴史は、まだあまり開拓されていません。しかし、Windowsのサポートがほぼ完了した今、その流れは加速するでしょう。少なくとも、私の経験では、ゲーマーはWindowsを使っています…
そう願っています!パフォーマンスが非常に優れており、言語を習得するのが簡単であることを考えると、ゲーム開発に最適な言語になると思います。
あなたの詳細についてはどこで知ることができますか?
私のすべてのプロジェクトを見つけることができる個人ウェブページがあります。そして、おまけとして、この動画で、midi123で演奏されたモンキーアイランドの秘密を聴くことができます。