Some of you will already know the rm-repeated-pitches method. This finds repeating pitches in any or all voices of a slippery-chicken object and replaces them with other pitches from the current set. Of course what this is doing is ironing out some of the problems inherent to algorithmic pitch selection, and slippery chicken’s in particular.
For the Goldsmith’s project next month I’ve developed a related method called add-auxiliary-notes. This tries to deal with some of the static pitch structures that arise out of limited but extended harmonic fields. It analyses slippery-chicken voices phrase by phrase to find the most frequently used notes, then changes some of them (according to an activity-levels object) to auxiliary notes (up a semitone by default but any and varied intervals are possible). It’s already available on the SVN server so those of you who want it will find it along with documentation in the file slippery-chicken-edit.lsp after doing (update-app-src …)
Daniel Ross 16:19 on June 2, 2016 Permalink |
I’m getting the following error with this new add-aux–notes method:
(LET* ((POC
(IF WRITTEN
(WRITTEN-PITCH-OR-CHORD E)
(PITCH-OR-CHORD E)))
Daniel Ross 16:19 on June 2, 2016 Permalink |
Execution of a form compiled with errors.
Form:
(LET* ((POC
(IF WRITTEN
(WRITTEN-PITCH-OR-CHORD E)
(PITCH-OR-CHORD E)))
(IF
(IS-CHORD E)
(LOOP FOR P IN (DATA POC)
COLLECT (FREQUENCY P)))
(IF FORCE-LIST (LIST (FREQUENCY POC)) (FREQUENCY POC)))
)
Compile-time error:
The LET* binding spec (IF (IS-CHORD E)
(LOOP FOR P IN (DATA POC)
COLLECT (FREQUENCY P))) is malformed.
[Condition of type SB-INT:COMPILED-PROGRAM-ERROR]
Michael Edwards 16:40 on June 2, 2016 Permalink |
that code works fine for me. I can’t see an error in there and my Lisp doesn’t complain when I compile event.lsp
I think you’ll have to send the offending code
Daniel Ross 16:45 on June 2, 2016 Permalink |
It’ll take me ages to get something you an run on your machine….
Isn’t it just a misplaced bracket in the get-frequency method? (A close paren missing on line 7 and on line 10 instead)
Michael Edwards 17:08 on June 2, 2016 Permalink |
I know what you mean but I can’t see an error there. Maybe a download problem? This is what I’ve got and it runs fine for me:
Daniel Ross 17:23 on June 2, 2016 Permalink
That’s nothing like what I have. Will try update-app-src again…
Daniel Ross 17:25 on June 2, 2016 Permalink
Nope, no luck. Still looks like this:
(defmethod get-frequency ((e event) &key written force-list)
;;; ****
(if (is-rest e)
0.0
(let* ((poc (if written
(written-pitch-or-chord e)
(pitch-or-chord e)))
(if (is-chord e)
(loop for p in (data poc) collect (frequency p)))
(if force-list (list (frequency poc)) (frequency poc))))))
Michael Edwards 17:34 on June 2, 2016 Permalink
so your code is different to mine. that’s weird. I’m updating the src at svn-latest. In the meantime just replace your method definition with mine and all should be well.
Michael Edwards 17:37 on June 2, 2016 Permalink
try (update-app-src …) I can definitely see the right version of the method at https://sourced.ecdf.ed.ac.uk/projects/user/medward2/browser/sc-tags/sc-latest/src/event.lsp
Daniel Ross 08:41 on June 3, 2016 Permalink
Cool, that works now. Thanks!