2016-02-22 49 views
0

如何使用自定義樣本在泛音中播放音符?如何在泛音中使用自定義樣本播放音符?

例如,您可以使用預定義的鋼琴樣本播放音符,如(piano (note :C4)),但是如何對使用樣本或加載樣本加載的自定義樣本執行相同操作?

換句話說:假設我有(def my-piano (load-sample "/path/to/my/piano_sample.wav"))並且想用它來代替預定義的鋼琴樂器。

我的理解是,我需要定義一個新的樂器,以音符或頻率作爲參數。問題是如何定義這種儀器。縮放遊戲或遊戲緩衝都不會將頻率作爲參數。

我見過一個例子 - '如何在泛音中定義自定義樂器'here - 看起來我應該爲每個音符單獨提供一個樣本。那是對的嗎?

回答

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) 
相關問題