Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 06/22/2017 in all areas

  1. 5 points
    opmo

    Midi In Collect

    Ver 2. will be able to import musicXML files and convert to omn.
  2. 5 points
    opmo

    Opusmodus 1.2.22703

    New function: TIME-SWALLOW and minor bug fixes. The function TIME-SWALLOW 'swallows' sequence of pitches derived from the divide of every length value of a sequence by a given time value: (/ 1/2 1/16) = 8. The rest-lengths are omitted. (setf length '(1/2 1/16 7/16 1/8 3/8 3/16 5/16 1/4 1/4 5/16 3/16 3/8)) (setf infinity (infinity-series 100 '(g4 gs4))) => (g4 gs4 fs4 a4 gs4 g4 f4 bb4 fs4 a4 g4 gs4 a4 fs4 e4 b4 gs4 g4 f4 bb4 g4 gs4 fs4 a4 f4 bb4 gs4 g4 bb4 f4 eb4 c5 fs4 a4 g4 gs4 a4 fs4 e4 b4 g4 gs4 fs4 a4 gs4 g4 f4 bb4 a4 fs4 e4 b4 fs4 a4 g4 gs4 e4 b4 a4 fs4 b4 e4 d4 cs5 gs4 g4 f4 bb4 g4 gs4 fs4 a4 f4 bb4 gs4 g4 bb4 f4 eb4 c5 g4 gs4 fs4 a4 gs4 g4 f4 bb4 fs4 a4 g4 gs4 a4 fs4 e4 b4 f4 bb4 gs4 g4) (time-swallow 1/16 1 length pitch) => (g4 fs4 a4 gs4 f4 f4 g4 fs4 a4 g4 g4 a4) Time 1/16 in each length: 8 1 7 2 6 3 5 4 4 5 3 6 8 1 7 2 g4 gs4 fs4 a4 gs4 g4 f4 bb4 fs4 a4 g4 gs4 a4 fs4 e4 b4 gs4 g4 6 3 5 4 f4 bb4 g4 gs4 fs4 a4 f4 bb4 gs4 g4 bb4 f4 eb4 c5 fs4 a4 g4 gs4 4 5 3 6 a4 fs4 e4 b4 g4 gs4 fs4 a4 gs4 g4 f4 bb4 a4 fs4 e4 b4 fs4 a4 Example with swallow :type 1 (default) and with chord-size (3 3 2 1): (make-omn :length length :pitch (time-swallow 1/16 '(3 3 2 1) length pitch)) => (h g4gs4fs4 s fs4a4g4 q.. a4g4 e gs4 q. f4bb4g4 e. f4bb4gs4 qs g4bb4 q fs4 a4fs4e4 qs g4gs4fs4 e. g4f4 q. a4) 8-3 1-3 7-2 2-1 g4 gs4 fs4 a4 gs4 g4 f4 bb4 fs4 a4 g4 gs4 a4 fs4 e4 b4 gs4 g4 6-3 3-3 5-2 4-1 f4 bb4 g4 gs4 fs4 a4 f4 bb4 gs4 g4 bb4 f4 eb4 c5 fs4 a4 g4 gs4 4-3 5-3 3-2 6-1 a4 fs4 e4 b4 g4 gs4 fs4 a4 gs4 g4 f4 bb4 a4 fs4 e4 b4 fs4 a4 Same as above but with swallow :type 2: (make-omn :length length :pitch (time-swallow 1/16 '(3 3 2 1) length pitch :type 2)) => (h g4gs4fs4 s g4gs4a4 q.. fs4e4 e gs4 q. a4f4bb4 e. c5fs4a4 qs a4fs4 q fs4 f4bb4a4 qs fs4a4g4 e. fs4b4 q. cs5) 8-3 1-3 7-2 g4 gs4 fs4 a4 gs4 g4 f4 bb4 fs4 a4 g4 gs4 a4 fs4 e4 b4 gs4 g4 f4 bb4 g4 2-1 6-3 3-3 gs4 fs4 a4 f4 bb4 gs4 g4 bb4 f4 eb4 c5 fs4 a4 g4 gs4 5-2 4-1 4-3 a4 fs4 e4 b4 g4 gs4 fs4 a4 gs4 g4 f4 bb4 a4 fs4 e4 b4 5-3 3-2 6-1 fs4 a4 g4 gs4 e4 b4 a4 fs4 b4 e4 d4 cs5 gs4 g4 f4 bb4 g4 More examples: (make-omn :length length :pitch (time-swallow 'e '(3 3 2 1) length pitch)) => (h g4gs4fs4 s gs4g4f4 q.. gs4g4 e fs4 q. a4g4gs4 e. a4fs4e4 qs e4b4 q gs4 f4bb4g4 qs g4gs4fs4 e. fs4a4 q. f4) (make-omn :length length :pitch (time-swallow 'e '(3 3 2 1) length pitch :type 2)) => (h g4gs4fs4 s f4bb4fs4 q.. fs4a4 e fs4 q. e4b4gs4 e. bb4g4gs4 qs a4f4 q gs4 bb4f4eb4 qs fs4a4g4 e. a4fs4 q. b4) (setf length2 (gen-length (distributive-cube (interference2 '(3 2))) '(1/16))) => ((1/2 1/4 1/4 1/2 1/4 1/8 1/8 1/4 1/4 1/8 1/8 1/4 1/2 1/4 1/4 1/2) (1/4 1/8 1/8 1/4 1/8 1/16 1/16 1/8 1/8 1/16 1/16 1/8 1/4 1/8 1/8 1/4) (1/4 1/8 1/8 1/4 1/8 1/16 1/16 1/8 1/8 1/16 1/16 1/8 1/4 1/8 1/8 1/4) (1/2 1/4 1/4 1/2 1/4 1/8 1/8 1/4 1/4 1/8 1/8 1/4 1/2 1/4 1/4 1/2)) (make-omn :length length2 :pitch (time-swallow '(3e e s) '((3 3 2 1) (2 3)) length2 pitch)) => ((h g4gs4fs4 q a4fs4e4 f4bb4 h f4 q a4fs4e4 e fs4a4gs4 g4f4 q a4 g4gs4e4 e b4e4d4 cs5gs4 q f4 h f4bb4gs4 q gs4g4f4 g4gs4 h f4) (q g4gs4 e fs4a4gs4 a4gs4 q gs4g4f4 e f4bb4 s bb4fs4a4 bb4fs4 e bb4fs4a4 fs4a4 s a4g4gs4 a4g4 e a4g4gs4 q g4gs4 e a4fs4e4 fs4e4 q e4b4gs4) (q g4gs4fs4 e gs4g4f4 f4bb4 q fs4 e a4fs4e4 s e4b4gs4 b4gs4 e gs4 f4bb4g4 s g4gs4fs4 gs4fs4 e fs4 q f4bb4gs4 e bb4f4eb4 eb4c5 q fs4) (h g4gs4 q a4fs4e4 f4bb4 h f4bb4gs4 q a4fs4 e fs4a4gs4 g4f4 q a4fs4e4 g4gs4 e b4e4d4 cs5gs4 q f4bb4g4 h f4bb4 q gs4g4f4 g4gs4 h f4bb4gs4)) (make-omn :length length2 :pitch (time-swallow '(3e e s) '((3 3 2 1) (2 3)) length2 pitch :type 2)) => ((h g4gs4fs4 q e4b4gs4 fs4a4 h f4 q gs4fs4a4 e fs4e4b4 g4gs4 q a4 gs4g4f4 e f4bb4gs4 f4eb4 q gs4 h bb4fs4a4 q gs4fs4a4 a4g4 h gs4) (q g4gs4 e a4gs4g4 f4bb4 q fs4a4g4 e a4fs4 s e4b4gs4 gs4g4 e g4f4bb4 g4gs4 s fs4a4f4 f4bb4 e bb4gs4g4 q bb4f4 e c5fs4a4 g4gs4 q a4fs4e4) (q g4gs4fs4 e f4bb4fs4 g4gs4 q fs4 e g4f4bb4 s gs4fs4a4 f4bb4 e gs4 bb4f4eb4 s fs4a4g4 gs4a4 e fs4 q b4g4gs4 e g4f4bb4 fs4e4 q fs4) (h g4gs4 q fs4e4b4 gs4fs4 h bb4f4eb4 q fs4a4 e fs4e4b4 g4gs4 q a4fs4b4 f4bb4 e bb4gs4g4 eb4c5 q fs4a4gs4 h g4gs4 q a4gs4g4 gs4a4 h f4bb4g4)) JP
  3. 5 points
    Hello, This is my participation at Pianoteq Video Contest 2017. The composition was written with Opusmodus and played in Ableton Live with seven instances of Pianoteq (modified TubularBells, modified ConcertArp recording, Steinway D Classical Recording A, modified Celesta, modified Cinbalom, modified original ChurchBells, Steinway D Classical Recording BA and completed with a Ircam Solo Instruments bank instance (flute, Horn, Cello) read via the UVI Workstation : and the list of videos in competition : http://www.forum-pianoteq.com/viewtopic.php?id=5301 Do not hesitate to tell me what you think. Didier PS : It is advisable to play the video in 1080p HD and listen to the headphone for panoramic movements.
  4. 4 points
    opmo

    Opusmodus 1.2.22733

    Extended documentation and bug fix in do-timeline and do-timline2 functions if binary list.
  5. 4 points
    Hello, Following the 2017 Pianoteq contest, I was surprised to be ranked 4th in the contest and get a special prize with this little piece written with Opusmodus. Didier http://www.forum-pianoteq.com/viewtopic.php?id=5373
  6. 4 points
    opmo

    Opusmodus 1.2.22714

    Fix to DO-TIMELINE and DO-TIMELINE2 functions when with T or NIL plus minor bug fixes.
  7. 4 points
    opmo

    DADA Quartet

    Algorithmic avant garde jazz improvisation for tenor saxophone, piano, bass and drums. I thought it is time to add something new to our 'Made in Opusmodus' forum. 0.00 0.00 Play / Pause Samples: VSL Ensemble Pro with Vienna Instruments Pro. If you like to study the score, here it is: DADA Quartet.opmo
  8. 4 points
    Deb76

    DADA Quartet

    Dear Janusz, Here is a first result from a series of pitches based on "Mi Myxolydien" (a mix with the notes of Amazing Grace version Judy Collins and Third Stone from the Sun by Jimi Hendrix) insert in Def-Library. I recorded the IAC tracks in Ableton Live in the arrangement window and since I do not have an interesting jazz saxophone, I split the tracks and the piano so I could get some changes to the timbres. Besides the bass, the piano and the drums, I used three sessions of Softube modular synthesizer, Modular, including one with the Buchla 259e module (the somewhat space-like sound and which sometimes emphasizes the piano) and two instruments of the Korg Gadget suite for Mac, the Arp Odyssey emulation and the Wave Station emulation in a synthetic brass sound). Didier
  9. 4 points
    torstenanders

    Polyphonic preview?

    I really like how Opusmodus allows to preview monophonic snippets (and other material, like interval sequences). No need to explicitly call some function or connect to some editor, as in other composition systems -- just use a keyboard shortcut to see and hear an intermediate result. However, what I miss is notating/auditioning intermediate results of polyphonic music with a single shortcut. So, I defined the function preview-score, based on def-score. The function expects a polyphonic score in the slightly simplified format we discussed earlier. Here is a minimal example. (preview-score '(:vln ((q b4 a4 h g4)) :vlc ((h g3 b3)))) If I want to control further notation or playback parameters, preview-score provides arguments for that, but that is basically the same as using def-score directly. Instead, such parameters can be defined only once with global variables, and then used for multiple calls to preview-score. Here is some example setting. (setf *default-preview-score-instruments* '(:vln (:program 'violin :sound 'gm) :vlc (:program 'cello :sound 'gm))) (defparameter *default-preview-score-header* '(:title "Opus magnum" :tempo 80)) Janusz: How can I define a keyboard shortcut that calls the function preview-score with the score returned by a selected code region (or the Lisp expression just before the cursor)? Thanks! For completeness, the definition of preview-score is below. Best, Torsten ;;; just some dummy settings for now (defparameter *default-preview-score-instruments* '(:vln (:program 'violin :sound 'gm) :vlc (:program 'cello :sound 'gm)) "Settings for each instrument used by `preview-score'. The format is a plist where keys are the instrument labels, and values a list with the actual settings. For format of these settings are the same as instrument settings for `def-score' with keywords like :sound, :channel etc. -- except for they key :omn.") ;;; just some dummy settings for now (defparameter *default-preview-score-header* '(:title "Opus magnum" :tempo 80) "Global score settings used by `preview-score'. The format is a plist where keys are the instrument labels, and values a list with the actual settings. The format is the same as the header settings for `def-score' with keywords like :title, :key-signature etc.") (defun preview-score (score &key (name 'test-score) (instruments *default-preview-score-instruments*) (header *default-preview-score-header*)) "Notates and plays a score in a format slightly simpler than expected by def-score, i.e., without its header. Args: - score (plist): a headerless score. See below for its format. - name (symbol): The score name. - instruments (plist): Keys are instrument labels, and values a list with the actual settings. These settings have the same format as instrument settings for `def-score' with keywords like :sound, :channel etc. -- except for they key :omn. - header (plist): The format is the same as the header settings for `def-score' with keywords like :title, :composer, :key-signature etc. Score format: ;;; (<part1-name-keyword> <part1-OMN> ;;; <part2-name-keyword> <part2-OMN> ;;; ...) Example: ;;; (preview-score ;;; '(:vln ((q g4) (q. c5 e d5 q e5 f5) (h. e5)) ;;; :vlc ((q g3) (q c4 b3 a3 g3) (h. c3))) ;;; :instruments '(:vln (:program 'violin :sound 'gm) ;;; :vlc (:program 'cello :sound 'gm)) ;;; :header '(:title \"Opus magnum\" ;;; :tempo 80)) " ;; Using eval is problematic (https://stackoverflow.com/questions/2571401/why-exactly-is-eval-evil/), ;; but hard to avoid for a dynamically created def-score expression that requires splicing with ,@. ;; Possible alternative would be to define preview-score as macro, but then arguments are not evaluated. (eval `(def-score ,name ;; quote all header args, because symbol values must be quoted... ,(mapcar #'(lambda (x) `',x) (append header ;; add default vals of required header args at end -- they are overwritten by args given (list :key-signature 'atonal ;; By default, use implicit time signature of 1st part :time-signature (om:get-time-signature (second score)) :tempo 70))) ,@(mapcar #'(lambda (part) (let ((part-symbol (first part)) (part-omn (second part))) (list* part-symbol :omn `(quote ,part-omn) (getf instruments part-symbol)))) (plist->pairs score))) ) (audition-musicxml-last-score) *last-score*) #| ; mini test (preview-score '(:vln ((q g4) (q. c5 e d5 q e5 f5) (h. e5)) :vlc ((q g3) (q c4 b3 a3 g3) (h. c3))) :instruments '(:vln (:program 'violin :sound 'gm) :vlc (:program 'cello :sound 'gm)) :header '(:title "Opus magnum" :tempo 80)) |#
  10. 4 points
    torstenanders

    Highly flexible envelopes: fenvs

    In case someone is interested, I just put some of my libraries online. Fenv is a library of highly flexible envelopes for algorithmic composition. The software represents envelopes as numerical functions, called fenvs. It provides a rich set of functions to generate, combine and transform these envelopes. You can find the code at https://github.com/tanders/fenv, together with some information how to install and use. Best, Torsten
  11. 4 points
    torstenanders

    Out-of-the-box algorithms

    > more high-level algorithms I cannot answer your question concerning built-in algorithms, but if you are looking for further ideas what could be added, here is some related literature. A good general overview of algorithmic composition techniques, from a technical point of view. Nierhaus, G. (2009) Algorithmic Composition: Paradigms of Automated Music Generation. Wien, New York: Springer. Discussions of compositional applications in OpenMusic (likewise implemented in Common Lisp, though the main interface is a visual language) by various composers. Agon, C. et al. (eds.) (2006) The OM Composer’s Book. 1. Delatour France. Bresson, J. et al. (eds.) (2008) The OM Composer’s Book. 2. Editions Delatour France / Ircam. Hirs, R. & Gilmore, B. (eds.) (2009) Contemporary Compositional Techniques and OpenMusic. Collection Musique/Sciences. IRCAM/Delatour. Bresson, J. et al. (eds.) (2016) The OM Composer’s Book . 3. Paris; Sampzon: Editions Delatour France. Most of you likely already know the book by Nigel Morgan, containing discussions of compositional applications in Opusmodus itself. Morgan, N. & Legard, P. (2015) Parametric Composition: Computer-Assisted Strategies for Human Performance. West Yorkshire, UK: Tonality Systems Press. The perhaps most important algorithmic composition technique of Common Music (also implemented in common Lisp) and SuperCollider are patterns / item streams, which can be nested. http://commonmusic.sourceforge.net/cm/res/doc/cm.html#patterns Taube, H. (2004) Notes from the Metalevel. London and New York: Taylor & Francis. Online: http://www.moz.ac.at/sem/lehre/lib/cm/Notes from the Metalevel/00/contents.html The libraries of the venerable PatchWork and its successors PWGL and OpenMusic (all Common Lisp) provide ideas for various approaches, some already mentioned above. Below are links to relevant link collections. OpenMusic libraries: http://repmus.ircam.fr/openmusic/libraries PWGL libraries: http://www2.siba.fi/pwgl/downloads.html Another successful technique, implemented in multiple PWGL and OpenMusic libraries and beyond is constraint programming. I did a lot of research in this area and therefore quote some own publication here. Anders, T. & Miranda, E. R. (2011) Constraint Programming Systems for Modeling Music Theories and Composition. ACM Computing Surveys. 43 (4), 30:1–30:38. Online: https://pdfs.semanticscholar.org/7d0e/783e5bb1c35a871a45e72fddaf7bf3db5d28.pdf. Of course, there is much more literature on algorithmic composition (computer-aided composition) out there, but the above literature gives a good starting point to study more general composition techniques and their applications. Best, Torsten
  12. 3 points
    opmo

    tutorial guide

    Next - which will take some time - I will add all Opusmodus System Function with examples to our forum.
  13. 3 points
    I will add the inverted form into to the system with the next update.
  14. 3 points
    Ah, great! The documentation does not mention that the input can also be MIDI velocity integers, so I missed that. Best, Torsten added 2 minutes later BTW: I needed that to translate values from OpenMusic data objects into Opusmodus. I am currently working on a library that will bring OpenMusic functions/methods to Opusmodus... Best, Torsten
  15. 3 points
    opmo

    Midi In Collect

    Just import your midi file to Opusmodus (OMN) script and start transforming :-) added 1 minute later Direct midi input (keyboard) into OMN script will be introduce in version 2.0
  16. 3 points
    opmo

    Opusmodus 1.2.22630

    min width on single system (snippet). rit extension octave shift above pedal
  17. 3 points
    torstenanders

    Big Thank you to Torsten.

    > If I can get OM, PWGL and Max to exchange data I am in kind of heaven. Having Opusmodus and PWGL exchanging data works easily via textfiles, but it is a bit awkward to set up (setting file names explicitly for each case etc.). I tried to "remove control" PWGL from Opusmodus with sockets etc., but could not get that working -- PWGL is not designed for that. Getting PWGL libraries running within Opusmodus is a much more smooth connection, though the programming part tends to do a bit harder with plain Lisp code compared to PWGL patches (e.g., no objects or values to pick from menus). On the upside, the resulting programs are more concise and therefore more easy to read in Opusmodus compared with PWGL -- I prefer that :) BTW: There is more in the pipeline. Best, Torsten
  18. 3 points
    Dear all, I released a collection of personal Opusmodus Tools at https://github.com/tanders/tot, together with installation instructions etc. Best, Torsten
  19. 3 points
    rme

    using Emacs and SLIME with Opusmodus

    If you want to use Emacs and SLIME with Opusmodus, that is possible. Here are steps that work: If you haven't already done so, install Quicklisp. Evaluate (ql:quickload "quicklisp-slime-helper"). Follow its instructions and put (load (expand-file-name "~/quicklisp/slime-helper.el")) into your ~/.emacs file. Start Opusmodus, and evaluate (cl-user::start-swank). This should print something like ";; Swank started at port: 4005". Now, start your Emacs. Type M-x slime-connect and you'll be prompted for a host (use the default, which is 127.0.0.1) and then a port. The port needs to match the port (default 4005) that was printed out earlier. You are now connected to Opusmodus. You should be able to say stuff like (list-plot '(1 2 3)) from the SLIME repl and have it work. The function cl-user::start-swank basically does (load "home:quicklisp;setup") and then (ql:quickload :swank) and then (swank:create-server :port 4005 :dont-close t), so there's no magic going on there. If you run into trouble, let me know and I'll try to help out.
  20. 3 points
    Dear all, I am working on porting libraries from other algorithmic composition environments so that they are usable in Opusmodus. The library Cluster Engine is a constraint solver for solving polyphonic constraint satisfaction problems where both the pitch and the rhythmic structure can be restricted by an arbitrary number of constraints (rules), and a constraint solver then searches for a solution that is consistent with all constraints. This library supports user-defined rules, and highly flexible ways to control which aspects of the resulting score are controlled by certain rules. For example, you can independently control with compositional rules the melody and harmony of the music you generate. The library Cluster Rules is extension of Cluster Engine that provides predefined rules and some utilities. Plain Common Lisp versions of these libraries are available at https://github.com/tanders/cluster-engine and https://github.com/tanders/cluster-rules, together with installation instructions etc. These libraries are very powerful, e.g., I use them to revise the underlying harmony of preexisting Opusmodus scores such that the result follows standard voice leading rules etc. However, these libraries may be somewhat tricky to learn, in particular if you never before had any contact with constraint programming. I therefore recommend to start learning these libraries first in PWGL, where their documentation is better (they come with interactive tutorials). Best, Torsten
  21. 3 points
    AM

    little stupid bot

    an output-seq of "a little stupid bot" (works with stochastic broken-symmetrical elements and PM..) - could produce for eternety (never ending)... it works and i am going for holidays now greetings andré
  22. 3 points
    torstenanders

    Opusmodus 1.2.22292

    Below is a generalised version that expects a test function instead of a static parameter. That way you can, e.g., filter out all notes above a certain pitch threshold or arbitrary other conditions that you can express with a function. Demonstration examples are contained in the doc string below. Best, Torsten (defun filter-notes-if (test OMN &key (remain T) (section nil)) "Extracts events in OMN for which a given test function returns true (or keeps only events for which the test function returns nils). All other notes are turned into rests. Args: - test: Boolean function expecting individual parameters of each note in `OMN' - OMN: An OMN sequence - remain: Boolean expressing whether only matching notes (T) or non-matching notes (nil) should be kept. - section: an integer or list of integers. Selected list or lists to process. The default is NIL. See also Opusmodus builtin `filter-events'. Examples: Keep only notes above middle C and turn other notes into rests (filter-notes-if #'(lambda (dur pitch &rest other-args) (> (pitch-to-midi pitch) 60)) '(e c4 mp -e fermata e. d4 -h e. c4 e e4)) Do the opposite with :remain nil. (filter-notes-if #'(lambda (dur pitch &rest other-args) (> (pitch-to-midi pitch) 60)) '(e c4 mp -e fermata e. d4 -h e. c4 e e4) :remain nil) This also works with nested lists and you can process only selected bars (other bars are kept unchanged). (filter-notes-if #'(lambda (dur pitch &rest other-args) (> (pitch-to-midi pitch) 60)) '((e c4 mp -e fermata e. d4 -s) (-q.. e. c4 e e4)) :section 1) " (if section (maybe-section #'(lambda (seq) (filter-notes-if test seq :remain remain)) OMN section) (copy-time-signature OMN (flatten (mapcar #'(lambda (params) (if (length-notep (first params)) (if (if remain (apply test params) (not (apply test params))) params ;; turn non-matching note into rest ;;; TODO: preserve params relevant for rests (e.g., fermatas) (- (omn-encode (first params)))) ;; leave rests unchanged params)) (single-events (flatten OMN))))))) (defun copy-time-signature (music-with-time-signature music-to-rebar) "Rebars `music-to-rebar' so that it fits the meter of `music-with-time-signature'." ;; only rebar if music-with-time-signature is nested (if (every #'listp music-with-time-signature) (omn-to-time-signature music-to-rebar (get-time-signature music-with-time-signature)) music-to-rebar))
  23. 3 points
    Stephane Boussuge

    Prelude for Piano

    Hi, for study purpose only, you will find attached to this post the score script of this Prelude for Piano. SB. PreludeForNicolai.opmo
  24. 2 points
    opmo

    Opusmodus 1.2.22604

    Notation changes and improvements: * added support for dotted and dashed and short barlines * allow setting of slash grace duration * Improved edit UI * improved staff spacing * correct placement of articulations in multi-voice staff * Fixed tie problem with unpitched notes * ignore erroneous notations on chord notes * Improved handling of 'exact' mode layout * Improved tuplet handling * correct some layout errors * corrected occasional slur misplacement * improved placement of harmonic
  25. 2 points
    Stephane Boussuge

    Tonality map on chords

    ;; exemple d'utilisation des accords (setf path (tonality-series '((d4 min)(bb3 maj)(g3 min7)))) (setf seq '((e c4 d4 e4 f4 g4 a4 b4 c5)(e c4 d4 e4 f4 g4 a4 b4 c5)(e c4 d4 e4 f4 g4 a4 b4 c5))) (tonality-map path seq) But i think what could be more useful for you is to use harmonic-progressions system: (setf degree '(1 4 5 1 6 4 2 5 1)) (setf progression (harmonic-progression degree '(d4 natural-minor) :size 3 :base 1 )) => (d4f4a4 g4bb4d5 a4c5e5 d4f4a4 bb4d5f5 g4bb4d5 e4g4bb4 a4c5e5 d4f4a4) Once the chords generated this way, you can use them with tonality-series as an harmonic path: (setf path2 (tonality-series (mclist progression))) (tonality-map path2 '((e c4 d4 e4 f4 g4 a4 b4 c5)(e c4 d4 e4 f4 g4 a4 b4 c5)(e c4 d4 e4 f4 g4 a4 b4 c5))) => ((e d4 f4 f4 a4 a4 a4 d5 d5) (e g4 bb4 bb4 d5 d5 d5 g5 g5) (e a4 c5 c5 e5 e5 e5 a5 a5)) SB.
×