Cafe'Tec Yagiyu

のんびり気ままに技術進捗

ArduinoUNOをMIDI音源にしてみる

ゴールデンウィークが過ぎましたが、皆さんはどうお過ごしになられたでしょうか。私は家でずっといました。まあ予想通りでした。

この前の自作プリント基板の記事が予想以上の反響だったようで、アクセス解析では1日だけアクセス数が桁違いになっていました。ありがとうございました。

 

さて、今回はArduinoMIDI音源にするということで、n番煎じですがやってみました。

この前のOnlyMyRailgunの手動プログラム打ち出しでの演奏に比べて随分楽に音が聴けます...(当たり前)

 

MacでArduinoをUSBMIDIデバイスにするまで – necobit.com(ねこびっと)

MIDI INの実験 | curious4dev

作業にあたって、こちらの記事を参考にさせていただきました。ありがとうございました。

 

では手順についてまとめていきます。

1. ArduinoをUSBMIDIデバイス化する

f:id:yagiyu-tec:20160507163627j:plain

f:id:yagiyu-tec:20160507164024j:plain

Arduino - DFUProgramming8U2

公式のページにありますが、画像のようにUSB側のICSPピンのRESETピンとGNDピンをジャンパでショートさせてArduinoをPCに接続します。するとDFUがリセットされるので、ジャンパを外します。

 

2. PC側の設定

f:id:yagiyu-tec:20160507165932p:plain

Xcodeの"Preferences..."をクリックします。

 

f:id:yagiyu-tec:20160927135142j:plain

"Locations"の"Command Line Tools"オプションでXcodeのバージョンが表示されていればCommandLineToolsがインストールされています。私は見たときにはインストールされていました。

Mac での Xcode コマンド ライン ツールのインストール - RAD Studio

こちらに詳細があります。

 

次に、MacPortsをインストールします。

The MacPorts Project -- Download & Installation

 

それも完了したら、ターミナルから「sudo port install dfu-programmer」と入力してdfu-programmerをインストールします。

PC側はこれで準備完了です。

 

3.Arduino側の設定

まずはこちらからMIDI Firmware forArduinoUno(Moco)をダウンロードします。

GitHub - kuwatay/mocolufa: mocoLUFA (MIDI firmware for Arduino Uno)

ダウンロードした中の"dualMoco.hex"をデスクトップにでも移動します。

ArduinoUNOを接続し、ターミナルで

dfu-programmer atmega16u2 erase

dfu-programmer atmega16u2 flash (dualMoco.hexのパス)

dfu-programmer atmega16u2 reset

を実行します。

dualMoco.hexのパスは、FinderからdualMoco.hexのアイコンをドラッグ&ドロップしてターミナルに持っていくと簡単に入力できました。

Macのターミナル.appでファイルやフォルダのパスを簡単に入力する方法 / Inforati

 

4.書き換えの確認

これでArduinoMIDI音源にできたはずなので、一度Arduinoの接続を外してもう一度PCに接続します。

f:id:yagiyu-tec:20160507175631p:plain

DAWMIDIプレイヤーで"MocoLUFA"と表示されていることを確認します。私は無料アプリのMIDITrailで確認しました。

MIDITrail

MIDITrail

  • WADA Masashi
  • ミュージック
  • 無料

 

5.Arduinoにプログラム

ArduinoMIDI信号を処理するプログラムを入れます。まずはMIDIライブラリをインストールし、「スケッチ>ライブラリを使用>Add Library...」から追加します。

Arduino Playground - MIDILibrary

MIDI INのプログラムでToneライブラリ(デフォルトで入っているtone関数とは別物)を使っている記事もありますが、ここではtone関数を使うことにします。

 

Toneライブラリを使っていて、Tone.cppのエラーが出ることがありました。これはTone.cppのヘッダ挿入の部分で「#include "Arduino.h"」が抜けていたためでした。なので、ライブラリを追加する前にXcodeなどで追加しておくと、Finderで検索する手間が省けます。

 

プログラムはこちらを参考にしました。

MIDI INの実験 | curious4dev

「int vol = 1;」となっているところを「int vol = 0;」に変更しました。

 

ちなみに、MIDI音源にしたArduinoのプログラムを書き換えるには、画像のようにMOSIとGNDをジャンパでショートさせて接続して書き換えます。ジャンパピンがあればそれを使うのがめんどくさくなくていいと思います。

f:id:yagiyu-tec:20160507182734j:plain

f:id:yagiyu-tec:20160507182745j:plain

 

6.ArduinoMIDI IN

ジャンパの接続がないことを確認して、MIDI音源としてPCにArduinoを接続し、MIDIプレイヤーでMIDIデータを再生します。

 

MIDIRonald McDonald - YouTube さんにお借りして圧電スピーカーで再生してみました。(動画の音がだいぶ小さい上に生活音も入っているのでご了承ください)

 

MIDI.hがマルチチャンネルに対応していないのと、Arduino自体の処理が追いついていないのとで出せていない音があったりしますね。今後改良していきたいところではあります。

 

というわけで、ArduinoUNOをMIDI音源にしてMIDIファイルを再生するまでできました。

ここまでくると自分でデータも作って再生するまでやってみたいですね笑

データの綺麗な再生にも挑戦していきたいところです。

 

それでは、次の更新まで。

 

See you again!

 

 

投げ銭していただければ、めちゃくちゃ喜ぶのでよかったらよろしくお願いします。

↓えさを投げる(Ofuseのサイトに飛びます)↓