2018-10-29に更新

arduinoでmidiコントローラ

arduinoを手に入れたので楽器を作りたくなった。
サックスっぽいのを作りたい。
再生ソフトはMusic Studio Producerを選択。
色々と調べたところ、PC側に下記を導入すればできるとのこと。

arduino
→シリアルからMIDIに変換するソフト
(serial_midi_converter V2D)
→仮想MIDIケーブル
(YOKE)
→Music Studio Producer

カッコ内はよく挙げられていたソフトだが、windows8だと? 全然動かなかった。
serial_midi_converterはなんか動きがおかしい。
受信信号もエラーになってばかり。
しかもボーレートが31250でなくわけわからない値なので嫌になった。
processingでシリアル受信したら31250で普通に取得出来てるのに。

ということでprocessingのMidiBusを使って自分で作ってみることにした。
ところが仮想MIDIポート一覧を取得してもYOKEが出てこない。
同じくprocessingで作成されているserial_midi_converterでは出るのに。
しかもserial_midi_converterのソースを使って試すとそっちでは出ない。

色々悩んだ挙句、loopMIDIという仮想ケーブルに変えてみたところあっさり出来た。
YOKEはwindows8の64bitだと上手く動かないのかもしれない。

ということで最終的にこうなった。

arduino
→自作ソフトでシリアルからMIDIへ変換
→loopMIDI
→Music Studio Producer

なんとかうまいことMusic Stuido Producerで音を鳴らすことが出来た。
久々にガッツリプログラムした気分。
一応書いたばかりの適当コードも載っけておく。

arduinoのスケッチ

|c|

include <MIDI.h>

char notes[] = {36, 38, 40, 41, 43, 45, 47, 48};

void setup()
{
MIDI.begin();
}

void loop()
{
for (int i = 0; i < 8; i++) {
MIDI.sendNoteOn(notes[i],127,1);
delay(1000);
MIDI.sendNoteOff(notes[i],0,1);
delay(1000);
}
}
||

processingのスケッチ

|java|
import processing.serial.*;
import themidibus.*;

MidiBus myBus;
Serial port;
int[] val = new int[3];
int valno = 0;

void setup() {
size(400, 400);
background(0);

MidiBus.list();
myBus = new MidiBus(this, -1, "loopMIDI Port");
String portName = Serial.list()[0];
port=new Serial(this, portName, 31250);
}

void draw() {
while (port.available() > 0) {
int inByte = port.read();
if (valno == 0) {
if (inByte >= 128) {
val[0] = inByte;
valno++;
}
} else {
val[valno++] = inByte;
if (valno == 3) {
valno = 0;
if (val[0] == 128) {
println(val);
myBus.sendNoteOff(0, val[1], val[2]);
} else if (val[0] == 144) {
println(val);
myBus.sendNoteOn(0, val[1], val[2]);
}
}
}
}
}
||

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント