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.
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)
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. ?