2012年9月15日土曜日

EWICONの作成・・・その1

今の天気 快晴、気温 22度。
ちょっと蒸し暑い・・・・・・・

また、新しい事を始めてしまった syncton です、こんばんは。

なにを始めたかというと・・・

AKAI EWI-USB で自作のアナログシンセを鳴らしてみたい!」


・・・です。

いつもの事ですが記事が長~いです。
お急ぎの方は、最後に短い演奏サンプルがありますので、そちらへどうぞ・・・

・・・で、そもそものきっかけは、EWI-USBでシンセを鳴らした時に感じる違和感です。
息を吹き込んだ時の音量変化やリップ・センサーを噛んだ時の変化がイメージと合わないのです。
なんて言うか、「このくらい吹いたら、このくらい音量が変化するだろう」とはならないんです。
なんか、一生懸命吹かないと大きな音が鳴らなかったり・・・

そんな事もあり、購入してから数えるほどしか使っていないのでもったいないです。
おそらく、慣れの問題なのでしょうが慣れる前に吹くのをやめてしまっては・・・

EWI-USBを演奏する上で改善したい事

  1. センサーの感度を視覚的に確認しながら練習したい
  2. 演奏の合間にセンサーの感度を簡単に調整できるようにしたい
  3. ブレス・センサーのカーブを変更できるようにしたい
  4. MIDIノート、ブレス、ピッチベンド、モジュレーションをCVとして個別に出力したい
・項目1に付いてはLCDにバー・グラフでブレスの効き具合を表示してみよう。秋月のレベルメータ用10連LEDとかも良いかな。
・項目2はEWI-USBに対してコントロールチェンジを送る事で実現できそう。値の変更はできればロータリー・エンコーダーでやりたい。
・項目3はまだ考えていません。将来対応できれば良いかな。
・項目4については当初 RJBさんから譲って頂いた CMU-800 MIDI/IF を使おうと考えましたが、なんらかの改造が必要なのと、根本的な問題としてCMU-800のスペックではピッチベンドに対応するのは不可能とわかったのでPSoCで自作することにしました。
#CMU-800 のCVの分解能って半音単位だったんですね、最近気がつきました。

CVの個別出力のイメージは・・・
  • MIDI Note  ------------> CV1 
  • Breath or Expression  ---> CV2 
  • Pitchbend  ------------> CV3 
  • Modulation  -----------> CV4 
・・・こんな感じ。


そこで、最低でも項目1,2,4についてマイコンで実現できればアナログシンセにも接続できるし、使い勝手もかなり良くなりそうです。

・・・で、とりあえず名前を付けておこうかな。
AKAI EWI-USB Analog Controller 略して EWICON です・・・いつも安易だなぁ~
#EWICONの発音はGoogleさんで確認してみてください(^-^)v。

EWICONの構成

接続イメージ

赤枠が EWICON。ブルーが自作シンセ。

EWICON機能一覧(実装予定と願望)

  1. MIDI-IN x 1,LED x 1
  2. MIDI-OUT x 1, LED x 1(EWI-USB設定専用)
  3. MIDIからCVに変換(Note,Breath/Expression,Pitchbend,Modulationなど。設定で変更可)
  4. CVは4ポート(出力メッセージは設定で変更可)
  5. ポルタメント(GLIDE)機能
  6. Note No. は36(C1)~95(B5)の60音階を受信(範囲の開始Note No.は設定で変更可) 
  7. トランスポーズ機能(±1オクターブ)
  8. EWI-USB本体の設定をEWICONから変更
  9. EWICONのユーザ・インターフェースはタクトスイッチx 6(上下左右、トランスポーズ+、-)とロータリーエンコーダ x 1で行う
  10. LCD (16桁x2行) x 1 バックライト付き(センサーの感度も表示可)
  11. printfデバッグ用RS232Cポートx1(送信のみ)
  12. チューニング支援機能(基準CV/Breath/Expression生成)
  13. GATEは実装しない
  14. PCを使用せずにEWICONに直接EWI-USBを繋ぎたい
#うぉっ!? 全部実装しようとするとPSoCのピンが足りない様な気がするけど・・・

・・・で、今現在の状況ですが、PSoC(CY8C29466)にMIDIノート(CV1)、Breath/Expression(CV2)とピッチベンド(CV3)の処理を仮実装。
テストは以前作成したVCOと今回新規に作成するESM-2ベースのVCA、MIDI-INとMIDI-OUTをブレッドボードで作成、PSoC用の基板は Cメータ にピンソケットを追加して作りました。PSoCは出力ピンを自由に変更できるので便利ですね。

ちょっと規模がでかくなってきた。
MIDI入出力、MIDI to PWM と PWM to CV
シミュレーション結果です。上段がPWM、下段がCV。
コンデンサの容量を増やすと、CV電圧が安定するまで時間が掛かるのか・・・。
でも、容量が小さいとPWMの周波数の波が消しきれないし・・・

MIDI入出力回路

使用フォトカプラーは去年秋月で買ったPC817C(一番安いやつ)。
・・・でフォトカプラーって何でも良いのだと思ってたら、そうじゃないんですね。MIDI用には反応速度の速いものが必要なのだそうです。
そこで、JO-MIDI-FMさんの「汎用 4 ピンフォトカプラを使った MIDI 入力」を参考に作成しました。

PWMからCVを作成する回路

PWM to CV はRJBさんの「PWM MIDI-CVコンバータの実験」を参考に作ってみました。RJBさんの回路ではPICを使用していますが上記回路ではPSoC(CY8C29466)に変更しています。

PWMの周波数は12.5kHz(24MHz/1920)
PWMのデューティを1,920段階に分割、CVの電圧範囲は0V~5V、MIDI Note No. は36(C1)~95(B5)にしています。これで半音の1/32までCVを細かく?出力できるはず。ピッチベンドも試してみよう。
調整はTR101(100k)の半固定抵抗で1V/Oct.になるようにします。

MIDIパーサー

今回はMIDIの詳細を把握しておきたかったので自作。
全体の処理の流れはRJBさんの「CMU-800 MIDI Interface 2011モデル」のファームウェアを参考にさせて頂きました。
  • MIDI入力はUARTの割り込みで処理しデータをリングバッファに格納
  • メインルーチンの永久ループでリングバッファのデータをパーサーに渡して処理する
着手してから一ヶ月近くたちますがプログラムは苦手。特にC言語はね。
ただ、MIDIパーサー部分は機種依存しないのでPC上のEclipseを使って基本的なテストを行っています。
あと、MIDIはステータスの種類によってデータの長さが変わったり(1バイト~3バイト)、ランニング・ステータスも実装しないといけないし、リアルタイム・メッセージはいつでも直ちに処理しないといけないとか、プログラムがぐちゃぐちゃになりそうです。そこで実装漏れがないように図を作りました。これを見ながらプログラミングすると少し楽になりました。
やっと出来た・・・と思ったら、さっそくバグを発見。
Program Change と After-touch のデータは1バイトだったのね。
ステートを1個追加しなきゃね。落ち着いたら修正しよう。

テスト用VCA

VCAは RJBさんのESM-2 VCA を元に作っています。・・・が、どうも上手く動かせません。

RJBさんのVCAは、無駄なものは一切ない引き締まった回路。
「何も足さない、何も引かない」・・・山崎

1段目は音声信号、2段目はCV、
3段目はGLIDEを通した後のCV、4段目がVCAの出力。
シミュレーションでは上手く動いてるんだけどなぁ~

CVで音声信号の増幅は一応できているのですが、CVを大きくするとDCオフセットがマイナス側にどんどん大きくなっていきます。そして、凄くノイズが載っています。
上段がVCOの出力、下段がVCAからの出力波形。
なんか凄いノイズです。実際は全体的にもっと多くのノイズが出ています。

配線のチェックなども何回かやりましたが原因不明。
状況としては・・・
  1. CVが0Vの時、VCAの出力も0V(予定通り)
  2. CV入力が小さい時(1~2V)、少し増幅される(予定通り)だが、マイナス側に少しOFFSETする
  3. CV入力が大きい時(5V)、大きく増幅される(予定通り)だが、マイナス側に大きくOFFSETする
やってみた事・・・
  1. キンピ指定の抵抗値をテスターで測定し値をそろえる→変化無し
  2. トランジスタを変更してみる(測定環境がないので適当なものに変更) →変化無し
  3. Q401,Q402のコレクタ側の+電源にバランス調整用の半固定抵抗を入れて調整(Analog 2.0方式) →OFFSETが若干改善されるが変化はほんのわずか。改善せず。
  4. OFFSET調整用RV401で調整 →OFFSETが若干改善されるが変化はほんのわずか。改善せず。
実績のあるVCAですし、LTspiceでのシミュレートも上手く動いているので、明らかに実装ミスなのですが問題の箇所がみつかりません。
VCAの回路はトランジスタが主体なので回路全体がお互いに影響し合って動作しているようで、試行錯誤でどうにかなる物ではありませんでした。
トランジスタの回路は非常に難しく手も足も出ません(^_^;)

今回のVCA作成はEWICONのテストが目的なので、本格的に作成する時に再度挑戦する事にします。
・・・で、試しに Analog 2.0のVCAを実装してみたところ上手く動かせたので、しばらくはこの環境でEWICONのテストを進める事にします。

現時点でできる事・・・

  • MIDIノートを受信しCVに変換、VCOをコントロールできる。
  • ブレスで VCA をコントロールできる。
  • ピッチベンドでVCOの音程を変化させる事ができる(まだまだ調整が必要)

レスポンス(レイテンシー)について

実際に演奏してみたところレスポンスは今のところ問題ないです。
一応、オシロスコープで Note ON を受信してからCV発生までの時間を測定してみました。
  • Note ON 受信完了から PWM のデューティ設定までの時間
上段がMIDIのNote On の信号、下段がCV。
PWM が反応するまでの時間は約 0.74ms。

  • PWM が反応してからCV電圧が安定するまでの時間
上段がMIDIのNote On の信号、下段がCV。
PWMが反応してから約 1.6ms
結局、MIDIデータが確定してからCVが安定するまでの時間はおよそ 2.34ms。
この遅れって、どうなんだろうね・・・

今はUARTの割り込み処理の中で MIDIデータをグローバル変数に格納しているだけ。
その後、メインルーチンで MIDIデータをパース後、PWMのデューティのセットしているが、パースに時間が掛かりすぎかもしれない。
これだと連続してMIDIデータが到着した時は、明らかに処理が間に合わない様な気がする。

実際、ブレスとピッチベンドを同時に使用すると音がざらついた感じになるから、これが原因でデータの処理漏れが有るのかもしれない・・・

演奏してみた・・・

EWI-USB + EWICON + VCO + VCA を使用。
J.S.Bach - Cello Prelude(BWV.1007)

MIDIデータを作るのが大変なので今回は最初の7小節(25秒)のみ。
まだ、上手に演奏できないのでシーケンサにステップ入力してから、後でブレスをレコーディング、最後に細かな修正を加えてリバーブかけました。
このくらい吹けるようになりたいなぁ~

演奏中の画面

とりあえず演奏中の画面に数値で表示してみた。
左から MIDI Ch, Note No, Breath , Modulation
やっぱり数字じゃ視認性が悪いね(^-^;)

まぁ~、色々問題もありそうですが面白くなってきました。
しばらくは実現性の確認とデバッグですね。
ゆっくりやっていこうと思ってます。

では・・・

参考資料
■pcm1723 さん:「汎用 4 ピンフォトカプラを使った MIDI 入力」
■RJB さん:「PWM MIDI-CVコンバータの実験」
http://homepage2.nifty.com/rjb/labo/other/pwmmidi2cv/pwmmidi2cv.htm
■RJB さん:「ESM-2 関係暫定ページ」 ESM-2ブロック図、回路図など
http://www.rjblog.net/esm-2/
■JIS X6054-1:「電子楽器ディジタルインタフェース (MIDI) -第1部:総則」 P.3 図4.1 標準ハードウェア
■JIS X6054-2「電子楽器ディジタルインタフェース (MIDI) -第2部:プロトコル仕様」
http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X6054-2
■岩上直樹さん:書籍「達人と作るアナログシンセサイザー自作入門」 P.116 - 電圧制御増幅器(VCA)

0 件のコメント:

コメントを投稿