VOPMex (VST2 64bit)(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でポルタメントレート。ポルタメントは数値が小さいほど速くなる。
和音でもポルタメントができる。どう使ってよいのか分からないのだが・・・ 手順としては以下のようになる。
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フォルダに用意されている。これをベースに好きなように作り込めば、音作りもサクサク作業が進むだろう。 またOPM形式(.opm)はGUIにあるimportから使うことができる。
サウンド
FMの嫌な音全開の耳に突き刺さるサウンド。聞きなれると逆に心地よい?
次はVPOMにリバーブをかけたもの。リバーブだけで随分使える音になることが分かる。
なかなかいいかも
とにかくミニマル感全開という印象。 少ない(?)パラメータで、幅広い音色が作れ、演奏表現もMIDIでコントロールすれば、そこそこ可能。 プリセットから選ぶだけの音源に比べて、細部までコントロールする充実感みたいのがある。 プログラム的な部分が入ってしまうため、人によっては全く使えないだろうけど、これを使いこなすと他の音源では味わえない何かがある。
小一時間使ってみたら動作が不安定だった。 たまにcakewalkごと落ちたり、イベントリストで設定した項目はGUIから受け付けなくなったり、イベントリストからも反映されたり、されなかったり、いろいろ問題が多発。 さすがに古いソフトで、メンテもしてなさそうなので、今時のDAWとは相性が悪いかもしれない。