day 3 - some instruments, and first recording
This commit is contained in:
parent
c563cae51b
commit
da7eaa45b5
|
@ -181,7 +181,7 @@
|
|||
|
||||
(pb :what-note
|
||||
:note (pseq '(0 1 2 3 4 5 6 7 (0 7)) 1)
|
||||
:octave 3
|
||||
:octave 5
|
||||
:dur (pseq (concatenate 'list (make-list 7 :initial-element 1) '(2 4)))
|
||||
:play-quant 4
|
||||
)
|
||||
|
@ -283,19 +283,24 @@
|
|||
(all-scales)
|
||||
(all-tunings)
|
||||
|
||||
(defparameter *some-chord* (chord "Major Triad"))
|
||||
(chord-notes *some-chord*)
|
||||
|
||||
;;; can I just use chord as :note ?
|
||||
(mapcar #'chord-notes (list (chord "Major Triad") (chord "Minor Triad")))
|
||||
|
||||
(pb :what-predef-chord
|
||||
:note (pseq `((chord "Major Triad") (chord "Minor Triad")))
|
||||
:note (pseq (mapcar #'chord-notes (list (chord "Major Triad") (chord "Minor Triad") (chord "Minor 7th") (chord "Major 7th") (chord "Diminished Triad") (chord "Major Triad"))) 1)
|
||||
:octave 4
|
||||
:root 2
|
||||
:dur (pseq '(2 2) 1)
|
||||
:dur (pseq '(2 2 4))
|
||||
;; :play-quant 4
|
||||
)
|
||||
|
||||
(play :what-predef-chord)
|
||||
(end :what-predef-chord)
|
||||
|
||||
|
||||
(in-package #:cl-collider)
|
||||
(proxy :foo (sin-osc.ar 440 0 0.2))
|
||||
|
||||
|
|
|
@ -0,0 +1,268 @@
|
|||
|
||||
(setq *M1* '(0 2 4))
|
||||
(setq *Min1* '(0 1.5 4))
|
||||
(setq *M3* '(2 4 6))
|
||||
|
||||
(setq *chord* *Min1*)
|
||||
|
||||
(in-package #:cl-patterns)
|
||||
(start-clock-loop :tempo 110/60)
|
||||
(pb :what-chord
|
||||
:note (pseq `(,*m1* ,*min1*))
|
||||
:octave 4
|
||||
:root 2
|
||||
:dur (pseq '(2 2) 1)
|
||||
;; :play-quant 4
|
||||
)
|
||||
|
||||
;; (play :what-chord)
|
||||
;; (end :what-chord)
|
||||
|
||||
(in-package #:cl-collider)
|
||||
(defsynth default ((gate 1) (freq 440) (out 0))
|
||||
(let* ((env (env-gen.kr (asr 0.01 1 0.1) :gate gate :act :free))
|
||||
(sig (sin-osc.ar freq 0 0.2)))
|
||||
(out.ar out (pan2.ar sig 0 env))))
|
||||
|
||||
(server-query-all-nodes) ; not sure how to interpret, but all things submitted to servier to play?
|
||||
|
||||
|
||||
;; ok, reading found article: https://nunotrocado.com/software/cl-collider-tutorial-1.html
|
||||
(defsynth tone ((freq 440) (amp 0.2))
|
||||
(out.ar 0 (saw.ar freq amp)))
|
||||
;; (synth 'tone)
|
||||
;; (stop)
|
||||
|
||||
(defparameter *tone*
|
||||
(synth 'tone
|
||||
:freq (midicps 42)
|
||||
:amp 0.3))
|
||||
(free *tone*)
|
||||
|
||||
|
||||
(defsynth tone-buzz ((freq 440) (amp 0.2))
|
||||
(out.ar 0 (saw.ar (let ((detune (* freq 0.01)))
|
||||
(list (- freq detune) (+ freq detune)))
|
||||
(/ amp 2))))
|
||||
|
||||
;; (let ((node (synth 'tone-buzz)))
|
||||
;; (sleep 2)
|
||||
;; (free node))
|
||||
|
||||
(defsynth tone-pluck ((freq 440) (amp 0.2))
|
||||
(out.ar 0 (* (saw.ar (let ((detune (* freq 0.01)))
|
||||
(list (- freq detune) (+ freq detune))))
|
||||
(env-gen.kr (perc 0.1 1.8)
|
||||
:level-scale amp
|
||||
:act :free))))
|
||||
|
||||
;; (synth 'tone-pluck)
|
||||
|
||||
;; (in-package #:cl-patterns)
|
||||
(all-instruments)
|
||||
(pb :what-instrumented
|
||||
:intrument :tone-pluck
|
||||
;; :note (pseq `(,*m1* ,*min1*))
|
||||
:note (pseq '(0 3 7) 1)
|
||||
:octave 4
|
||||
:root 2
|
||||
:dur (pseq '(2 2) )
|
||||
;; :play-quant 4
|
||||
)
|
||||
|
||||
;; (play :what-instrumented)
|
||||
;; (stop :what-instrumented)
|
||||
|
||||
;;; yo, I think I understood that predef chords stuff:
|
||||
|
||||
(pb :what-predef-chord
|
||||
:instrument :tone-buzz
|
||||
:note (pseq (mapcar #'chord-notes (list (chord "Major Triad") (chord "Minor Triad") (chord "Minor 7th") (chord "Major 7th") (chord "Diminished Triad") (chord "Major Triad"))) 1)
|
||||
:octave 4
|
||||
:root 2
|
||||
:dur (pseq '(2 2 4))
|
||||
;; :play-quant 4
|
||||
)
|
||||
|
||||
|
||||
;; (play :what-predef-chord)
|
||||
;; (end :what-predef-chord)
|
||||
|
||||
(pb :what-try-instrument
|
||||
:instrument :tone-pluck
|
||||
:note (pseq '(1 2 3 7) 1)
|
||||
:octave 4
|
||||
:root 2
|
||||
:dur (pseq '(2 2 4))
|
||||
;; :play-quant 4
|
||||
)
|
||||
|
||||
|
||||
;; (play :what-try-instrument)
|
||||
;; (stop :what-try-instrument)
|
||||
|
||||
(pb :what-instrumented-2-maybe
|
||||
:instrument :tone-pluck
|
||||
;; :note (pseq `(,*m1* ,*min1*))
|
||||
:note (pseq '(0 3 7) 1)
|
||||
:octave 4
|
||||
:root 2
|
||||
:dur (pseq '(2 2) )
|
||||
;; :play-quant 4
|
||||
)
|
||||
|
||||
;; (play :what-instrumented-2-maybe)
|
||||
;; (stop :what-instrumented-2-maybe)
|
||||
|
||||
|
||||
|
||||
;;; now let's try to get some synths for percussions?
|
||||
|
||||
|
||||
|
||||
|
||||
;; copied from https://github.com/defaultxr/cl-patterns/blob/master/doc/supercollider-example.lisp
|
||||
|
||||
(defsynth kik ((freq 440) (out 0))
|
||||
(let* ((env (env-gen.kr (env (list 0 1 0) (list 0.001 1)) :act :free))
|
||||
(fenv (env-gen.kr (env (list 1 0) (list 0.25)) :level-scale freq))
|
||||
(sig (sin-osc.ar fenv 0 0.2)))
|
||||
(out.ar out (pan2.ar sig 0 env))))
|
||||
(synth :kik)
|
||||
|
||||
(in-package #:cl-patterns)
|
||||
(pb :what-percussion
|
||||
:instrument :kik
|
||||
;; :note (pseq `(,*m1* ,*min1*))
|
||||
:note (pseq '(0 3 7) 1)
|
||||
:octave 4
|
||||
:root 2
|
||||
:dur (pseq '(2 2) )
|
||||
;; :play-quant 4
|
||||
)
|
||||
;; (play :what-percussion)
|
||||
;; (stop :what-percussion)
|
||||
|
||||
;; well, I don't understand, do I go read supercollider docs?
|
||||
;; about EnvGen SinOsc ?
|
||||
;; woa, there's old archived https://github.com/madskjeldgaard/awesome-supercollider
|
||||
;;; let's try to convert drum-kik https://github.com/everythingwillbetakenaway/Synthdefs/blob/master/drum_kick.scd
|
||||
;; (
|
||||
;; SynthDef(\drum_kick, {
|
||||
;; arg freq=440, gate=1, amp=0.5, source,pan = 0.0 ;
|
||||
;; source =
|
||||
;; Pan2.ar(
|
||||
;; SinOsc.ar(EnvGen.kr(Env.perc(0.0001, 1.5, 1, -200), gate, 1000, 45, doneAction:2), 1, 1) +
|
||||
;; ((BPF.ar([GrayNoise.ar(6),GrayNoise.ar(6)],EnvGen.kr(Env.perc(0.001, 0.3, 1, -200), gate, 6000, 70), 1.5)).distort * Line.kr(0.3,0,0.1))
|
||||
;; *
|
||||
;; EnvGen.kr(Env.perc(0.0001, 0.09, amp, 8)),0);
|
||||
;; Out.ar(0, source);
|
||||
;; }).add;
|
||||
;; )
|
||||
;; Synth(\drum_kick);
|
||||
|
||||
(in-package #:cl-collider)
|
||||
|
||||
(defsynth drum-kik ((freq 440) (out 0) (gate 1) (amp 0.5) (pan 0.0))
|
||||
(let* ((env (env-gen.kr (env (list 0 1 0) (list 0.001 1)) :act :free))
|
||||
(fenv (env-gen.kr (env (list 1 0) (list 0.25)) :level-scale freq))
|
||||
(sig (sin-osc.ar fenv 0 0.2))
|
||||
(pan (pan2.ar sig 0 env)))
|
||||
(out.ar out pan)))
|
||||
(synth :drum-kik)
|
||||
(cl-patterns::all-instruments)
|
||||
|
||||
;;; ok, fuck that let's play
|
||||
;; just do some percussion with existing kik and chord progressions, and maybe a melody
|
||||
|
||||
|
||||
(in-package #:cl-patterns)
|
||||
|
||||
(pb :what-predef-chord
|
||||
:instrument :tone-pluck
|
||||
:note (pseq (mapcar #'chord-notes (list (chord "Major Triad") (chord "Minor Triad") (chord "Minor 7th") (chord "Major 7th") (chord "Diminished Triad") (chord "Major Triad"))) 1)
|
||||
:octave 4
|
||||
:root 2
|
||||
:dur (pseq '(2 2 4))
|
||||
;; :play-quant 4
|
||||
)
|
||||
|
||||
;; (play :what-predef-chord)
|
||||
;; (end :what-predef-chord)
|
||||
|
||||
(pb :what-basic-percussion
|
||||
:instrument :kik
|
||||
:note 0
|
||||
:dur (pseq '(1) 1) ; ok, too hard again, want to finish something and go on
|
||||
:play-quant 4)
|
||||
|
||||
;; (play :what-basic-percussion)
|
||||
;; (stop :what-basic-percussion)
|
||||
|
||||
;; how do I now join both of these?
|
||||
|
||||
(pb :first-composition (ppar (list :what-predef-chord :what-basic-percussion))) ; bs, wtf
|
||||
|
||||
(next-upto-n (ppar (list (pbind :dur (pn 1/2 4))
|
||||
(pbind :dur (pn 2/3 4)))))
|
||||
|
||||
(next-upto-n (ppar (list :what-basic-percussion :what-predef-chord)))
|
||||
|
||||
;; (play :first-composition)
|
||||
;; (stop :first-composition)
|
||||
|
||||
;; (next-upto-n (pmeta :pattern (pseq (list :what-basic-percussion :what-predef-chord) 1) :sync 2))
|
||||
|
||||
;; god, I have no idea how to have two patterns play at the same time =C
|
||||
|
||||
;; (play (list :what-basic-percussion :what-predef-chord))
|
||||
;; (stop (list :what-basic-percussion :what-predef-chord))
|
||||
;;
|
||||
;; welp that workds
|
||||
;; bs, but maybe I'll put it into file and get a break already
|
||||
|
||||
(in-package #:cl-collider)
|
||||
|
||||
;; from https://github.com/byulparan/cl-collider
|
||||
;;; write a single channel to disk
|
||||
|
||||
;; we can write to buffer number out_buf_num by reading in from the 0 bus
|
||||
(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
|
||||
(buffer-write mybuffer "/tmp/foo.aiff" :leave-open-p t)
|
||||
|
||||
;; now play whatever sounds you like
|
||||
|
||||
;; e.g.
|
||||
(proxy :blah (sin-osc.ar 440))
|
||||
(free :blah)
|
||||
|
||||
|
||||
;; then when you are done
|
||||
|
||||
;; 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
|
||||
|
||||
|
||||
|
||||
|
||||
;; (cl-patterns:stop t)
|
|
@ -69,3 +69,54 @@ do I go to cl-collider package for explanation of synths and such?
|
|||
- some combined sounds, which don't sound nice
|
||||
- maybe reliant startup procedure
|
||||
- and attempting to run chords hangs it all
|
||||
** cl-patterns docs:
|
||||
https://github.com/defaultxr/cl-patterns/tree/master/doc
|
||||
that's all files
|
||||
* [2022-08-20 Sat]
|
||||
** now I'd like to create an instrument for which chords would sound nice
|
||||
and after than some kind of percussion things
|
||||
** cool! that was just my type :instument instead of :instrument
|
||||
and article on cl-collider now helps with some cool synhts, like chord strum
|
||||
#+begin_src common-lisp
|
||||
(defsynth tone-pluck ((freq 440) (amp 0.2))
|
||||
(out.ar 0 (* (saw.ar (let ((detune (* freq 0.01)))
|
||||
(list (- freq detune) (+ freq detune))))
|
||||
(env-gen.kr (perc 0.1 1.8)
|
||||
:level-scale amp
|
||||
:act :free))))
|
||||
|
||||
;; (synth 'tone-pluck)
|
||||
|
||||
(in-package #:cl-patterns)
|
||||
(pb :what-predef-chord
|
||||
:instrument :tone-pluck
|
||||
:note (pseq (mapcar #'chord-notes (list (chord "Major Triad") (chord "Minor Triad") (chord "Minor 7th") (chord "Major 7th") (chord "Diminished Triad") (chord "Major Triad"))) 1)
|
||||
:octave 4
|
||||
:root 2
|
||||
:dur (pseq '(2 2 4))
|
||||
;; :play-quant 4
|
||||
)
|
||||
|
||||
|
||||
;; (play :what-predef-chord)
|
||||
;; (stop :what-predef-chord)
|
||||
|
||||
#+end_src
|
||||
|
||||
yay.
|
||||
** now let's figure out percussions?
|
||||
** searching : "super collider percussion synth"
|
||||
got all sorts of cool results:
|
||||
*** main page of supercollider: https://supercollider.github.io/
|
||||
*** awesome list : https://github.com/madskjeldgaard/awesome-supercollider#synthdefs
|
||||
and it has link to defs!
|
||||
*** defs : https://github.com/everythingwillbetakenaway/Synthdefs
|
||||
for example a drum kik which I'd try to convert?
|
||||
https://github.com/everythingwillbetakenaway/Synthdefs/blob/master/drum_kick.scd
|
||||
** to file https://github.com/byulparan/cl-collider#record-audio-output
|
||||
whoh
|
||||
** now for the well deserved fucking rest
|
||||
** things I want to figure out in the future:
|
||||
1. joining patterns in parallel - percussion + rythm + solo
|
||||
2. having 3 beats in percussion but aligning to 4 beats
|
||||
3. getting cool instruments from existing repos for supercollider
|
||||
|
|
Loading…
Reference in New Issue