VSTi VOPMex (Yamaha YM2151 (OPM) )

2002年ぐらいからあるVOPM(Virtual OPM)というフリーのソフトFM音源が64bit環境でも使えることが分かったので本日遊んでみる。 15年ぐらい前にも仕事の関係で少し触ったことがあったので個人的に懐かしい音源。 初期の多くの音源が消滅する中、まだ存在していたことに驚く。 現在入手できるのはVOPMを拡張したVOPMexというもの。

http://picopicose.com/software.html


この音源は下絵のYAMAHA YM2151(OPM(FM Operator Type-M))というチップを再現している。このチップは1983年に開発され、80年代のアーケードゲームやシャープのX1、X68000等のパソコン音源として使われていた。4オペレータでステレオ8chというコスパ優先FM音源。元々はヤマハのMSXパソコン用音源として開発されたようだ。ヤマハの楽器としては、DX21やDX100にも搭載されている。



DX7をエミュレートしたDEXEDがあるが、FM音源らしさという意味では、こちらのチープな音の方が軍配が上がると思う。どうやってもFMのいやらしさが出るので・・・  またDEXEDでは未実装のポルタメントが出来たり、マルチティンバー音源として使えたりするので、ちょっといじってみようと思えた。

ところがVOPMは、パラメータの挙動に癖があって、FMに慣れていても、ええ?となる。 数値が感覚と逆のものも多く、動作を知らないと混乱する。 こういうところがチップの仕様に忠実なのか、とてもマニアックなにおいがする。 解説を探したが適当なものが見当たらなかったので、動作チェックを兼ねて、ここに書いておくことにした。

パラメータの挙動を理解してしまえば、FM音源としては簡素なので、扱いは楽な音源。 FMはデジタルの強みを生かしてコンパクトにしながらも、表現力を上げようとしているところがいい。 エイリアスノイズさえも音色の一部として取り込んでいるわけで、ユーザーには厳しく、デジタル処理的にはストレートで何もしないという感じ。

適当にベースとメロを弾いてみる。



YM2151のブロックダイアグラム


パラメータ

[con(connection)]

アルゴリズムは、たった8個しかないので、DEXEDと違って迷いはない。FLと書いてあるのはフィードバックレベル。このチップは1個のオペレータだけしかフィードバックできないようだ。

[PROG]
C1 Carrier 1
C2 Carrier 2
M1 Modulator 1
M2 Modulator 2
opMsk 各オペレータのON/OFF
AMS-En 各オペレータAMSのON/OFF
Noise ノイズのON/OFF。 ONにするとC2は正弦波の代わりにノイズを生成。他は通常通り正弦波が出る。

FL 0-7 Self Feedback Level
アルゴリズムでFLがあるM1のみが影響を受ける。 フィードバック値を設定。M1のFLもTLも上げると音程感の残った汚いホワイトノイズぽい音になる。
AMS 0-3 Amplitude Modulation Sensitivity
LFOのアンプ感度設定。数値が高いほど感度が高い。0だと無効になる。
PMS 0-7 Pitch Modulation Sensitivity
LFOのピッチ感度設定。数値が高いほど感度が高い。
NFRQ 0-31 Noise Generator
31 ホワイト
0 レッド
NoizeスイッチをONにしたとき有効。


アルゴリズム7番を使ってM1以外をミュートし、FLのレベルを上げていくと、サイン波がホワイトノイズぽくなる。



NFRQ ホワイトノイズ(31)


NFRQ レッドノイズ(0)というか、高音域がカットされた感じ


[LFO(Low Frequency OSC)]
W saw,Sq,tri,noise 波形は4つから選べる。
FRQ 0-255 LFO Frequency 大きいほど高い
AMD 0-127 Amplitude Modulation Depth 大きいほど深い
PMD 0-127 Pitch Modulation Depth 大きいほど深い



AMDを適用すると振幅が、FRQの周波数と波形によって変化する。


PMDを適用するとピッチが、FRQの周波数と波形によって変化する。 波形が時間軸に対して揺れるのだが、それによってピッチの高低が生じる。



[OP] (M1,C1,M2,C2共通)
TL 0-127 Total level
0 最大
127 無音
AR 0-31 Attack Rate
0 最もゆっくり
31最も速い
D1R 0-31 Decay Rate 1 最初の減衰時間
0 最も遅い
31 最も速い
D1L 0-15 Decay Level 減衰レベル
0 最大
15 無音
D2R 0-31 Decay Rate 2 鍵盤を押しているときの音量変化。無音に向かっていく減衰時間。
0 減衰しない。押している間は一定音量をキープ
31 最も速く途切れるように減衰し無音になる。
RR 0-15 Release Rate 鍵盤を離してからの減衰時間
0 最大 減衰に1分程度
15 リリースなし
KS 0-3 Key Scaling 高い音域ほどエンベロープを高速化し減衰が速くなる。
0 全音域同等
3 最高速
MUL 0-15 Multiply。オペレータの出す音を決定。C3を基準としたときの音も書いておく。自然倍音なのでCGD以外は結構平均率からズレている。
0 オクターブ下 C2
1 基本 C3
2 2倍音 C4
3 3倍音 G4
4 4倍音 C5
5 5倍音 E5
6 6倍音 G5
7 7倍音 Bb5
8 8倍音 C6
9 9倍音 D6
10 10倍音 E6
11 11倍音 F#6
12 12倍音 G6
13 13倍音 A6
14 14倍音 Bb6
15 15倍音 B6
DT1 0-7 Fine Detuning 0~7 ±2セント
0 基準ピッチ
1~3ピッチ上げ +1~2セント
4 基準ピッチ
5~7ピッチ下げ -1~2セント
DT2 0-3 Coarse Detuning
0 基準ピッチ
1 ルート2倍 (+1.41(約短5度))
2 ルート2.5倍 (+1.57(約増5度))
3 ルート3倍 (+1.73(約6度))
と純正調でも平均律でもない上がり方をする。よくわからんが、変な倍音が欲しい時には都合がよいのかもしれない。打楽器とか。


上図は、YM2151のマニュアルから抜粋だが、エンベロープの概要になる。名称が微妙に違うけど。

上記パラメータの挙動さえ理解してしまえば、DEXEDよりも簡単にサクサク音作りができる。 またcakewalkの場合、GUIにあるパラーメータはオートメーションからでも制御が可能。 限界がすぐ見える4オペレータは気楽でいいかも。 常にFMぽさが出ることは、今の時代から見ればメリットに思えてくる。

物足りない場合は、MIDIコントロールを使えば、細かな調整も可能で、どっぷりはまることも可能。 特にエンベロープの自由度はものすごく、1ch当たり128基も使えて、掛け先の自由度、無限ループやら何でもあり。そのうち試してみようと思う。


MIDIコントロールチェンジ ポルタメント

普通のVSTプラグインはGUI上にパラメータがあるのだが、VOPMexは表にすべてあるわけではない。 VOPMexは、MIDIコントロールすることで全機能を使えるようになる。 ここではMIDIコントロールを使ってモノフォニックでポルタメントしてみる。
操作方法はいろいろあると思うが、個人的にはCakewalkで使っているので、とりあえずMIDIイベントリストに書き込んでみた。
CC#126でモノフォニック。ちなみにCC#127でポリフォニックになる。
CC#65で64以上の数値にするとポルタメントがONになり、0~63がOFFになる。
CC#5でポルタメントレート。ポルタメントは数値が小さいほど速くなる。
cakewalkでの設定はイベントリストを使う。

下サンプルのように、ポルタメントが有効になる。



和音でもポルタメントができる。どう使ってよいのか分からないのだが・・・ 手順としては以下のようになる。
CC#127でポリフォニック
CC#65でポルタメントON
CC#5でポルタメントスピード
どうもポルタメントは一度鍵盤から手を離しても前回の音からスタートする。



GUIのコントロール及び、GUIにないコントロールなどは、すべてMIDIで制御する。この部分を使いこなすことができれば、かなり有効な音源になるようには思う。ただしMIDIコントロールの打ち込みは結構面倒なので、現在主流のVST音源と比較してしまうと辛いものがある。


MIDIコントロールチェンジ一覧

0
1 Hardware LFO FRQ (MSB)
2 Hardware LFO PMD
3 Hardware LFO AMD
4 Software LFO1 Depth
5 Portamento Time
6 Data Entry (MSB)
7 Volume
8 Software LFO1 FRQ
9 Software LFO1 WF
10 Pan
11 Expression
12 Hardware LFO WF
13 Software LFO1 Sync
14 CON
15 FL
16 TL OP1
17 TL OP2
18 TL OP3
19 TL OP4
20 MUL OP1
21 MUL OP2
22 MUL OP3
23 MUL OP4
24 DT1 OP1
25 DT1 OP2
26 DT1 OP3
27 DT1 OP4
28 DT2 OP1
29 DT2 OP2
30 DT2 OP3
31 DT2 OP4
32
33 Hardware LFO FRQ (LSB)
34 Software LFO2 FRQ
35 Software LFO2 WF
36 Software LFO2 Depth
37 Software LFO2 Sync
38
39 KS OP1
40 KS OP2
41 KS OP3
42 KS OP4
43 AR OP1
44 AR OP2
45 AR OP3
46 AR OP4
47 D1R OP1
48 D1R OP2
49 D1R OP3
50 D1R OP4
51 D2R OP1
52 D2R OP2
53 D2R OP3
54 D2R OP4
55 D1L OP1
56 D1L OP2
57 D1L OP3
58 D1L OP4
59 RR OP1
60 RR OP2
61 RR OP3
62 RR OP4
63 Software LFO1 Destination
64
65 Portamento on/off 64以上の値でON 63以下でOFF
66
67
68 Software LFO2 Destination
69
70 AME OP1
71 AME OP2
72 AME OP3
73 AME OP4
74 Hardware LFO Force Reset
75 Hardware LFO PMS
76 Hardware LFO AMS
77 Pan
78 Hardware LFO Delay
79 Software Envelope Select 0-127
エンベロープを選択
80 Noise Enable
81 Pitch Bend Range
82 Noise Freq
83 Hard LFO Sync
84 Portamento Control
85 LFO1 Delay
86 LFO2 Delay
87 Velocity Sens OP1 ベロシティ感度を設定します。
0 ... 一定
127 ... 最大感度
88 Velocity Sens OP2
89 Velocity Sens OP3
90 Velocity Sens OP4
91
92 Prog. Change(代替)
93 OpMsk 8を足すとop1を有効にします。
16を足すとop3を有効にします。
32を足すとop2を有効にします。
64を足すとop4を有効にします。
94 Compressor Ratio コンプレッサーのレシオを設定します。
0の時、1:1、
64の時、およそ1:2、
127の時、1:Infになります。
95 Software Envelope Depth 0-127
96
97
98 NRPN (LSB)
99 NRPN (MSB)
100 RPN (LSB)
101 RPN (MSB)
102 Software Envelope Destination エンベロープの掛かり先を設定します。
値に1を足すと、音量に掛かります。
値に2を足すと、ピッチに掛かります。
値に4を足すと、OP1に掛かります。
値に8を足すと、OP2に掛かります。
値に16を足すと、OP3に掛かります。
値に32を足すと、OP4に掛かります。
値に64を足すと、ハードLFOFRQに掛かります。
例えば、ピッチとOP3に掛ける場合、
2+16=18 を設定します。
103 Software Envelope Loop amount エンベロープのループ回数を設定します。
0を設定すると、ループせず、Sustain Levelで停止します。
1で、1回ループします。
127を設定すると、無限ループします。
104 Software Envelope Time 1 T1の値を設定します。(0-1270ms)
105 Software Envelope Level 1 L1の値を設定します。 (128段階)
106 Software Envelope Time 2 T2の値を設定します。 (0-1270ms)
107 Software Envelope Level 2 L2の値を設定します。 (128段階)
108 Software Envelope Time 3 T3の値を設定します。 (0-1270ms)
109 Software Envelope Level 3 L3の値を設定します。 (128段階)
110 Software Envelope Time 4 T4の値を設定します。 (0-1270ms)
111 Software Envelope Level 4 L4(Sustain Level)の値を設定します。 (128段階)
112 Software Envelope Release Time T5(Release Time)の値を設定します。 (0-1270ms)
113 Software Envelope Release Level L5(Release Level)の値を設定します。 (128段階)
114 Compressor Input MIDI Channel コンプレッサーの入力MIDIチャンネルを設定します。
0=ch1, 1=ch2, ...15=ch16
値に32を足すと、指定した次のMIDIチャンネルも入力に使用します。
値に64を足すと、指定したMIDIチャンネルから2つ後のチャンネルまでの3チャンネル分の加算信号を入力に使用します。
値に96を足すと、指定したMIDIチャンネルから3つ後のチャンネルまでの4チャンネル分の加算信号を入力に使用します。
(ch16の次のチャンネルは、ch1になります。)
値に16を足すと、ソフトニー特性になります。
127を指定すると、コンプレッサーは無効になります。
115 Compressor Threshold コンプレッサーのスレッショルドを設定します。
0のとき0dBで、1増える毎に約0.38dB下がります。
116 Compressor Attack コンプレッサーのアタックタイム(0-1000ms)を設定します。
117 Compressor Release コンプレッサーのリリースタイム(0-3333ms)を設定します。
118 Mark S98 Loop 受信した時点(どの値でも良い)を、ループポイントして記憶します。指定しない場合、ログ開始位置がループポイントになります。
119 S98 Log on/off “127”を受信した時点から記録を開始し、“0”を受信した時点で記録を終了します。記録された状態で、エディタの”Export”ボタンを、alt+クリック(Macの場合は option+クリック)すると、S98ファイルとして保存できます。(ただし、この保存方法は変更するかも。)
120 All Sound Off
121 Reset All Controller
122 Local On/Off
123 All Note Off
124
125
126 Mono Mode
127 Poly Mode 0-63 ... なるべく同Slotを確保するポリ・モードに。
64-127 ... 発音毎にSlotを変えるポリ・モードに。



GUI

見た目は古くて、とっつきにくい。 アルゴリズム部分は文字が小さすぎて見にくい。 しかし、使い勝手は意外と良かったりする。パラメータをホイールで操作出来たり、数値を直接入力出来たり等々。 数値も16進数にできたり、ビットで指定するチップを意識したマニアックな作りも好感が持てる。

EGカーブ表示に関してはC1とC2だけが表示されているっぽい。左クリックすると、その部分が拡大される。うーん。


マルチティンバー音源として

オリジナルのYM2151は4チャンネルだが、VOPMexは16チャンネルできるっぽい。 最大同時発音数は8音。


パッチ(音色バンク)

音色はGM的な音色が一通りTONEフォルダに用意されている。これをベースに好きなように作り込めば、音作りもサクサク作業が進むだろう。 .fxbのVSTファイルとなっている。 公式に音色がないという話もあるので貼っておきます。

TONEフォルダ ダウンロード

またOPM形式(.opm)はGUIにあるimportから使うことができる。


サウンド

FMの嫌な音全開の耳に突き刺さるサウンド。聞きなれると逆に心地よい? 


次はVPOMにリバーブをかけたもの。リバーブだけで随分使える音になることが分かる。



なかなかいいかも

とにかくミニマル感全開という印象。 少ない(?)パラメータで、幅広い音色が作れ、演奏表現もMIDIでコントロールすれば、そこそこ可能。 プリセットから選ぶだけの音源に比べて、細部までコントロールする充実感みたいのがある。 プログラム的な部分が入ってしまうため、人によっては全く使えないだろうけど、これを使いこなすと他の音源では味わえない何かがある。

小一時間使ってみたら動作が不安定だった。 たまにcakewalkごと落ちたり、イベントリストで設定した項目はGUIから受け付けなくなったり、イベントリストからも反映されたり、されなかったり、いろいろ問題が多発。 さすがに古いソフトで、メンテもしてなさそうなので、今時のDAWとは相性が悪いかもしれない。


VST