KORG NTS-1をSonic Piから鳴らす

この記事は[リンク情報システム](https://www.lis.co.jp/)の2020新春アドベントカレンダー Tech Connectのリレー記事です。
engineer.hanzomon のグループメンバによってリレーされます。
（リンク情報システムのFacebookは[こちら](https://ja-jp.facebook.com/lis.co.jp/)から）

2020新春アドベントカレンダー Tech Connect インデックスは[こちら](https://qiita.com/dgkz/items/5131349d56354b33ee97)

# 環境
・Windows 10 Home 64bit
・Sonic Pi v3.1.0
・KORG NTS-1

# KORG NTS-1について
[Nu:Tekt NTS-1 digital KIT](https://www.korg.com/jp/products/dj/nts_1/)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284836/988abfb1-e643-f425-f09c-e458eaf8d302.jpeg" width=50%> 
2019年の11月末に発売された、はんだ付けしなくても組み立てが可能なコンパクトDIYシンセサイザーです。
組み立ては公式の動画を"ちゃんと"見ながらやれば10分程度で完成します。

発売当時はどの店も品切れで諦めていましたが、最近は供給が追い付いたようで元旦にGET出来ました。

# Sonic Piについて
[Sonic Pi](https://sonic-pi.net/)はRubyで書いてすぐに音を鳴らせる楽しいやつです。
インストールするだけですぐ音を出せます。簡単！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284836/dd39c23c-f4e1-5a5f-3584-e254b374eee3.png"width=20%> 

Raspbianにプリインストールされているのでラズパイユーザーは見たことあるんではないでしょうか。
筆者も見たことだけはありました。使うのは初めてです。

# ポートの指定とMIDI送信
NTS-1をPCにUSB接続するとNTS-1がMIDIデバイスとして認識されます。
Sonic PiのQueにはデバイス名が"nts-1_digital_kit"と出ています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284836/446c01a9-426f-b654-e1fc-158152dbd7bb.png)

とりあえず音を出してみます。
MIDI送信先のポートは"nts-1_digital_kit"です。

```ruby:note_on
use_real_time
# ドの音を出す
midi_note_on :c5, port: "nts-1_digital_kit"
sleep 1
# 音を止める
midi_all_notes_off port: "nts-1_digital_kit"
```

alt + rで実行します。

## そしてハマる
midi_note_onで即！音が出たのは良かったのですが、
midi_all_notes_offで音が止まりませんでした。
ブーーーーーーーーーーーーーーーーーーー
どうして（現場猫）

この状態でNTS-1のARPボタンを押したら音が止まりました。
やったか？

......今度はNTS-1から音が出なくなりました。
NTS-1を再起動したら音は出ましたが、やっぱり一度midi_note_onするとoffに出来ません。

Sonic Piを触ったのが初めてなのでやり方が間違っているという可能性が非常に高いのですが、
他のシンセサイザーで試してみたところ、midi_all_notes_offで音は止まります。


いちいち再起動するのは嫌です。多少強引でもとりあえず音を止めたい！

## 解決方法（？）
```ruby:
# MIDIクロックチックを送信する
midi_clock_tick
```
これをSonic Piの別Bufferに書いておいて、
NTS-1の音が止まらなくなった場合にポチポチ実行したら音が止まりました。ヨシ！
いやいや、パニックボタンじゃあないんだよ。。

NTS-1のARPボタンで強制的に音を止めた場合と違い、とりあえず再起動しなくても音を出せる状態になりました。
でも、上手くいかないときはあります。ときにはSonic Piの具合が悪くなってしまうことも......

結局、NTS-1をPCとUSB接続するよりも、NTS-1のMIDI INにケーブル挿したほうが安定していました。
が、筆者の場合は手持ちのオーディオI/FにMIDI OUTがありません。

なので
手持ちのOP-ZとPCをUSB接続 → OP-ZのMIDI OUT(oplab module)からNTS-1のMIDI INへ......
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284836/e26803d9-c746-aaea-2214-e3881cd4a563.jpeg" width=50%> 
NTS-1の隣にあるのがOP-Zです。これも楽しいガジェット！

# 簡単なパターンとループの作成
単音出すだけではイマイチ楽しくありません。
パターンとループを用意します。


まずはパターン
適当に音を散らします。
ringを使って鳴らす音階のリストを3パターン用意
（c:ド　d:レ　e:ミ　f:ファ　g:ソ　a:ラ　b:シ　です。　数字はオクターブ変更用です。）

```ruby:
notes =  (ring :b3, :b4, :e3, :e4, :b3, :e4)
#notes =  (ring :c3, :c4, :d3, :d4, :f3, :c4)
#notes =  (ring :a3, :d4, :e3, :f4, :g3, :c4)
```

次にlive_loopでぐるぐる回します。
MIDIの送信先ポートやチャンネルは環境によって異なります。

```ruby
live_loop :nts do
  use_real_time
  midi (notes).tick, vel: 127 ,sustain: 0.1, port:"op-z" ,channel: 1
  sleep 0.125
end
```

## ライブ！
演奏のショートカット
alt + rで実行
alt + sで停止

演奏中に3パターンのnotes君をアンコメント/コメントアウトでパターンを切り替えます。

パターン切り替えたらalt + r
パターン切り替えたらalt + r
・
・
・
という感じでリアルタイムに変化をつけます。
切り替え方法は様々なので自分がやりやすい方法が良いです。

Sonic Piでパターンを切り替えながらNTS-1本体のノブをぐりぐりして遊びます。
Sonic Piでsustainの値を変えたり、sleepの時間を変えたりしても変化を楽しめますね。

やってることはちっちゃいですが、これだけでも無限に遊べます。

↓動画です。手の動きがもたもたしている......
<blockquote class="twitter-tweet">
<a href="https://twitter.com/mashedp3/status/1214220300067323905?s=20"/>
</blockquote>


# あとがき
KORG NTS-1はKORGが公開している[logue SDK](https://github.com/korginc/logue-sdk)でカスタムオシレーターやカスタムエフェクトを自作出来ます。強い！

[世界中の人たちが作ったカスタムコンテンツ](https://korginc.github.io/logue-sdk/unit-index/)は有償・無償様々で、

[logue SDK Custom Content Sound Librarian](https://www.korg.com/jp/products/dj/nts_1/librarian_contents.php#part1)を使えば簡単に取り込めます。

NTS-1を買ったからには今回はカスタムオシレーター開発に関する記事と考えていましたが、
思い描いたものを作るのはなかなか難しいです。
もう少し勉強してから書きます......


おしまい


***
[リンク情報システム株式会社](https://www.lis.co.jp/)では一緒に働く仲間を[随時募集](https://www.lis.co.jp/employ_top)しています！
また、お仕事のご依頼、ビジネスパートナー様も募集しております。[お気軽にご連絡ください。](https://www.lis.co.jp/inquiry)