patterned-arpeggio as a function, yay!

This commit is contained in:
efim 2022-09-21 20:50:29 +00:00
parent adb02840ba
commit 2535271e51
1 changed files with 59 additions and 0 deletions

View File

@ -110,3 +110,62 @@
;; i guess next is making this pattern a function that takes patterns to provice chords, roots and pattrn
;; then could use embed and set attributes in place
;; this is actually fun
(defun patterned-arpeggio (chords roots patterns &optional (chord-duration 8) (events-in-chord 32))
(parp
;;; first part of parp is "base values" for each event whole second pattern will be played
;;; so this pattern produces "settings for each phrase"
(pbind :arpeggio-chord chords
:chord-root roots
:pattern patterns)
;;; this patten would play our fully with settings values
(pbind
:note (pnary (lambda (chord-step chord chord-root)
(+ chord-root (nth chord-step (chord-notes chord))))
(pseq (pk :pattern))
(pk :arpeggio-chord)
(pk :chord-root))
:dur (pdurstutter (pseq (list chord-duration) 1) events-in-chord))))
(pb :first-try-of-function
:instrument :fmbass
:legato 0.5
:octave 2
:embed (patterned-arpeggio
(pseq (list :minor-6th :minor :minor-7th :minor))
(pseq (list 0 3 2 6) 1)
(list 0 1 2 1 2 1 2 0)))
(play :first-try-of-function)
(end :first-try-of-function)
;; taking progressions from
;; https://en.wikipedia.org/wiki/List_of_chord_progressions
(pb :second-try-of-function
:instrument :fmbass
:legato 0.5
:octave 2
:embed (patterned-arpeggio
(pseq (list :major :minor :major :major))
(pseq (list 0 5 3 4) 1)
(list 0 1 2 1 2 1 2 0)
2 8))
(play :second-try-of-function)
(end :second-try-of-function)
;; andalusian cadence iv-III-II-I
(pb :third-try-of-function
;; :instrument :fmbass
;; :instrument :strings
:instrument :prophet5pwmstrings
:legato 1
:octave 5
:embed (patterned-arpeggio
(pseq (list :minor :major :major :major))
(pseq (list 3 2 1 0) 1)
(list 0 1 2 1 2 1 2 0)
;; 2 16
8 16
))
(play :third-try-of-function)
(end :third-try-of-function)