n2kd FM Driver v1.0a(beta じゃないやつ)
2026-07-12
タグ: #music #release今年 01/03 に v1.0a (beta 1) を公開してから、追加で 14 回目の更新、漸く n2kd FM Driver の v1.0a の公開に到達した。 v1.0a (beta 1) の時点では、それなりの完成度になっていると勝手に思っていたのだが、M3 2026 春向けの曲を作るのに実際に使ってみると、色々とボロが出てきて beta が外れるまでに結構時間がかかってしまった。 印象に残っている作業を挙げると、SB16 及び SBPro でのテンポ管理機能の導入と廃止、MML ドキュメントの HTML 版作成、MML コンパイラの最適化だろうか。
SB16 及び SBPro によるテンポ管理は、PC/AT 互換機で SB の PCM 再生機能による定期的な割込を利用して楽曲を演奏しようという試みだった。 PC/AT 互換機では、自由に使えるタイマの数があまり多くないので、OPL3 があるならまず間違いなく同時に存在するであろう SB の PCM 再生機能をテンポ管理に使えれば、結構ありがたいんじゃないかという思い付きが切っ掛けである。 実装してみると最初はなんかそれっぽく動いている雰囲気だった。 しかし、ちゃんと検証すると、環境によってテンポが違ったり、楽曲途中でのテンポ変更がうまくいかなかったりと問題があることがわかった。 試行錯誤したが解決することができなかったので、最終的にこの機能は撤廃することにした。 というわけで、現状 PC/AT 互換機版では演奏時のテンポ管理に使えるタイマは i8253 PIT のみである。
MML ドキュメントの HTML 版は、あるといいかなあ、とずっと思って作っていなかったのでこの機に作ったものである。 MML ドキュメントは元々手書きのプレーンテキストのものを配布物に含めていたが、整形を全部手動かつ気分で行っていたため、Markdown とはあまり近しくない雰囲気になっていた。 本 Web ページは Zola で作っているので Markdown 版の MML マニュアルが欲しかったが、 同等の Markdown を別に用意して 2 つの文書を維持するのは、面倒なのでやりたくなかった。 もにょもにょ悩んだ結果、原本になる Markdown を 1 個書き、それを Pandoc で変換して、プレーンテキスト版と HTML 用の Markdown 版の MML マニュアルを生成することにした。 Pandoc は、Lua で書いた独自の filter と writer を読み込ませて変換時に所望の処理を行わせることができる。 元々書いていたマニュアルに雰囲気が近くなるようなプレーンテキスト版用と、Zola に上手く食わせられる Markdown 版用の filter と writer をそれぞれ作って、なんとかした。 大変だった。 成果物のHTML 版 MML マニュアルはここにある。
MML コンパイラの高速化は、ここで作った Petit Profiler が滅茶苦茶役に立って捗った。 コンパイル対象の MML の内容にもよるが、運が良い場合なら最初の実装に比べて 6 割弱くらいのコンパイル時間まで高速化させることができた。 保守しないといけないコード増えるので避けたかったが、一部どうしても遅い関数はアセンブラ化した。 高速化の余地が残っていない訳ではないが、少な目の労力で結構高速化する部分は大体手を入れてしまったので、以後、高速化はあんまり積極的には行わないつもりである。
今後の計画の優先度高めのところとしては、PC-9801-118 の OPL3 部分対応と、OPN 及び OPNA 対応を考えている。 が、特に急ぎとも思っていないため、いつ完成するか皆目見当もつかない。 それでも、完成した後で曲を書けるくらいに元気なうちには達成したい。