0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Arduino経由でMIDI信号を改ざんする

Last updated at Posted at 2022-05-31

レトロなDTM用MIDI音源には、操作パネルが無いものもあります
ハードウェアのMIDIコントローラー等はお高くつくのでPCだけでなんとか簡単にMIDI音源を操作できないかな。。。
と思ったことはありませんか?

今回は、Arduinoを使ってMIDI音源をコントロールしてみたいと思います

必要なもの
・Arduino&USBケーブル
  Arduino UNOなど

・仮想MIDIドライバー
  LoopMIDI
  http://www.tobias-erichsen.de/software/loopmidi.html

・シリアル-MIDI変換ソフト
  Hairless MIDI<->Serial Bridge
  http://projectgus.github.io/hairless-midiserial/

・MIDI音源
  これがないと始まらない!?
  ※USB接続できないものは別途MIDIインターフェースが必要です

ArduinoやArduinoIDEで使用可能な各種開発ボードをUSBケーブルで接続します
FThYrK2aAAAsLbo.jpg

Serial portにArduinoのCOMポート、MIDI OutにMIDI音源へのインターフェースを設定し、MIDI送信するアプリケーションの出力をloopMIDIにしてください

Arduinoにプログラムを転送するときは、左上のチェックボックスをOFFにしないと転送時にエラーになります
image.png

MIDI信号の受け取り方ですが
このように、1バイトずつMIDI信号を拾ってもよいのですが

	while (Serial.available() ) {
		data = Serial.read();
	}

MIDIライブラリというものがあるのでそちらを使うと簡単です

#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();

Arduinoのライブラリはこのようにグローバルにインスタンスを持つのが一般的な様です

まずは初期化

void setup()
{
	MIDI.begin(MIDI_CHANNEL_OMNI);
	MIDI.turnThruOff();
	Serial.begin(115200);
}

シリアル-MIDI変換ソフトの通信速度設定も115200に合わせておきましょう

メインループは大まかにこんな感じです

void loop()
{
	uint8_t ch, sts, d1, d2;

	if (MIDI.read()) {
		sts = MIDI.getType();
		d1  = MIDI.getData1();
		d2  = MIDI.getData2();
		ch  = MIDI.getChannel();

		// MIDIデーター改ざん処理

		// MIDIデーター送信
		MIDI.send( sts, d1, d2, ch);
	}
}

setupで、

MIDI.turnThruOff()

と記述して、そのままOUTにTHRUされないようにして、自分で

MIDI.send()

を使って改ざんしたデーターを送信してあげるという流れになります

例えば、すべてのバンクセレクトを0にする場合

		// MIDIデーター改ざん処理
		if (sts == midi::ControlChange && d1 == midi::BankSelect) {
			d2 = 0;
		}

の様な感じです
この場合のmidi::BankSelectは0(LSB)です
32(MSB)を設定してあげる場合は定義が無い様なので直値で追加してみてください

デバイス一覧に出てくるものであれば、Microsoft GS Wavetable Synth等のソフトウェア音源でも操作可能です

実際のところ、X68kの出たなツインビーがSC-55mkIIでちゃんと鳴らないってところからこのコーディングに至りました
ArduinoUNOにMIDIシールドを付けて、実機でも動作可能なのでぜひ試してみてください

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?