Overtone
純粋に MIDI 楽器にデータを送信する目的で使用したいと考えています。サポートOvertone
なしでロードする簡単な方法はありますか? SuperCollider
を使用して midi サポートをプログラムに追加できることがovertone.studio.midi
わかりましたが、音楽を表すデータの操作を容易にするすべてのヘルパーをロードすることにも関心があります。どのファイルをロードし、どのファイルを除外するかを判断するのは時間のかかる作業です。
2 に答える
いいえ、Overtone はすべて Supercollider に依存しています。いくつかのハックを行うことはできますが、非常に苦痛な作業になるでしょう。Steven Yi の Pink をチェックすることをお勧めします。彼は Java サウンドを Clojure で実装しており、Clojure を javasound 経由で MIDI デバイスに接続できます。
overtone.core を使用すると、実際にサーバーに接続しなくても多くのスタジオ機能を利用できます。definst や defsynth など、SC サーバーへの OSC 通信をトリガーするものは使用できませんが、Overtone 独自の OSC 機能に完全にアクセスできます。リスナーとハンドラーを作成できます。MIDI サブシステムとイベント システムにもアクセスできます。
overtone.core でやりたいことがすべてできるはずです。次のコードはすべて、(connect-external-server) またはその他の関連する関数を実行しなくても機能します。
(ns beatboxchad-live.midi
[:require [overtone.core :refer :all]
[beatboxchad-live.sooperlooper]
]
)
(def fcb (midi-mk-full-device-key (midi-find-connected-device "mio")))
(def overtone-osc (osc-server 9960 "osc-overtone"))
(defn loop-setting [loop-index setting value]
(osc-send engine
(format "/sl/%s/set" loop-index)
setting
value
)
)
(def loop-ops
{0 {:action "record" :hit false}
1 {:action "overdub" :hit false}
2 {:action "trigger" :hit true}
3 {:action "pause" :hit true}
4 {:action "reverse" :hit true}
}
)
(on-event (conj fcb :note-on)
(fn [e]
(let [note (:note e)]
(let [loop-index (int (/ note 10))
cmd (mod note 10)
loop-op (if (:hit (get loop-ops cmd))
"hit"
"down")
]
(beatboxchad-live.sooperlooper/loop-op
loop-index
(:action (get loop-ops cmd))
loop-op
)
)
)
)
::fcb-note-on
)
(on-event (conj fcb :note-off)
(fn [e]
(let [note (:note e)]
(let [loop-index (int (/ note 10))
cmd (mod note 10)
]
(if-not (:hit (get loop-ops cmd))
(beatboxchad-live.sooperlooper/loop-op
loop-index
(:action (get loop-ops cmd))
"up"
)
)
)
)
)
::fcb-note-off
)
このコードは、Behringer FCB1010 からの MIDI に基づいて、OSC 経由で Sooperlooper を制御します。MIDI イベントをデバイスに送信するのも非常に簡単です。参照: https://github.com/overtone/overtone/wiki/MIDI#sending-midi-messages