PICマイコンを使ったMIDI Channel Changer の製作 2019.5.27


    1.はじめに ~~ MIDI Channel Changer とは ~~

     音楽活動をしている知人からの依頼で、「MIDI Channel Changer (MIDIチャンネルチェンジャー)」を製作しました。

     「MIDIチャンネルチェンジャー」とは、MIDI-INから入力されたMIDIボイスメッセージのチャンネル番号を、操作ボタンによって選択された特定のチャンネル番号にリアルタイムに置換しながら、MIDI-OUTにスルー出力するものです。

     音源を持たないMIDIキーボードと、マルチティンバーのMIDI音源との間に設置して使います。MIDI音源は予めチャンネル毎の音色設定がなされているものとします。

     一般的なMIDIキーボードでは、自身が出力するMIDIのチャンネル番号を自由に変更できる機能が備わっており、チャンネルを変更することで、MIDI音源から発する音色を選択することが出来ます。 しかしながら、MIDIキーボードのチャンネル変更操作は簡単とはいえ演奏中に瞬時にして行うことは困難です。これを実現するのがMIDIチャンネルチェンジャーです。

     チェンジャーを使うと、キーボード演奏中に瞬時にして音源の音色を変更することができます。楽曲の演奏途中で、ある小節からある小節までの部分を、例えばそれまでのブラス系からストリングス系へと瞬時に切り替えることが簡単に行えるようになります。 MIDIキーボード側の操作で送信チャンネルを切り替えているのではとても間に合わず、このようなことは困難です。


    2.外観等

     製作したチェンジャーの外観を下に示します。上面には、電源ボタンと電源LED、チャンネル選択ボタンが16チャンネル分の16個と、現在選択しているチャンネル番号表示用のLEDがあります。

     背面には、DIN5ピンの標準MIDIコネクタがINとOUTの2つ、ACアダプタを接続するDCジャック、さらに音が鳴り止まなくなった時にオールノートオフ等のメッセージを出力するための「PANIC」ボタンがあります。

     電源は、DC9V~12Vまでのアダプタを使います。センタープラス、マイナスどちらでも繋ぐことができます。所要電流は、数十mA以下とわずかです。YAMAHAやRolandのMIDI機器の電源アダプタを流用することが可能です。

    製作したチェンジャーです。16個のチャンネル選択ボタン、LED、電源ボタンがあります。 背面には、MIDIコネクタとDCジャック、PANICボタンがあります。 タカチのネットワークケース「PF18-4-12」を使いました。

    3.使い方

    3-1 機器接続

     MIDIキーボードのMIDI-OUTコネクタとMIDIチャンネルチェンジャー(以下本装置と呼ぶ)のMIDI-INコネクタをMIDIケーブルで接続します。次に本装置のMIDI-OUTコネクタとMIDI音源のMIDI-INコネクタをMIDIケーブルで接続します。
     ACアダプタを本装置のDCジャックに接続します。


    3-2 電源投入

     MIDIキーボードやMIDI音源、ならびに本装置の電源を投入します。電源が入ると緑色の電源LEDが点灯します。
     電源投入直後は、チャンネル番号「1」が選択されており、番号表示LEDに「1」が表示されます。


    3-3 チャンネル選択
    5のボタンを押すとLEDに5が表示される。

     1から16までのチャンネル選択ボタンを押すと、押したチャンネルの番号がLEDに表示されます。

     これ以降、MIDIキーボードから本装置に送信されてくるMIDIボイスメッセージのチャンネル番号は、選択されたチャンネル番号に置換されて本装置から出力します。


    3-4 チェンジ動作の停止(MIDIスルー)

     演奏の開始に先立ってMIDIキーボードやシーケンサー等を使ってMIDI音源の設定や制御を行う場合には、チャンネルチェンジしては困るようなこともあります。このような時にはチェンジ動作が停止できると便利です。

     チャンネル番号10のボタンを押しながら電源を投入すると番号表示が「0」になります。この後、いずれかのチャンネル選択ボタンを押すまでは、チェンジャーとしての動作を停止し、MIDI-INからのMIDIメッセージをそのままMIDI-OUTにスルーします。


    3-5 「PANIC」ボタン

     チェンジャーの基本的な動作は、MIDI-INから受信したボイスメッセージのチャンネル番号を選択されたチャンネル番号に置き換えることですが、この場合に考慮すべき大事なことがあります。

     例えば、MIDIキーボードのチャンネル設定が「1」で、本装置のチャンネル選択が「3」となっていたとします。この時、0x90, 0x35, 0x40 というノート・オンを受信すると、0x92, 0x35, 0x40 に変換してMIDI音源に送信します。この直後にチャンネル選択を「3」から「5」に変更したとします。

     離鍵により、MIDIキーボードからは、0x80, 0x35, 0x40 というノート・オフが送信されてきますが、これを、チャンネル選択「5」に従って 0x84, 0x35, 0x40 に変換して音源に送信してしまうと、0x92で指定したノート・オンの発音が停止しないというまずい状態になります。

     このようなことが発生しないよう本装置では、常にノート・ナンバー毎にノート・オンとノート・オフのチャンネル番号の対応を管理し、ノート・オフを送信する時には、ノート・オンを送信した時のチャンネル番号で出力するようにしています。

     しかしながら発音が停止しないという状況が発生する可能性を否定することはできません。そのような時に背面の「PANIC」ボタンを押すと、チェンジ動作を停止し、全チャンネルについて、オール・ノート・オフやリセット・オールコントローラ等のメッセージを出力します。MIDI音源はこれにより発音停止することとなります。


    3-6 チェンジ動作時のMIDIメッセージの扱い

     チェンジ動作時のMIDIメッセージ個々の変換仕様の詳細については、こちらの「MIDIチャネルチェンジャー取扱説明書(第2版)」を参照ください。


    4.ハードウエア

     本装置のハードウエア回路図は次のとおりです。基板2枚で構成しています。

    下側のベース基板の回路です。
    上側のスィッチ基板の回路です。
    4-1 ベース基板回路

     MIDIのチャンネル変更を行うためにPIC32MX250F128Bを使いました。MIDI-INからの信号は、フォトカプラTLP513を経由して、PIC32の17番ピンに接続しています。17番ピンのRPB8はUART2のRXにマップしています。

     変換後のMIDI-OUT信号は、PIC32の16番ピンからトランジスタC1815を経由して出力しています。16番ピンのRPB7はUART1のTXにマップしています。

     チャンネル選択の16個のボタンの読み出しは、I/Oピンを少なく出来るアナログ入力で行っています。2番ピン(AN0)、3番ピン(AN1)、25番ピン(AN9)、26番ピン(AN10)の4ピンで済ませています。

     チャネル番号表示用のLEDの表示制御は、RB0からRB4とRA4の6ピンを使っています。PANICボタンの読み取りは、RB13で行っています。RB13の入力側には、10KΩと1uFのコンデンサでチャタリング防止、ノイズ誤動作の防止を行っています。

     スィッチ基板とは、2つのコネクタで接続します。

     電源回路は、+9Vから+12Vのアダプタを使う場合と、+5Vのアダプタを使う場合の2通りの回路が選択出来るようにしています。+9V以上の場合には、センターマイナス、センタープラスのどちらのアダプタも使えますが、+5Vのアダプタの場合は、センタープラスのみとなります。

    4-2 スィッチ基板回路

     こちらの基板は、LED表示回路と16個のタクトスィッチを納めています。

     7セグLEDの下位桁の表示については、7セグデコードICを使いましたが、上位桁は、表示する数字が1だけですのでデコードICは使わずにセグメントLEDを直接駆動しています。

     16個のスィッチは、4個ずつのグループに分けて、抵抗分圧の電圧変化によるスィッチの押下判定を行っています。

     ベース基板とは2つのコネクタで接続しベース基板の上にスタックします。

    4-3 基板の製作とケースの加工

     基板の設計には、KiCADを使い、製作は、Elecrowに発注しました。出来上がってきた基板に部品を実装したものが次の写真です。

    ベース基板です。基板の右側はスィッチ基板がスタックされるので部品はほとんど配置していません。 スィッチ基板です。コネクタには、2mmピッチのPHコネクタを使っています。 ベース基板にスィッチ基板をスタックした状態です。

     トップカバーの穴あけですが、電源スィッチや電源LEDの穴の位置は適当でも問題ないのですが、チャンネル選択ボタンやチャンネル表示用LEDの穴あけは位置決めが重要です。事前に、KiCADの基板図面を使って位置を正確に割り出しておきます。

    穴の位置をマーキングしています。 穴あけ作業の終わったカバーです。
    5.ソフトウエア

     ・MIDIのチャンネル変更を行うマイコンには、使い慣れたPIC32MX250F128Bを採用しましたが、16ビットや8ビットのPICでも問題なく製作できるかと思います。

     ・MIDI-INにはUART2-RX、MIDI-OUTには、UART1-TXを割り当てましたが、それぞれ送信、受信の片側しか使っていませんので、UART1あるいはUART2のどちらか一方で纏めることも可能でした。

     ・UARTは、MIDIの信号速度31.25KBPSに設定します。UART2からMIDI信号を読み出し、MIDIのステータスバイトに従って、ボイスチャンネルであれば、チャンネル番号を変換し、UART1へ出力します。

     ・「MIDIチャネルチェンジャー取扱説明書(第2版)」に示す変換仕様に基づいて変換するだけの簡単なプログラムとなっています。