Wim Dijkgraaf

  • Content count

  • Joined

  • Last visited

  • Days Won


Wim Dijkgraaf last won the day on December 14 2016

Wim Dijkgraaf had the most liked content!

About Wim Dijkgraaf

  • Rank
    Advanced Member

Contact Methods

  • Website URL
  • Skype

Profile Information

  • Gender
  1. Where can I find the full specification of OMN? I've been searching and found several articles and posts but would be great to have one document. I'm especially interested in how repetitions (what exactly is included in the repetition) and tuplets behave. With tuplets, how does one write something like 6e:2q -> six eigth notes in the time of 2 quarter notes Big hug, Wim
  2. I was thinking of Live Coding but snippets could be a use case too!
  3. Is there a way to send MIDI directly, without the need to declare a score?
  4. Are these user attributes related to the sound set definitions?
  5. Hi Torsten, I've adjusted the source code and checked if it still works .. it does. Just a short explanation of what I did to write the converter: - used Microsoft XSD tool (included as xsd.exe) to auto generate a C# class from an XML file, with one of the Sibelius soundset files as input. - I don't know to what degree that format is standardized. Might be that you encounter issues with EastWest files ... or maybe it just works. If both VSL and EastWest use the same XML elements, it should work. - Wrote some classes with the logic to create Opusmodus Soundsets - Added a console project that does the reading of Sibelius soundsets, calls the converter and serializes the result back to disc as an opusmodus soundset file. The output from the converter is not 100% correct; meaning that you'll have to do some manual adjustments in Opusmodus to make sure that the soundset file is 100% Common Lisp 'compatible'. This due to some special characters that the converter doesn't handle correctly (yet) and which can't be used in Common Lisp symbols. There is also some logic that maps VSL names to standard Opusmodus names that you'll have to adjust in order to be correct for the EastWest library. I included the SibeliusSoundSet files for your convenience so you can make sure the solution works on your machine. It should be hassle free under Microsoft Visual Studio Community edition and above. If I can be of some help, please let me know. Big hug, Wim Dijkgraaf p.s. Wrote the code under time pressure and wanted to make sure first that the concept is viable. Should refactor the code :-) Even better ... re-write this code in Common Lisp running in Opusmodus ... :-)
  6. You'll find the source code at: https://github.com/willemdijkgraaf/SibeliusToOpusmodusSoundset I transfered it very quickly and haven't been able to check if it works. Will do that later today.
  7. Ofcourse, first thing tomorrow morning.
  8. Thanks for the answers. Have to give this a further thought how to best deal with this. Explicitly referencing to the package using the double-colon notation would be fine to me but unfortunately doesn't work (yet).
  9. I'm experimenting witn namespaces in Common Lisp. When I create a namespace like below, the symbols from the opusmodus namespace seems to be unknown: (defpackage :com.wimdijkgraaf.tonnetz (:nicknames "TONNETZ" "TNNZ") (:use "COMMON-LISP" "OPUSMODUS" "TESTFRAMEWORK") (:export "APPLY-TONNETZ")) (in-package :tonnetz) ;;; setup hash table for quick lookup (defparameter *triad-interval-to-degrees* (make-hash-table :test 'equal)) ;; major triads (setf (gethash '(4 3) *triad-interval-to-degrees*) '(1 3 5)) (setf (gethash '(7 -3) *triad-interval-to-degrees*) '(1 3 5)) (setf (gethash '(8 -5) *triad-interval-to-degrees*) '(3 1 5)) (setf (gethash '(5 4) *triad-interval-to-degrees*) '(5 1 3)) (setf (gethash '(3 5) *triad-interval-to-degrees*) '(3 5 1)) (setf (gethash '(9 -4) *triad-interval-to-degrees*) '(5 3 1)) ;; minor triads (setf (gethash '(3 4) *triad-interval-to-degrees*) '(1 3 5)) (setf (gethash '(7 -4) *triad-interval-to-degrees*) '(1 3 5)) (setf (gethash '(9 -5) *triad-interval-to-degrees*) '(3 1 5)) (setf (gethash '(5 3) *triad-interval-to-degrees*) '(5 1 3)) (setf (gethash '(4 5) *triad-interval-to-degrees*) '(3 5 1)) (setf (gethash '(8 -3) *triad-interval-to-degrees*) '(5 3 1)) (defun get-root-intervals (triad) (midi-to-interval (sort-asc (pitch-to-midi (ambitus-octaves 'c4 1 triad))))) ;;; tests (deftest test-get-root-intervals () (check (equal (get-root-intervals '(g1 c9 e6)) '(4 3)) (equal (get-root-intervals '(f3 d4 a4)) '(3 4)))) (test-get-root-intervals) What happens is that the symbol ambitus-octaves is no longer found. What do I do wrong?
  10. A little extra feature to play with: (apply-tonnetz '(c4 e4 g4) '(l r n s p)) => ((c4 e4 g4) (b3 e4 g4) (b3 d4 g4) (c4 eb4 g4) (b3 eb4 fs4) (b3 d4 fs4)) Ability to not include a move in the output (by putting that move between parentheses): (apply-tonnetz '(c4 e4 g4) '(l r n (s) p)) => ((c4 e4 g4) (b3 e4 g4) (b3 d4 g4) (c4 eb4 g4) (b3 d4 fs4))
  11. Hi AM, Yes, I can see that the clear division of OM as ICE (Integrated Composition Environment) and for MIDI playback and SCORE reading/layout/printing but keeping the rest of the functions as independent as possible could be a nice approach for users who know to do Lisp programming (like you and hopefully me too in short term, and many more on this forum). The Opusmodus function library is a fantastic resource too, but if such a library would be available in the public domain / open source I would prefer to use that instead of a product specific library. Not a big deal though ... just some thoughts while I'm learning a new way to compose. Big hug
  12. Thanks Torsten for this helpful and thorough reply. Concerning testing, I took the most practical approach and started using the macros from the Practical Common Lisp book (Peter Seibel); a testing framework based on 4 macros. For now that does the job. The "lock in" is still at the back of my mind. My personal opinion is that Opusmodus should focus on delivering a perfect IDE for composers. OMN and the Opusmodus IDE should be helpful to be more productive, have excellent score facilities, do fantastic MIDI playback, have an outstanding Live Coding environment etc. but the main musical functions should be available in a Common Lisp open source project, to my personal opinion. This way, the compositions we create will always "work" independent of the composition environment and the community around the musical functions we use would be even larger and potentially even more interesting. But that's another discussion ... Thanks for the additional book list too. Will be an interesting journey :-) Big hug, Wim Dijkgraaf
  13. Hi Torsten, My main goal to learn Common Lisp, Opusmodus and have something like the Tonnetz to do musical experiments with. For that I'm happy with correct absolute pitches and less concerned with enharmonic correctness. Constraint programming is completely new to me. As soon as I've a bit of time I'll definitely have a look at it as well as to your paper. I've checked the link and browsed a bit through your projects. Wow, really impressive stuff! Great to get to know you a little bit through this forum. Best, Wim
  14. Ah, and who knows ... something like this: http://www.mtosmt.org/issues/mto.10.16.3/mto.10.16.3.waters_williams.html
  15. Hi Torsten, Yes, will be continued. I needed a "topic" to work on to improve my Lisp skills. This is something not too big to work on. My first aim is to implement the diagram you find on this wiki: https://en.wikipedia.org/wiki/Tonnetz . Still have to do some refactoring. Maybe trying a more OO approach too. Next step is to fully support this circle: https://commons.wikimedia.org/wiki/File:Circle_of_fifths,_clock_and_tonnetz.svg Besides this, I'm studying Dimitri's book (as you and Stephane mentioned). Too early to have plans to implement that but it looks interesting enough to support his approach(es). And of course the idea is to experiment with the Tonnetz and using it in a more free way by super-imposing triads, transposing voices, adding ornamentations etc. Any additional ideas are very welcome of course.