Clojure 构建泛音项目
我刚刚开始泛音,但我想从一开始就让事情有点条理Clojure 构建泛音项目,clojure,overtone,Clojure,Overtone,我刚刚开始泛音,但我想从一开始就让事情有点条理 project.clj: (defproject overtone-sketchbook "0.1.0-SNAPSHOT" :dependencies [[org.clojure/clojure "1.5.1"] [overtone "0.9.1"]]) (ns overtone-sketchbook.synths (:use [overtone.live])) (definst pluck-saw [
project.clj:
(defproject overtone-sketchbook "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.5.1"]
[overtone "0.9.1"]])
(ns overtone-sketchbook.synths
(:use [overtone.live]))
(definst pluck-saw [f 800 d 3]
(* (saw (+ 100 (* 200 (saw d))))
(pluck (* (white-noise)
(env-gen (perc 0.001 2) :action FREE))
1 3 (/ 1 f))))
src/overtone\u sketchbook/synths.clj:
(defproject overtone-sketchbook "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.5.1"]
[overtone "0.9.1"]])
(ns overtone-sketchbook.synths
(:use [overtone.live]))
(definst pluck-saw [f 800 d 3]
(* (saw (+ 100 (* 200 (saw d))))
(pluck (* (white-noise)
(env-gen (perc 0.001 2) :action FREE))
1 3 (/ 1 f))))
答复第1次会议:
答复第2次会议:
>lein repl
nREPL服务器已在端口52100上启动
REPL-y 0.2.0
Clojure 1.5.1
单据:(此处为单据功能名称)
(在此处查找文件“名称的一部分”)
Source:(此处为源函数名)
Javadoc:(此处为Javadoc java对象或类)
退出:控制+D或(退出)或(退出)
用户=>(使用“泛音sketchbook.synths”)
-->加载泛音。。。
**********************************************************
警告:JVM参数TieredStopAtLevel=1处于活动状态,可能
导致性能下降。这恰好是目前的情况
默认lein设置:
https://github.com/technomancy/leiningen/pull/1230
如果您不打算指定此JVM参数,可以
在project.clj文件或全局
通过添加键val ~/.lein/profiles.clj文件
:jvm选项^:替换[]
**********************************************************
-->正在启动内部超级编译器服务器。。。
找到0个LADSPA插件
***错误:打开目录失败“/Users/ilya/Library/Application Support/supercellider/synthdefs”
设备数量:2台
0:“内置输入”
1:“内置输出”
“内置输入”输入设备
溪流:1
0频道2
“内置输出”输出设备
溪流:1
0频道2
SC_音频驱动程序:采样率=44100.000000,驱动程序块大小=512
-->正在连接到内部超级编译器服务器。。。
-->建立连接
_____ __
/ __ /_ _____ _____/ /_____ ____ ___
/ / / / | / / _ \/ ___/ __/ __ \/ __ \/ _ \
/ /_/ /| |/ / __/ / / /_/ /_/ / / / / __/
\____/ |___/\___/_/ \__/\____/_/ /_/\___/
协作可编程音乐。v0.9.1
你好,伊利亚,愿算法之美今天从你的指尖倾泻而出。
无
用户=>拔锯
#泛音.studio.inst.inst{:name“pullsaw”,:params({:value#,:name“f”,:default 800.0,:rate:kr}{:value#,:name“d”,:default 3.0,:rate:kr}),:args(“f”“d”),:sdef{:name“overtone-sketchboo96d/pullsaw”,:常量[0.0.0 2.0 3.0 0 0 0.0 1.0 50.0 100.0.0.0 1 2-99],:4.0.0,:args(“f”“d”),:d”),:sdef“d”,:索引1 1},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,],:volume#,:pan#,:n-chans 1}
用户=>(演示弹拨锯)
CompilerException java.lang.RuntimeException:无法解析符号:在此上下文中演示,正在编译:(无源路径:1:1)
用户=>(overtone.live/demo-pull-saw)
IllegalArgumentException不知道如何从以下位置创建ISeq:clojure.lang.Symbol clojure.lang.RT.seqFrom(RT.java:505)
user=>再见!
我错过了一些非常基本的东西吗?试试:(演示“泛音sketchbook.synths/Pulk saw)
我仍然会在你的代码中遇到错误,我不明白,但这会让你走得更远。首先,如果你能让你的问题变得更简单、简洁,这样就可以很容易地找到可能的解决方案,这将非常有帮助 另外,感谢您尝试泛音-很抱歉,事情还没有立即弄清楚。这里有很多事情要做,所以请在路上问几个问题:-) 然而,看看你的两篇REPL摘录,很明显你还没有完全理解三件事:
- 泛音如何使用Clojure的名称空间
- 合成器是如何设计的
- 如何触发合成器
使用泛音.live
时,泛音正在做的是将泛音的所有公共API函数导入到您当前的命名空间中。这意味着一旦此操作完成,您将可以使用所有公共API,即demo
,defsynch
,sin osc
等
在第二个REPL示例中,您尝试做的第一件事是:(demo-overtone-sketchbook.synths/pulk-saw)
这将不起作用,因为Clojure还不知道什么是demo
,也不知道您的命名空间overtone sketchbook.synth
。要让它了解这些,您需要使用或需要命名空间。有关更多信息,请阅读Clojure的ns
宏
其次,泛音合成器是通过调用表示合成器(称为ugens)部分的函数来设计的。ugens的示例有saw
、sin osc
、lpf
。泛音备忘表中有可用ugens的完整列表:
demo
是一个宏,允许您传入(部分)synthdef并播放:
(演示(sin osc))
(演示(sin osc 440))
请注意,ugen是允许您传递参数以修改其行为的函数(如440 hz参数到sin osc
ugen)
还需要注意的是,ugens不能(目前)与synth一样对待。ugen是synth的一个组件,synth是ugens的一棵树。这就把我引向了第三个问题——你试图demo
Pulk saw
synth。这是一个已经设计好的合成器,可能只会被触发。要触发synth,只需将其作为函数调用:
(拔锯)
您还可以将参数(如果设计允许)传递给synth触发器函数
因此,总结如下:
- 使用Clojure的
ns
宏加载外部名称p