Top

楽しい電子楽器

Arduino Mellotron (メロトロン風ミニキーボードを作る)
Make a mini-keyboard like Mellotron using AVR microcontroller

Haruo Yamashita   since 15,oct,2016

  更新2016/10/17 

Mellotronを作るって?

シンセと並んで我々の世代が憧れた楽器にMellotronがあります。アナログシンセと同時期(1970年前後)に華々しく登場し、ストリングスを中心に一台でオーケストラが再現できると言われ、単音楽器であったシンセサイザーを補完する役割を果たしました。
一鍵毎がテープレコーダになっている。まさにアナログで、電気よりもメカ技術の塊で力技。今考えるしと、何というものを作ったのでしょう。実際には以外とLo-Fi で、歪みやこもり具合、ワウフラッターも味になっていました。
シンセは自作できたわけですので、その憧れ具合はシンセ以上かもしれません。

今回作ろうとしているのは、もちろん本物の構成のメロトロンでも、最近はやりのメロトロン音色をサンプリングした楽器でもありません。

何をしようと目論んでいるかというと、


Photo01 本物のMellotron 400S


Photo02 PortaSound PS-3

【その1】ポータサウンドのキーボードを解体し、Mellotron風の外観のミニキーボードを作る。

 以前から、Mellotronで採用されているGスケールの不思議なキーボード(一見最低音のGがCに見える素敵?なキーボード★)に興味がありました。
 たまたま実家で埋もれていた「ポータサウンド」を発見し、そのミニキーボードを切断してGスケールのキーボードを作りたいというのが発端です。 これさえできれば、後は木工細工でメロトロンライクの木製ケースを作り、白く塗装すれば楽しいだろう。

 このときには音出しのことは全く考えておらず、見かけだけの「置物」でも良いと思っていましたが、せっかくなのでArduinoでキースキャンしMIDIを出力すれば、古いiPhoneに入っているアプリManetronにつないで音が出せたら面白いかなと思っていました。

【その2】Arduinoで音を出して独立した楽器(メロトロン風ストリング・アンサンブル)にする。

 とりあえず、ARM thereminの発音部のソフトを移植すると音が出るので音出しをしてみました。 いざ音が出ると、
 ・Mellotron風のミニキーボードなので「ポリフォニック」にしたい
 ・昔のストリング・アンサンブル的な音が出たら楽しい
 ・せっかくならメロトロンの特徴的な音に近づけたい
など欲求が広がり、深まり泥沼にはまって行きました。 (なにせ、8bitのArduino(AVR)ですので)
 どうせうまくいかなければ止めれば良いという全く無計画、行き当たりばったりでプロジェクトを始めました。














【その1】キーボードを作る


Photo03

Photo04

Photo05

Photo06
 

Photo07(a)(b)(c)

Photo08

Photo09


(Photo2)
 「ポータサウンド」は、1980年にヤマハから発売されたミニキーボードで、私の持っていたのはPS-3。44鍵のものです。当時、ポリフォニックなオルガンを作ろうとすると、膨大な量の回路が必要になるので手を出せなかったところ、これが発売され、シンセのサブ楽器として購入したようです。(記憶に無いのですが)
素の音はとてもシンプル。それでもフェーザーなどを通せばなんとかなるのではと思い購入したようですが、やはり使い物にならなかったようでお蔵入りしていました。

(Photo3)(Photo4)
 パネル面のスイッチ類を外す。次に、ベーク基板上のパターンの上に構成されているキー接点をばらす。キー裏には、キーの幅に切れ込まれた黒い導電ゴムリボンがあり、各キーで押される仕組みになっている。
 片面ベーク基板上には接点とダイオードとマトリクスが構成されている。キースキャンマトリクスはアクティブhighで、下位アドレスの駆動側が6bit(半オクターブ分)、上位の受け側は8bit構成になっています。

(Photo5)(Photo6)
 Melltronの35鍵Gスケールに合わせてキーボードを切断したところ。 両端のキーは鍵盤端用の形状になっていないため使えない。切断して余ったキーで置換できるものも無いので作らないといけない。(G~Fでなく、F~Eであればこんなことにならなかったのですが・・)  35鍵に合わせて接点基板と導電ゴムリボンも切断します。マトリクスの配線がズタズタになりますが。

(Photo7)
 最低音のGキーは、左に黒鍵F#が無い不思議なキートップのG鍵盤。最高音のFキーも右に黒鍵F#が無いキーで、これは最近あまり見かけない37鍵Fスケールで使われていたキートップですが、余ったキーには使えるものがありません。
 写真(a)はキートップの切り出しの様子。写真(a)の左は、最高音のF用のキートップをC鍵盤から切り出したところ。右は最低音のG用のキートップをF鍵盤から切り出したところですが、残念ながら黒鍵の位置が違うため少し幅を広げる必要があります。
 写真(b)は、ベースになるGとFキーからキートップを取り去ったところ。
 写真(c)は、これらを継ぎ接ぎして作ったGとF鍵盤。

(Photo8)(Photo9)
 完成したキーボード部です。この時点でキーボードの両端を切断に加え、不要な奥行き方向も切断、さらには高さ方向も切断しています。 調子に乗って切断しすぎて、固定用の部材が無くなることに気づかず、エポキシ粘土で作る必要がありました。
 ここまでの作業は全て図面レスの現物合わせです。

(Photo10)(Photo11)
 こちらも現物合わせで製作中の木製ケース。Mellotron400Sの雰囲気だけ残しつつコンパクトにしました。キーボードの固定は、はめ込みとネオジウム磁石。中に入れる回路はまだありません。

(Photo12)
 水性アクリル塗料のホワイトで厚塗りしたところ、それらしい雰囲気になりました。
まだ回路は決まっていないので、パネル面も未加工です。



Photo10

Photo11


Photo12





<スライドショー>




【その2】発音部を作る

 Mellotron風の楽器ということで、4音ポリフォニックは欲しいところです。
 また、マイコンにAVR(ATmega328)を使いArduino IDEで開発することにしたので、どこまで処理できるか検討しました。試作はArduino Pro/miniの互換品を仕様

 発音タイマー割込部は、ARM thereminのものを流用するため、ARM Thereminのスペックを整理すると、
  ・CPU Clock 16MHz (Arduino IDEで開発するためで、20MHzまで上げる余地有)
  ・Sampling周波数 31.25kHz
  ・3音同時発音

 それに対し、今回狙うスペックは、メロトロン(stringsの)に近い音色のストリング・アンサンブル(懐かしい)です。
 昔のストリング・アンサンブルは、当時の安価な電子オルガンと同じで、分周式のトップオクターブ・トーンジェネレータで最上位の12音を発生し、さらにそれぞれを分周することにより全音同時に発音します。 しかし、分周による発音で不足する厚みを、BBD素子を使ってアナログ的に遅延し、その遅延時間をLFOで変調することによりピッチを変動させます。 代表的なものは、BBDを3系統備えそれぞれを三相のLFOで変調し、それらと原音を混ぜることにより、4音に相当するストリングスのアンサンブル効果(コーラス効果)を得ています。
 このようにして当時のストリング・アンサンブルは、Melotronのような複雑で深みのある音は難しいとしても、ピュアできれいな独特のストリングサウンドを実現していました。


 今回は、AVRのソフト処理で音作りを行うため、BBDに相当する時間的な遅延を使用することは、RAM容量からも処理速度からも難しいため、1ボイスあたりのオシレータ数を増やすことでアンサンブル効果を目指します。

方針

・外付けのディレイ回路は用いない。
 1音あたり2オシレータのデチューンを基本にアンサンブル効果を得る。
 2オシレータは、ステレオで出力する。
・同時発音数を増やすためにはサンプリング周波数を下げねばならないが、がんばって周波数の低下を最小限にする。(精神論)
・しっかりしたアナログのアンチエイリアスフィルタを用いる
・4音ポリで自然なポリフォニックを得るため、しっかりしたキーアサイナーが必要。

仕様

・4音ポリ。1音あたり2オシレータ → 計8オシレータ
・発音部は、8bit/256byteのLUT,1/2オクターブ毎に帯域制限した波形を選択
・波形は、ストリングス系を複数用意し、リアルタイムで混ぜる。
・波形出力は、AVR の8bit PWM を用い、ステレオ出力
 PWM キャリア 62.5kHz
・サンプリング周波数 20.83kHz(ARM Thereminの2/3)
・余力があれば、キーアサイナーを改良し、Turbo Modeを設ける。 単音~3音を発音しているとき、空いているオシレータを利用してアンサンブル効果をブーストする。これにより、1音あたり最高4オシレータを実現する。

ハード構成

・Arduino Pro/mini互換ボード
  ・キースキャンのためのポート拡張(パラシリ変換)   ・PWM でステレオ出力 ・アナログ回路ブロック   ・3次アンチエイリアスフィルタ  カットオフ 約7kHz
  ・アンビエントコントロール回路      ステレオの混ぜ具合を調節し、<mono - stereo - expanded stereo> を変化させる。
  ・音量とトーンコントロール(超シンプル)


Arduinoソフトウエアの構成


soft1


ソフトの構成
(1) key scan keycode:0~34
(2) MIDIgen: keycode → MIDI Note ON/OFF
(3) key assignor: Note ON/OFF → 4VoiceのCV / Gate 生成
(4) vibrato LFO: 8sineLFO (2LFO /1Voice)
(5) detune controler: detune量をnote毎に変化させる。
(6) tone controler: 波形の音色をnote毎に変化させる。


【その3】音作りの工夫

アンビエント・コントロール(Ambient control)

 このArduino Mellotronは、基本は1音あたり2オシレータです。(後でターボモードを追加し、発音数の少ないときはオシレータをアサインして、1音あたり4オシレータにもできますが・) したがって、ストリングスの再現に必要なアンサンブル効果(コーラス効果)は、デチューンした2オシレータを干渉で実現することになります。鋸歯状波のような高調波の多い波形では、倍音同士が周期的に強調と打ち消しを行い豊かな音色変化が得られます。(効果については、PWMに近い)
 このようにコヒレントな強い干渉は、実際の楽器のユニゾン演奏と比べると不自然ではありますが、シンセ・ストリングスとよばれる2VCOのシンセの特徴的なサウンドとして愛されています。

 ストリング・アンサンブルらしくするには、もっと自然なアンサンブル効果がほしくなります。 より実際のアンサンブルに近づけるため、2オシレータを電気的に干渉させる代わりにステレオでL/Rに分けて出力し空間で干渉させてみました。 結果は、音の広がりはすばらしい代わりに干渉がとても弱く肝心のアンサンブル効果が希薄になってしまいました。
 他にも、視聴位置により効果が異なる点とヘッドホンで聴くと空間的な干渉が全く起こらず広がり感のみになる点にも配慮が必要です。
 ここでステレオに逆相の干渉をプラスする(スーパーステレオ?)と、干渉によるアンサンブル効果とステレオによる広がりが同時に得られることがわかり、アンビエントコントロールと名付けたアナログ回路を作りました。

 AVR からはL/R独立で出力し、アンビエントコントロールでL/Rの混ぜ方を連続的可変します。
 アンビエントVR=0 とすると、(L,R)出力からは、(0.5L+0.5R, 0.5R+0.5L)が出力されます。これはモノラルなので強い干渉が起こり、シンセ・ストリングス的な音になります。
 アンビエントVR=0.5 とすると、(L,R)出力からはそのままステレオで(L,R)が出力され、干渉は少なく広がり感が得られます
 さらにアンビエントVR=1.0 とすると、(L,R)出力からは(1.5L-0.5R, 1.5R-0.5L)が出力される仕組みで、強い干渉と広がり感が得られます。
 ストリング・アンサンブルとして使うときは、アンビエントVR=0.7~0.8が自然で良さそうでした。再生する環境により異なりますので実際に音を聞きながら、アンビエントをコントロールすると良いと思います。

デチューン(Detune)

 2オシレータしかないので、デチューンの量は重要です。デチューンのかけ方として次のふたつが考えられます。

(Type A) CVへのオフセットでデチューンかける。
 周波数に比例したデチューン量になるので、低域に対して好ましく設定すると、高域はうなり周波数が高くなり聞きずらい音になります。(KORG PE-2000は、これしかできなかったと思いますが、どうしていたのでしょう・・ )

(TypeB) 周波数へのオフセットでデチューンかける。
 こちらは干渉によるうなり周波数が一定になります。   こちらの方が無難ですが、いろいろ試したところ、両者の折衷(TypeBを基本とし、周波数により少しデチューン量を変える)が良いことが分かりました。

ビブラート(Vibrato)

 単純なデチューンでは、規則的な音色変化になり、いかにもシンセ・ストリングス的になります。これを逃れるにはデチューン量を周期的に変化させる(ビブラートを掛ける)が有効だという情報を頂き、数Hzの正弦波でビブラートを掛けています。 L/Rでビブラート周波数を変えたり、ビブラートの位相を変えたりしましたが、いずれも、かつてのBBDを使ったストリング・アンサンブルに少しずつ近づき良い感じです。

メロトロン(Mellotron)に近づけたい

 ここまでくると、ストリング・アンサンブルではなく、メロトロンぽいストリングス・サウンドに近づけたくなりました。 まず、音色をより高調波成分の多いものに変更しました。
 そうすると音色は少し近づきますが、残念ながらエリアシングが目立ってきて音が濁ります。 しばらく、エリアシング覚悟で実験していると音階によってエリアシングの影響が異なることに気づきました。つまり折り返し周波数が倍音に馴染む音階では音の濁りが少なく、イコライザーで高域を持ち上げて少し高域が歪んだようなアナログ的な歪み、メロトロンの特徴的なLo-Fiサウンドに近くなることがわかりました。
逆にエリアシングで濁る音階は、倍音を制限せざるを得ず、音階毎に音色が変わってしまいます。 しかし、これが良いのです。鍵盤毎に音色が変わると、メロトロンらしくなります。
 なぜならメロトロンは、音階毎に別々に録音するわけで、弾き方も変われば弦が変わることもあり当然音色が異なります。さらには、アンサンブルの具合やビブラートなども異なることが予想できます。
 そこで、波形だけで無く、音階毎にデチューン量とビブラート周波数も変えてみました。そうすると、メロトロンらしさが感じられてきました。

ターボモード(Turbo mode)

 いくら頑張っても、1音2オシレータでは、少人数のストリングスにしかならないが、それなりにいい感じになってきました。
 ここで言うメロトロンらしさというのは、比較的少ない音数でメロトロンらしいフレーズを弾いたときに感じられ、密集したコードを弾くとストリング・アンサンブルに戻ります。
 少ない音数の表現が大切であることから、ターボモードのアイデアが沸きました。
 Arduino Mellotronは、全体で8オシレータありますが、音数の少ないときは、使用されないオシレータがあります。このとき空きオシレータを有効に使うようにアサイナーに手を入れました。
  ・単音と2音 4オシレータ/1音
  ・3音    4オシレータ/1音と2オシレータ/1音の混在
  ・4音    2オシレータ/1音
 途中で音数が増えたとき突然オシレータ数が減る現象が起こるため不自然になるのではと予想していましたが、音数による音量調整を行うことであまり気にならないことが分かりました。(メロトロンサウンド固定なので、リリース無しですので)
 ターボモードでは、LとRそれぞれの中で電気的な干渉が起こるため、それに合わせてアンビエントも調整した方が自然になります。


サウンドサンプル

#1 starless

#2 circus

#3 ambient control

#4 bass sound

#5 island

#6 heavycode

inserted by FC2 system