SC learning process: opinions, advice

First off: it’s not unreasonable to feel overwhelmed. There is so much to learn!

But you don’t have to know everything in order to do get something fun done. I think focusing on patterns is a good habit - on making music rather than signal processing (you can get a long, long way using other people’s synths)

Eli Fieldsteel’s tutorials are fantastic. He’s putting his entire courses on youtube.

1 Like

Yep, His manual is next for me. Thank you

Download ModaLisp here
https://forum.ircam.fr/projects/detail/modalys/
Post below into New window and hit run script or command Y.
play with the numbers and see what happens. I think it sounds more raw and real than SC. I haven’t touched any docs on it yet. I want make sample material with it. But it can be sequenced with Max
There is an examples folder, the lisp one.

;;;-*-Mode: Lisp; Package: MODALYS -*-

;;;----------------------------------------------------------------------
;;; Modalys, example 7.
;;;----------------------------------------------------------------------

(new)

(load-component "key")

;;;
;;; make objects, and four "key" components (recall that keys are
;;; initially closed)
;;;

(defvar my-tube)
(setq my-tube
      (set-pitch 
       (make-object 'closed-open-tube
                    (modes      7)
                    (radius0   .01)
                    (radius1   .1)
                    (freq-loss   22)
                    (const-loss  12))
       'length 155.5635))

(defvar my-reed)
(setq my-reed (make-object 'bi-two-mass
                           (small-mass .000001)
                           (large-mass .000001)
                           (stiffness0     330)
                           (stiffness1     20)
                           (freq-loss0     160)
                           (freq-loss1     110)))


;;; the key component takes as arguments the tube, a pitch 
;;; (in semitones above the tube's fundamental), and the radius
;;;  of the key hole )

(defvar my-key1)
(setq my-key1 
      (make-instance 'key :tube my-tube :key-semitones 2 :radius 5e-3))
(defvar my-key2)
(setq my-key2 
      (make-instance 'key :tube my-tube :key-semitones 1 :radius 5e-3))
(defvar my-key3)
(setq my-key3 
      (make-instance 'key :tube my-tube :key-semitones 15 :radius 5e-3))
(defvar my-key4)
(setq my-key4 
      (make-instance 'key :tube my-tube :key-semitones 7 :radius 5e-3))
(defvar keys)
(setq keys (list my-key1 my-key2 my-key3 my-key4))

;;;
;;; make reed-tube interaction (make midi controller for breath,
;;; and scale breath pressure to vary between 20 and 1000
;;;

(defvar my-reed-rdt)
(setq my-reed-rdt (make-access my-reed (const 1) 'trans0))
(defvar my-tube-rdt)
(setq my-tube-rdt (make-access my-tube (const 0) 'long))

(defvar midi-ctlr)
(setq midi-ctlr (make-controller 'midi-file 1 "Examples/midi/wx7-staccato.mid"
                                 1	         ; midi channel
                                 (list 2)))    ; midi ctlr number

(make-connection 'reed my-tube-rdt my-reed-rdt 0.001
                 (make-controller 'scale 1 0 127 20 1000 midi-ctlr)
                 (const 0.000276))               ; reed active area

;;;
;;; clamp base of reed
;;;

(defvar my-reed-clp)
(setq my-reed-clp (make-access my-reed (const 0) 'trans0))
(make-connection 'position my-reed-clp (const 0))

;;;
;;; setq output
;;;

(defvar my-tube-out)
(setq my-tube-out (make-access my-tube (const .1) 'long))
(make-point-output my-tube-out)

;;;
;;; this part is interesting. the MIDI file is used only for breath
;;; information. we write some commands so that every time a note ends
;;; (i.e. the breath pressure falls to zero) we send some messages to open
;;; or close keys so that the next note will have a different pitch.
;;;

(defun note1 ()
  (key/open (first keys)))

(defun note2 ()
  (key/open (second keys)))

(defun note3 ()
  (key/open (third keys)))

(defun note4 ()
  (key/open (fourth keys)))

(defun note5 ()
  (key/close (fourth keys))
  (key/close (third keys)))

(defun note6 ()
  (key/close (second keys))
  (key/close  (first keys)))

(defvar notelist)
(setq notelist (list (function note1) (function note2) 
                     (function note3) (function note4) 
                     (function note5) (function note6)))

;;;
;;; every time the "do-next-note" function is called, messages are
;;; sent to the keys to play the next note. if "do-next-note" is called
;;; and there are no more notes left, an error is signalled
;;;

(defun do-next-note ()
  (if notelist
    (progn
      (funcall (car notelist))    ; call the first function on the list
      (setq notelist (cdr notelist)))))

;;;
;;; make a scheme controller, whose input is the midi controller setq'd
;;; above. every time the pressure drops below 20 (on a scale of 0 to 127),
;;; the "do-next-note" function is called
;;;

(defvar in-note)
(setq in-note nil)
(make-controller 'foreign-call 0 -1
		 (lambda (inputs output)
                                     (declare (ignore output))
		                     (if in-note
		                       (if (< (vget inputs 0 0) 20)
			                 (progn (do-next-note)
				                (setq in-note nil)))
		                       (if (> (vget inputs 0 0) 20)
			                 (setq in-note t))))
		 (list midi-ctlr))

;;;
;;; make samples and play sound
;;;

(run 3)
(play)



the interface was Scheme in the old times - now a custom Lisp? - would be fantastic to run from SC (I see they have a Max interface…) hmmm

Yes, sc would be wonderful

Check this
He drops in modal objects for the 3d object in the max app, I don’t know how that is setup, it’s works with Max and openmusic , I don’t see a way to access his patches. Also midi files are used but they are breath controller cc, also loads graphic files from matlab, and presumably a free version of an app like matlab. ?

His book is great, but the videos are worth looking at.

I find it useful to have different ways of getting the information into my head. I certainly need to see things now than once.

He has a LOT of course material on YouTube. I’ve watched most of it