如何使用自定义样本在泛音中演奏音符?
例如,您可以使用预定义的钢琴样本(如(piano (note :C4))
)播放音符,但如何对使用样本或加载样本加载的自定义样本执行相同操作?
换句话说:假设我有(def my-piano (load-sample "/path/to/my/piano_sample.wav"))
并希望使用它而不是预定义的钢琴乐器。
我的理解是我需要定义一种新的乐器,它以音符或频率作为参数。问题是如何定义这样的工具。 scaled-play-buf和play-buf都不会将频率作为参数。
我见过一个例子 - '如何在泛音'here中定义一个自定义乐器 - 看起来每个音符应该有一个单独的样本。这是对的吗?
答案 0 :(得分:0)
找到一个答案(有点) - :scaled-play-buf中的rate参数可以用来达到预期的效果(好吧,它最好与其他人一起使用,特别是如果你想用多个八度音阶来播放你的乐器):
;; define sample and instrument, rate is the key here
(def piano (sample "~/Music/Samples/mypiano.wav"))
(definst i-piano
[note 60 level 1 rate 1 loop? 0 attack 0 decay 1 sustain 1 release 0.1 curve -4 gate 1]
(let [env (env-gen (adsr attack decay sustain release level curve)
:gate gate
:action FREE)]
(scaled-play-buf 1 piano :rate rate :level level :loop loop? :action FREE)))
;; try it
(i-piano :rate 1) ; original note
(i-piano :rate 1.2)
(i-piano :rate 0.7)