Как воспроизвести ноту, используя собственный образец в обертоне?
Как можно воспроизвести ноту в обертоне, используя пользовательский образец?
Например, вы можете сыграть ноту, используя предустановленный образец фортепиано, например (piano (note :C4))
но как я могу сделать то же самое для пользовательского сэмпла, который я загрузил, используя sample или load-sample?
Другими словами: скажем, у меня есть (def my-piano (load-sample "/path/to/my/piano_sample.wav"))
и хочу использовать его вместо предустановленного пианино.
Насколько я понимаю, мне нужно определить новый инструмент, который принимает в качестве аргумента либо ноту, либо частоту. Вопрос в том, как определить такой инструмент. Ни scaled-play-buf, ни play-buf не принимают частоту в качестве параметра.
Я видел пример - "как определить пользовательский инструмент в обертоне" - и похоже, что у меня должен быть отдельный образец для каждой ноты. Это верно?
1 ответ
Найден ответ (своего рода) -: параметр скорости в scaled-play-buf можно использовать для достижения желаемого эффекта (ну, на самом деле, лучше использовать в сочетании с другими, особенно, если вы хотите сыграть несколько октав с вашим инструментом):
;; 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)