【问题标题】: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

      【讨论】:

        猜你喜欢
        • 2015-07-04
        • 2017-08-17
        • 1970-01-01
        • 2011-04-14
        • 2017-11-15
        • 2013-01-01
        • 2016-06-16
        • 1970-01-01
        • 2016-05-06
        相关资源
        最近更新 更多