ORCΛでMIDI音源を鳴らす(IAC Busの場合)
前回までORCΛのオペレーターについての読み解きを進めてきましたが、ようやく音を出す記事を書けます。
とはいえ、普通ならPilotを使って音を出すところから始めるのですが、それは他にも色々記事がありそうなので、
MIDIでの連携について書いていきたいと思います。
MIDIとは?
MIDIとは"Musical Instrument Digital Interface"の略で、その名の示す通り音楽機材を相互接続するためのデジタルインターフェースの規格です。MIDIは1981年に公開されてからいまだに現役で使われています。
流石に四十年近く前に策定された規格なので解像度が荒い(128段階)などありますが、枯れた規格なので色々な場面で使われていたりします。その後もUSBでMIDI接続ができるようになるなどうまく形を変えて継続されてきていますが(現在の機材は下手するとUSB MIDIにしか対応してない、とかありますからね)昨年2019年には待望のVer. 2.0の規格策定が始まりました。
この記事で分かる事
今回はMIDIをコンピューターの内部で使って、ソフトウェア音源を鳴らしてみたいと思います。
ORCΛは命令を作り出すことはできますが、ORCΛ自身は音源を持っていませんから何かしら別途音源に命令を送る必要があります。
ORCΛはMIDIの他にもOSC(Open Sound Control)などにも対応していますが、今回はMIDIを使ってみます。
前提/目標
- macOSを使います
- IACDriverを使って同じmacOSで動くソフトウェアシンセを鳴らします
Operatorについて
ORCΛでMIDIを扱う場合は「: 」(コロン)を使います。
: (コロン)
・コロンに対してbangを与える(上下左どちらから渡しても大丈夫)
・ : の後にchannel octave note velocity length のパラメータを渡すことができる
・velocityは0からzに0から127がマップされている
・lengthは0からzまでのフレーム数
という感じです。実際のコード(と呼ぶのか?)では、、、
.Dz......
..:03Caz.
例えば上記のような場合、lengthがzなので、Dをzにしないと音の発音が終わらないうちに次のbangが来てしまいます。
...........................
...Dz............Da........
....:03Caz........:03Gaa...
...........................
...........................
...Dd......................
....:03cad........:03gad...
..................*........
...........................
...........................
............4C2............
.............10O10.........
..............20XN.........
..................N........
...........................
こんな感じで動かすと、、、
#Orca をIAC Busで内部のmidiを鳴らしてみた。Orca側でmidiのchは指定できるけど、ポートは指定できないのかな。 pic.twitter.com/XNsaKeFrDw
— Hiroshi Yamato / dropcontrol (@yamato) January 23, 2020
こんな風にORCΛからMaxを鳴らすことができます。で、そのために使うのがIACDriverです。
IAC Driver
macOSには「Audio Midi Setup」(日本語表記だと「オーディオMIDI設定」だっけな)というのが入っていまして、それを使って設定します。"Windowメニュー>View MIDI Setup”で以下のようなMIDI関連の設定を行うウインドウを開きます。
そこにIAC Driverというデバイスがあるので、それをダブルクリックすると以下のような表示になります。Portsの左下にある+をクリックして新しい内部のMIDI Portを加えます。
MIDI Portには各自MIDI IN/OUTでそれぞれのMIDI チャンネルを設定できます。
重複させた場合は同じMIDI チャンネルにデータが流れます。
どういうことかというと、MIDIはデバイス毎ではなくポート→チャンネル、という関係でつながっているので同じポートのINで待ち構えていれば重複した場合同じデータが流れます。
やりようによってはそれを使って一つのMIDI信号で音をレイヤーしたり出来ます。
上記はIAC Bus 1というポートを用意しました。
名前自体はなんでもいいのですが、ソフトウェアシンセ側で同じ名前でMIDIを受けてあげないとならないです。
詳しい設定は下記のリンクなど見るとよくわかると思います。
MAC IAC Driver:
https://haramikata.jougennotuki.com/npage503.html
先ほどもOperatorのところで書いたように、ORCΛではMIDIチャンネルは指定はオペレーターでやります。
.Dz......
..:03Caz.
先のこの例なら :03Caz なので、MIDI channelには0が指定されているので、この出力先はMIDI チャンネルは 1 になります。
次に、MIDIの入出力の指定はMIDIメニューから行います。
これだとちょっとこれで上の赤丸の"Next Output Device"を選択するたびに右下の赤丸の表示が切り替わります。で、これだと全部表示されていないので、ウインドウを少し横に広げたものがこれ。
IAC Driver IAC Buss 1 が選択されていることがわかります。ORCΛの場合送ってあげられるMIDIのポートの対象が現状では1つのようなのですが、今後これが拡張されるといくつかのデバイスを使うようなこともできると思います。
ちなみに今ここでIAC Busを選択していますが、USB MIDIやMIDIインターフェースで接続してるハードウェアを選択すればそちらにMIDIを送信することもできます。
最近、ハードウェアが復権してる感じもあるのですが、そのせいか結構良さげなMIDIインターフェースも出てたります。
もし知りたい人は個別に相談してください。
複数のMIDIチャンネルにMIDIを送ってみる
.......................................................
...Dz............Da..........Dz............D8..........
....:03Caz........:13Gaa......:43eaz.......*:53Aa8.....
.......................................................
.......................................................
...Dd..................................................
....:23cad........:33gad.......Dr............D7........
................................:63Far........:73aa7...
.......................................................
.......................................................
............4C2........................................
.............00O10.....................................
..............21XNN....................................
.......................................................
..................N....................................
.......................................................
これは一つ上のスクリーンショットのORCΛのコードです。それぞれの別のチャンネルに送信されていることがわかるでしょうか?上記のスクリーンショットの例だと
- MIDI INがIAC Driverの”IAC Bus 1”(このデバイス名はAudio MIDI設定で任意に付けれるし、デバイスも増やせる)
- MIDI Out が "to Max 1"
になっています。
ソフトシンセ側
僕はMaxで簡単にMIDIを受けるパッチをテストように書いて(というレベルではないが)やってみましたが、他のソフトウェアシンセでも同じです。
何かこれと連携したい、というのがあればそのソフトのMIDI設定のところのMIDIの入力をORCΛの出力と合わせてあげましょう。それの間を取り持ってるのがIAC Driverというわけです。
受け側のソフトのMIDI INをIAC Driverのデバイス名にすれば、ORCΛのMIDI出力を受けることができます。
思いつくこと
- ORCΛから複数のシンセを鳴らしたい
- Maxなどを間に挟んでMIDI ch毎に振り分ける
あたりはやりたくなりそうですね。もし希望があればやってみますので、リクエストしてください。
一応、次はハードウェアとの連携をやってみたいと思います。そのあとに複数とかかな…
そんなわけで
ここに書いた情報はいつものようにORCΛのscrapboxにも書いています。
色々情報収集していけるといいなと思いますが、なかなか誰にも参加してもらえないので地味にやってます笑。
参加してくれる人がいたら一緒に遊びましょう!!
https://scrapbox.io/orca/MIDI関連
https://scrapbox.io/projects/orca/invitations/2282cdaa2d607412968080839d5166ce
上記のリンクから参加できますので是非どうぞ。利用例をうまく集めてくれる人大募集です。
では最後にいつもの。
ご依頼/相談/お問い合わせ
シグナル・コンポーズでは音楽制作、Max/Max for Liveデバイス制作など、各種テクニカルなコンサルティングやディレクション、R&D、プロトタイピング、制作などお受けしています。何かあればお気軽にお問い合わせください。よろしくお願いします。
執筆:大和 比呂志
関連記事
-
Blog
Expressで作ったNode.jsアプリでhttpsを有効にするには?
-
Blog
これからのリベラルな音楽のためのアカデミー
-
Blog
Music Transformerを動かしてみる
-
Blog
自前サーバで HTTP Live Streaming 配信をする
-
Blog
MacBook Proをクラムシェルにした時iPhoneをウェブカムの代わりにして使うには?と、あと少しのTips
-
Blog
unityを始めてみようか。
-
Blog
tensorflow1.15系と2.0系を同居させておくには?(ubuntu, GPU環境)
-
Blog
マジで最初から Swift で iOS アプリ作る(TextView)
-
Blog
マジで最初から Swift で iOS アプリ作る (Hello SwiftUI!)