自作MIDI音源「CureSynth」製作記事の一覧はこちら
回路図、ソースコードはこちら
前回は、自作MIDI音源「CureSynth」の開発用ボードについて紹介しました。
今回は、音源部の構成について紹介します。
1.全体構成
こちらが音源部の全体図です。
1つの音(例えばピアノの”ド”の音)を発生させる部分を「オペレータ(Operator)」と言い、オペレータの個数がいわゆる最大同時発音数となります。オペレータの出力信号は、それぞれ1つの「MIDIトラック(Track)」に対して割り当てられています。このときMIDIトラックには、1つまたは複数のオペレータ出力信号が入力されることになります。そしてMIDIトラックでは、取り込んだ信号を全て加算した上で、トラックに対する演算(3節で後述)を適用後、出力することになります。
このような構成にした理由は、MIDIの仕様によるものです。一般的なMIDI音源には、1つの音を出す上で必要な演算(例えば音色、音階、Velocityなど)と、各トラックに対して必要な演算(例えばExpression、Delayなど)があるため、オペレータとトラックを分けて考えると都合が良いのです。
例として、ピアノの3和音(C, E, G)と、ギターの1音(B)を同時にならす場合を考えてみます。ただし、ギターにはディレイ・エフェクトを掛けるものとします。このとき、ピアノとギターのトラックを分け、ギタートラックにのみディレイ・エフェクトを掛けるのが適切でしょう。そこで、オペレータ1~3にそれぞれピアノのC, E, G音、オペレータ4にギターのB音を発音させ、トラック1にオペレータ1~3、トラック2にオペレータ4を割り当てたあと、トラック2にディレイ・エフェクトを掛ければ実現できます。
2.オペレータの構成
次に、オペレータ内部の構成です。
オペレータ内部には「波形発生器(Wave Generator)」があり、ここでsin波、矩形波、ノコギリ波、三角波、ノイズ音を生成します。そして波形発生器の出力を、「リングモジュレータ(Ring Modulator)」で変調します。さらにADSR(Attack, Delay, Sustain, Release)や、音程調整(Pitch shift)を行ったあと、出力音の強さ(Velocity)を調整した上で、各トラックに出力信号を割り当てます。
3.MIDIトラックの構成
最後に、MIDIトラックの構成です。
各MIDIトラックでは、割り当てられたオペレータ出力信号を加算し(図のMixed operator)、演算を適用していきます。適用順によって音質が変化するため、慎重に検討する必要がありますが、ひとまず、音量コントロール→Distortion→フィルタ(LPF/HPF)→Panでステレオ化→Delayの順に適用することにします。
今回はここまで。次回からはようやく、マイコン(STM32F7)への実装について紹介します。
次回へ続く
コメント