first experiment written down

This commit is contained in:
efim
2022-09-11 15:32:15 +00:00
parent 00515cd9df
commit e6270ea435
6 changed files with 262 additions and 10 deletions

View File

@@ -0,0 +1,232 @@
;;; today I'd like to do bass arpegios, with high chords
;; and maybe drums for both parts (from 09-09)
;; and join them?
;; IV V iii vi
;; (setq *my-chords* (list :major :major :minor :minor)
;; *my-roots* (list 3 4 2 5))
;; (setq *my-chords* (list :major)
;; *my-roots* (list 3))
;; Am F C G (i VI III VII)
;; (setq *my-chords* (list :minor :major :major :major)
;; *my-roots* (list 0 3 2 6))
;; i - III - iv - VI
(setq *my-chords* (list :minor :major :minor :major)
*my-roots* (list 0 2 3 5))
(in-package :cl-patterns)
(start-clock-loop :tempo 90/60 :force t)
(pb :lets-slow-bass-arpegio
:dur 2
:octave 3
;; :instrument :fmbass
:embed (not-perfect-but-arpeggio *my-chords*)
:embed (attr-per-phrase :root *my-roots*)
)
;; (play :lets-slow-bass-arpegio)
;; (stop :lets-slow-bass-arpegio)
;; well, what if I rather take my simple-bass thing
;; and give it some kind of slow pattern
;; nope, that simple-bass plays whole chords
;;
;; at this point I'm just tempted to not use chords,
;; and have a PARP
(pdef :chord-defs
(pbind :chord (pseq *my-chords* 1)
:chord-base (pseq *my-roots* 1)))
(pb :lets-slow-bass-melody
(parp
(pdef :chord-defs)
(pbind :step (pseq (list 0 1 0 1 2 0 1 2) 1)
:dur (pseq (list 1/4 1/4 1 1 1 1 1 5/2) 1)
;; :note (pfunc (lambda ()
;; (event-value *event* :step)))
:note (pfunc (lambda ()
(+ (event-value *event* :chord-base)
(nth (event-value *event* :step)
(chord-notes (event-value *event* :chord))))))
)))
;; (next-upto-n (pdef :lets-slow-bass-melody) 10)
;; (play :lets-slow-bass-melody)
;; (end :lets-slow-bass-melody)
;; (stop :lets-slow-bass-melody)
(pb :embedding-bass-melogy-into-pattern
(pseq (list (pbind
:quant 4
:dur (pseq (list (prest 7/2)) 1))
(pbind
:octave 2 ; let's add these later? when join both?
:instrument :fmbass
:embed :lets-slow-bass-melody))
1))
(next-upto-n (pdef :embedding-bass-melogy-into-pattern) 20)
;; (play :embedding-bass-melogy-into-pattern)
;; (stop :embedding-bass-melogy-into-pattern)
;; (end :embedding-bass-melogy-into-pattern)
;; now. let's brainstorm the pattern on a single chord?
;; and well, my guess is that pattern should start from 1/2 before tha bar start?
;; so is there a "timer shift" for pattern?
;; if I can only align by quant
;; ( upbeat ? )
;; well 3 6 9 - and we have -1 +2 and +1 over the quant :4
;; ok, let's for not simulate that stuff by writing continuous bass melody
;; and adding 3 1/2 rest in the beginning
;; I'd like to add bottom note repeating at 1/2 ?
;;; let's just do same? quant 4, wait for the upbeat of next bar
;;; and start playing 1/2 8 times?
(pb :lets-slow-bass-melody-root-repeating
(pseq (list (pbind :dur (pseq (list (prest 4)) 1)
:quant 4)
(parp
(pdef :chord-defs)
(pbind
:octave 1
:instrument :fmbass
:dur (pseq (list (prest 5/2) (pfindur 1/2 7/2) (prest 2)) 1)
:legato 0.5
:note (pk :chord-base)))
(pbind :dur (pseq (list (prest 1)) 1)))
1))
(next-upto-n (pdef :lets-slow-bass-melody-root-repeating) 20)
;; (play :lets-slow-bass-melody-root-repeating)
;; (end :lets-slow-bass-melody-root-repeating)
;; (stop :lets-slow-bass-melody-root-repeating)
(pdef :full-bass-melody
(ppar (list :embedding-bass-melogy-into-pattern :lets-slow-bass-melody-root-repeating)))
;; (play :full-bass-melody)
;; (stop :full-bass-melody)
;; yay, not sure whether I want :octave 1 or 2, but overall, cool,
;; even though - so much still to learn to not have to do manual calculaitons of prest and such
;; let's have some kind of light chord holding. not sure what I want, maybe default
;; maybe strings? or pluck
(pb :high-chords-hold
:embed :chord-defs
:instrument :tone-buzz
:dur 8
:quant 4
:amp 0.05
:note (p+ (pk :chord-base) (pnary #'chord-notes (pk :chord))))
(next-upto-n (pdef :high-chords-hold) 30)
;; (play :high-chords-hold)
;; (end :high-chords-hold)
;; (stop :high-chords-hold)
(pb :high-chords-with-pre-bar
(pseq (list
(pbind :dur (pseq (list (prest 4)) 1)) ; most awkward thing
(pdef :high-chords-hold))
1))
(pdef :total-base-section
(ppar (list :full-bass-melody :high-chords-with-pre-bar)))
;; (play :total-base-section)
;; (stop :total-base-section)
;; well, it seems that with restarts defsynts of fmbass start playing worse?
;; responding less and less to short notes and legato?
;; is that due to not restarting sbcl?
;; let's try full restart
;;; I've done full restart, didn't totally help.
;; and I've set slower clock speed
;;; now, let's add intro, connection and ending?
(pb :intro
:embed :chord-defs
:dur (pseq (list 2 2 4) 1)
:instrument :strings
:amp 0.1
:note (p+ (first *my-roots*) (pnary #'chord-notes (first *my-chords*))))
;; (play :intro)
;; (stop :intro)
;; (end :intro)
;; idea for not now - third chord make in two octaves?
;;; maybe add a scratch inbetween?
(pb :phrase-connection
:instrument :fmbass
:dur (pseq (list (prest 2) 12 (prest 4)) 1)
:embed :chord-defs
:octave 2
:note (p+ (first *my-roots*) (pnary #'chord-notes (first *my-chords*)))
)
;; (play :phrase-connection)
;; (stop :phrase-connection)
;;; for this to work, also evaluate ~/Documents/personal/common-lisp-study/music/dirty-journal/2022-09-09-maybe-cleanup-bass-from-chords.lisp
;; maybe later on cleanup I'd put everything into same file
(pdef :is-that-first-experiment
(pseq (list (pdef :intro)
(pdef :total-base-section)
(pdef :phrase-connection)
(pdef :arpegios-and-bass))
1))
;; (play :is-that-first-experiment)
;; (stop :is-that-first-experiment)
;; (end :is-that-first-experiment)
;; welp, when notes are too quick, they are not produced
;; and I also kind of wanted a percussion line, but oh well
;; ;;; ok, let's record that,
;; ;; we can write to buffer number out_buf_num by reading in from the 0 bus
;; (in-package cl-collider)
;; (defsynth disk_writer ((out_buf_num 99))
;; (disk-out.ar out_buf_num (in.ar 0)))
;; (setf mybuffer (buffer-alloc (expt 2 17)))
;; mybuffer
;; ;; start a disk_writer synth
;; (setf writer_0 (synth 'disk_writer))
;; ;; make it output to buffer you allocated
;; (ctrl writer_0 :out_buf_num (bufnum mybuffer))
;; ;; continuously write the buffer contents to a file
;; ;; ;; IV V iii vi
;; ;; Am F C G (i VI III VII)
;; ;; i - III - iv - VI
;; (buffer-write mybuffer "/tmp/first-experiment-i-III-iv-VI.aiff" :leave-open-p t)
;; ;; now play whatever sounds you like
;; ;; e.g.
;; (in-package :cl-patterns)
;; (play :is-that-first-experiment)
;; (stop :is-that-first-experiment)
;; (end :is-that-first-experiment)
;; ;; then when you are done
;; (in-package cl-collider)
;; ;; stop the disk_writer synth
;; (free writer_0)
;; ;; close and free the buffer
;; (buffer-close mybuffer)
;; (buffer-free mybuffer)
;; ;; then you can play what you recorded with a utility like mpv:
;; ;; mpv /tmp/foo.aiff