【问题标题】:Overtone without SuperCollider没有 SuperCollider 的泛音
【发布时间】:2015-10-28 21:11:16
【问题描述】:
我想使用Overtone 纯粹是为了向midi 乐器发送数据。在没有SuperCollider 支持的情况下,有没有一种快速加载Overtone 的方法?我发现可以使用overtone.studio.midi 将midi 支持添加到程序中,但我也有兴趣加载所有帮助处理代表音乐的数据的帮助程序。确定要加载哪些文件以及要排除哪些文件是一项耗时的任务,因此是个问题。
【问题讨论】:
标签:
clojure
supercollider
overtone
【解决方案1】:
不,Overtone 的所有内容都依赖于 Supercollider,你可以做一些 hack,但这会非常痛苦。我建议您查看 Steven Yi 的 Pink,他使用 Clojure 实现了 java 声音,您可以通过 javasound 将 clojure 连接到 midi 设备。
https://github.com/kunstmusik/pink
【解决方案2】:
您可以使用 overtone.core 并获得很多工作室功能,而无需实际连接到服务器。您不能定义或定义合成器或任何会触发与 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