FMサウンド

WOBは標準でFM音源によるサウンド出力が可能です。実はPWMを用いたソフトウェアによるエミュレーションなのですが。

参考にさせていただいた(というより核の部分をコピーさせていただいた)のはPCM1723さんのこちらのソースコードです。WOBではこれを元にライブラリ化しました。また、WOBモニタやDeM命令から操作しやすいように、疑似的にハードウェアに見えるようにI/Oポートとして定義してあります。以下にFMサウンドに関係するI/Oマップを抽出します。

メモリ I/O命令 アクセス 対応するI/Oポート、
アドレス アドレス タイプ メモリ、メソッド カテゴリ 説明
3144-3147 36 R/W player.Voice FM音源 プリセット音色選択(0-6)
3148-3151 37 R/W player.FB フィードバック量(0-7)
3152-3155 38 R/W player.MULT 周波数乗算コード(0-15)
3156-3159 39 R/W player.TL 総合レベル(0-63)
3160-3163 40 R/W player.DR0 減衰レート0(0-15)
3164-3167 41 R/W player.DR1 減衰レート1(0-15)
3168-3171 42 R/W player.SHIFT オクターブシフト(-10~+10)
3172-3175 43 R/W player.NoteBuf 演奏音階バッファアドレス(1000-9999)
3176-3179 44 R/W player.BeatBuf 演奏拍数バッファアドレス(1000-9999)
3180-3183 45 R/W player.Length 演奏データ長(1-99、書き込みで演奏開始)

もっとも簡単な操作方法は、

  1. 音階データと拍数データをデータメモリ上のどこか(1000番地以降)に用意する
  2. 「プリセット音色選択」に音色の番号を書き込む
  3. 音階データの格納されている先頭メモリアドレスを「演奏音階バッファアドレス」に書き込む
  4. 拍数データの格納されている先頭メモリアドレスを「演奏拍数バッファアドレス」に書き込む
  5. 音階データの長さを「演奏データ長」に書き込んで演奏開始

となります。プログラムを書かず、WOBモニタだけでも試すことができます。

音階データ

演奏音階バッファに格納する音階データの種類は下記のとおりです。

階名 データ 階名 データ 階名 データ 階名 データ 階名 データ 階名 データ 階名 データ
C0 0 C1 12 C2 24 C3 36 C4 48 C5 60 C6 72
ド# Db0 1 Db1 13 Db2 25 Db3 37 Db4 49 Db5 61 Db6 73
D0 2 D1 14 D2 26 D3 38 D4 50 D5 62 D6 74
レ# Eb0 3 Eb1 15 Eb2 27 Eb3 39 Eb4 51 Eb5 63 Eb6 75
E0 4 E1 16 E2 28 E3 40 E4 52 E5 64 E6 76
ファ F0 5 F1 17 F2 29 F3 41 F4 53 F5 65 F6 77
ファ# Gb0 6 Gb1 18 Gb2 30 Gb3 42 Gb4 54 Gb5 66 Gb6 78
G0 7 G1 19 G2 31 G3 43 G4 55 G5 67 G6 79
ソ# Ab0 8 Ab1 20 Ab2 32 Ab3 44 Ab4 56 Ab5 68 Ab6 80
A0
55Hz
9 A1
110Hz
21 A2
220Hz
33 A3
440Hz
45 A4
880Hz
57 A5
1760Hz
69 A6
3520Hz
81
ラ# Bb0 10 Bb1 22 Bb2 34 Bb3 46 Bb4 58 Bb5 70 Bf6 82
B0 11 B1 23 B2 35 B3 47 B4 59 B5 71 B6 83

なお休符は99です。

拍数データ

拍数 データ 拍数 データ
全音符・全休符 96 16分音符・16分休符 6
2分音符・2分休符 48 32分音符・32分休符 3
4分音符・4分休符 24 48分音符・48分休符 2
8分音符・8分休符 12 96分音符・96分休符 1

演奏拍数バッファに格納する拍数データの種類は右のとおりです。

3連符はその前後のデータから類推してください。

音色パラメータ

「フィードバック量」~「オクターブシフト」などの音色パラメータは、音色プリセットを行うことで適切なものがセットされます。プリセットの音色は以下の通りです。

プリセット番号 音色 FB MULT TL DR0 DR1 SHIFT
0 Acoustic Piano 5 1 32 1 2 0
1 Electric Piano 7 5 44 5 2 0
2 Tubular Bells 5 9 32 2 2 0
3 Marimba 0 8 34 8 7 0
4 Jazz Guitar 7 3 32 1 2 0
5 Finger Bass 4 1 16 1 2 -2*1
6 Slap Bass 4 1 8 3 2 -2*1

音色パラメータをいろいろいじってどのような音色に変わるのか試してみましょう*2。ちなみに、WOBモニタで採用しているビープ(警告音)は上記プリセット番号3の”Marimba”です。

負の数 WOBでの表現 負の数 WOBでの表現
-1 99999999 -6 99999994
-2 99999998 -7 99999993
-3 99999997 -8 99999992
-4 99999996 -9 99999991
-5 99999995 -10 99999990

*1WOBではわざと負の数の表現をサポートしていません。別のページで説明していますが、ここでは負の数を右表のとおりと覚えておいてください。

*2 実は筆者はFM音源のいじり方(どのパラメータをいじるとどのように変わるのか)をよくわかっていないので、何かいい音色ができたらぜひ教えてください。