Sonic PiからLogic Proのソフトウェア音源を使う

# まえがき
こんにちは。最近Sonic Piを触り始めてライブコーディングを楽しんでいます。
Sonic Piはとても有能なソフトウェアですが、ひとつだけ不満な点があります。それは、synthの種類少なくない...！？という点です。というわけで、今回はその問題を解決するために、Logic Proの豊富なソフトウェア音源をSonic Piから呼び出してみようと思います。

# 環境
OS: macOS Big Sur 11.4
Sonic Pi: v3.3.1
Logic Pro: 10.7.0

# 方針
具体的な設定手順を説明する前に、ざっと方針を説明しようと思います。
まずはSonic Piの出力先として仮想MIDIデバイスを設定します。(ちなみにMIDI Outに対応していることを利用するとポケットミクを歌わせることもできるらしいです[^1])
次にLogic Pro側でMIDI入力のチャンネルを各トラックに割り当てます。
基本的には以上の2ステップです

[^1]: [Sonic Piでポケット・ミクを演奏する](https://kuwamai.hatenablog.com/entry/2019/09/02/003417)

# 設定の手順
## 1. 仮想MIDI出力を有効にする
MIDI出力先として仮想MIDIデバイスを有効にする必要があります。それは`Audio MIDI設定.app`で設定できます。![Audio MIDI設定.app](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/d26da369-d718-da88-0ce9-39d3c6038746.png)
起動したら、ウインドウ>MIDIスタジオを表示をクリック。
![ウインドウ>MIDIスタジオを表示をクリック](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/b073a602-8958-409d-cbff-64e1ff28b282.png)
するとMIDIスタジオというウインドウが出てきます。
![MIDIスタジオ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/d625b262-1262-d239-63b3-04219f3df7e6.png)
そうしたら`IACドライバ`をダブルクリック。
![スクリーンショット 2021-10-28 8.24.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/36a3a8e5-147b-63f8-3ef2-a4ed98997d26.png)
IACドライバのプロパティというウインドウが開くので、`装置はオンライン`にチェックを付けて、適用をクリックすれば完了です。
![スクリーンショット 2021-10-28 8.26.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/4d97e6a9-b4e4-2d20-6028-d39eb6ea15d8.png)
Audio MIDI設定を使った設定は以上なので閉じてしまって大丈夫です。
## 2. Sonic Piの出力先を仮想MIDIにする
見出しの通りなので説明は不要かもしれませんが、、、入出力>MIDI Outputsにさきほど設定したIACドライバが表示されているので、これを選択して出力先をIACドライバにします。
![入出力>MIDI Outputs>iacドライバ_パス1をクリックして設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/936ce59f-3bf5-b293-5bd3-46a2de618956.png)
## 3. Sonic PiからのMIDI出力をLogic Proで受け取る
まずはLogic Proを起動して、普段と同じように楽器をトラックに割り当てていきます。トラックの設定もデフォルトで大丈夫です
![トラック設定はデフォルトでOK](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/9b542aaa-1a33-df38-de03-5d0cd9b7b114.png)
今回はトラック1にClassic Electric Pianoを、トラック2にAcoustic Guitarを割り当てました。
![スクリーンショット 2021-10-28 8.35.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/90c99a21-1ee1-ac46-26a2-fece90e29bce.png)
`ウインドウ>MIDIエンバイロメントを開く`をクリックしてエンバイロメントウインドウを表示させます。ちなみにこれはデフォルトでは非表示なので、もし出てこない場合は
`⌘+0`を押すと出てくるはずです。
![ウインドウ>MIDIエンバイロメントを開く](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/927c4b65-728e-69c4-bd68-ebc0cc7a88c5.png)
これがエンバイロメントウインドウです。ややこしそうですが、設定内容は簡単なので安心してください。
![エンバイロメントウインドウ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/4823c68c-3877-4ff3-2a93-7b2c96f5eeb5.png)
まずウインドウ内の新規からフィジカルインプットをクリックします。
![新規>フィジカルインプット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/a01fc87a-c7a0-04c0-03e2-749450c960aa.png)
こんなものが出てきたら成功です。
![全体像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/be4b117f-9862-84bc-a9d4-7289868f71d9.png)
![フィジカルインプット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/fad64b18-d122-7905-0af8-ec24e0afbe21.png)
同様の手順で、モニタとチャンネルスプリッターも表示させます。
![モニタ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/16efd11a-9fd8-579c-69e7-b2366fc6bab1.png)
![チャンネルスプリッター](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/615c8b16-b325-f484-9146-a43bc7531cd6.png)
ここまでで、ウインドウ上にフィジカルインプット、モニタ、チャンネルスプリッターの3つが出てきていたらOKです。
![スクリーンショット 2021-10-28 8.46.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/c7acf2fb-015d-b562-bc82-b5fd225fa0bf.png)

最後にこれらをつないでいきます。
ドラッグすると線が伸びるので、まずはフィジカルインプットとモニタを接続。
![フィジカルインプットとモニタを接続](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/68c750a1-8841-9fb2-f859-619ecda360c0.png)
次にモニタとチャンネルスプリッターも同様の手順でつなぎます。
![スクリーンショット 2021-10-28 8.50.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/3a70a2bd-c426-2f96-d211-6552d001ffb9.png)
最後にチャンネルスプリッターと楽器をつないでいきます。このチャンネル数はあとでSonic Piから呼び出すときに使うので覚えておきましょう。
![チャンネルスプリッターと楽器をつなぐ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156669/6ca094a3-b3ed-3e79-78f0-e63a7f1f7009.png)
今回はチャンネル1にClassic Electric Pianoを、チャンネル2にAcoustic Guitarを接続しました。以上で設定は完了です！次はいよいよSonic Piから呼び出します。
## 4. Sonic Piから使ってみる

```ruby
live_loop :classic_electric_piano do ; tick
  midi (ring :c4, :eb4, :f4, :g4).look, channel: 1 # チャンネル1にClassic Electric Pianoを割り当てたので、ピアノで再生される
  midi_cc 0, (line 50, 100, steps: 40).look, channel: 1
  sleep 0.25
end

live_loop :accoustic_guitar do ; tick
  sync :classic_electric_piano
  midi (ring :c4, :eb4, :f4, :g4).look, channel: 2 # チャンネル2にAcoustic Guitarを割り当てたので、ピアノで再生される
  midi_cc 0, (line 50, 100, steps: 40).look, channel: 2
  sleep 0.25
end
```
設定がうまくいっていれば音が流れたはずです！

(コード内にもコメントしてありますが、channelはLogic Proのエンバイロメントで割り当てた番号になります。)

# 参考
- [MIDI with Sonic Pi on OSX](
https://gist.github.com/xavriley/22a3827726b90130ec0b)
- [ORCΛとLogic Pro Xのコンビでライブコーディングしてみる。](https://note.com/ryu_mu/n/n526ddac8e7a1)