古いパソコンのエミュレータ作成の一環として、各種音源ICのエミュレーションをしたいと思っています。また、昔さんざんいじったMMLを使って今のマシンから簡単に音楽演奏できたら楽しそうだと考えました。そこで、Javaのプログラミングテクニック向上も兼ねて、プレイヤを自作することにしました。
プログラム
MMLプレイヤはJavaで作成しています。ソースも公開します。ソースの改造は自由に行っていただいて結構ですが、ファイル先頭のauthorの部分を削除しないようお願いします。なお、まだプログラムはバグが多く潜んでいるはずです。何か問題を発見しましたら、ご連絡ください。またエラー処理もあまりしていないので、文法違反のMMLを指定すると異常終了することがあります。
2002/5/12 | 初版作成 |
2002/6/8 | 対応MMLコマンド(@, <, >, Q)の追加とバグ修正。 |
2002/6/30 | FM音源のエミュレーション(暫定版)とバグ修正。 |
Jarファイル(2002年6月30日版)とFM音源パラメータファイルのパッケージ
“MMLプレイヤ” をダウンロード MMLPlayer.zip – 392 回のダウンロード – 34 KB
ソースコード
“MMLプレイヤ(ソースコード)” をダウンロード MMLPlayer20020630.tar.gz – 377 回のダウンロード – 90 KB
テスト環境 :J2SDK v1.4.1Beta + WindowxXP Home
APIドキュメント
後日公開いたします。
使い方
JDK1.4.1Betaの実行環境で動作を確認しています。
本プログラムで使用しているjavax.sound.sampledパッケージはJDK1.3から導入されたものですので、それ以前のJDKでは動きません。なお、Windows98+IE5.5(マイクロソフトVM)では動作しませんでした。
アプリケーションとして使う場合は、MMLPlayer.jarとFM音源のパラメータファイル(fmparameters.txt)をカレントディレクトリにおいて、以下のように実行します。
% java -jar MMLPlayer.jar CDE EFG GAB
引数として、最大3つのMML文字列を指定できます。つまり3重和音まで演奏できます
使用できるMMLコマンドは次の節のMML文法を参考にしてください。
MML文法
音符
MMLでは、ひとつの音または休符を次の形で表現します。
音名アルファベット[+|-] [音長][.]
- [ ]は省略可能を表す。
- +: ♯, -: ♭をそれぞれ表す
- 音長は、1が全音符、2が二分音符、…、32が三十二分音符を表す
- ピリオドは付点音符を表す
たとえば、ドの#の付点十六分音符を発音したい場合は、
C+16.
という形で表現します。
音名アルファベット一覧
音名 | 音名アルファベット |
ド | C |
レ | D |
ミ | E |
ファ | F |
ソ | G |
ラ | A |
シ | B |
休符 | R |
音色
音色の指定は以下の形式の文字列です。
@音色アルファベット[音色番号]
現在は音色アルファベットとして以下のものに対応しています。
音色アルファベット | 音色 |
a | 方形波 |
b | 正弦波 |
c | FM音源 |
音色アルファベットc (FM音源)の場合のみ、音色番号を指定可能です。現在は音色番号は0と1のみ定義しています。それ以外の値を指定するとエラーになります。FM音源パラメータの指定の仕方は後述します。
その他の制御コマンド
以下のコマンドが用意されています。
コマンド | 意味 | 初期値 |
L | デフォルト音長の設定 | 4 |
O | オクターブの設定(1 〜 8) | 4 |
V | ボリュームの設定(0 〜 15) | 8 |
T | テンポの設定 | 100 |
Q | 一音の長さのうち、実際に音がなっている長さ(1〜8) | 8 |
< | 1オクターブ上げる | - |
> | 1オクターブ下げる | - |
これらのコマンドは、記述した部分以降のすべてで有効になります。たとえば、
q7T100V5O4L8CD4E
と書くと、テンポ100、ボリューム値5で、ドの八分音符、レの四分音符、ミの八分音符であり、それぞれの音はその長さの7/8だけ鳴っているような演奏をすることを意味します。
FM音源パラメータファイル
FM音源の各種パラメータは、FM音源パラメータファイルで指定します。ファイルのフォーマットは以下の通り。 フォーマットは暫定版のため、今後変更することは確実です。ご注意ください。
音色番号(整数)
アルゴリズム(0〜7)
オペレータ0のマルチプライア(0以上の実数)
オペレータ0のAttack Rate (0以上の実数)
オペレータ0のDecay Rate(0以上の実数)
オペレータ0のSustain Rate(0以上の実数)
オペレータ0のRelease Rate(0以上の実数)
オペレータ0のSustain Level(0〜1の実数)
オペレータ0のMax Lavel (0〜1の実数)
オペレータ1のマルチプライア(0以上の実数)
オペレータ1のAttack Rate (0以上の実数)
オペレータ1のDecay Rate(0以上の実数)
オペレータ1のSustain Rate(0以上の実数)
オペレータ1のRelease Rate(0以上の実数)
オペレータ1のSustain Level(0〜1の実数)
オペレータ1のMax Lavel (0〜1の実数)
オペレータ2のマルチプライア(0以上の実数)
オペレータ2のAttack Rate (0以上の実数)
オペレータ2のDecay Rate(0以上の実数)
オペレータ2のSustain Rate(0以上の実数)
オペレータ2のRelease Rate(0以上の実数)
オペレータ2のSustain Level(0〜1の実数)
オペレータ2のMax Lavel (0〜1の実数)
オペレータ3のマルチプライア(0以上の実数)
オペレータ3のAttack Rate (0以上の実数)
オペレータ3のDecay Rate(0以上の実数)
オペレータ3のSustain Rate(0以上の実数)
オペレータ3のRelease Rate(0以上の実数)
オペレータ3のSustain Level(0〜1の実数)
オペレータ3のMax Lavel (0〜1の実数)
上記を定義したい音色の数だけファイルに収めてください。ひとつの値を1行に書きます。各値の意味は後日紹介します。 (YM2203などのパラメータ値とは現在は一致していません)
デフォルトではカレントディレクトリの fmparameters.txt というファイル名を読み込みますが、-fオプションにより読み込むファイル名を指定できます。
% java -jar MMLPlayer.jar -f ファイル名 CDE EFG GAB
コメント
2020年6月9日現在プレイヤーとソースコードの両方がダウンロードできません。
403エラー書かれたHTMLファイルがダウンロードされます
お手数をおかけします。帰宅したらちょっと調べてみますね。
atuwaさん、不要な.htaccessファイルが残っていたので削除しました。
これでダウンロードできるか試してみてください。
ダウンロードできました。ありがとうございました。