Jump to content

TomTolleson

Members
  • Posts

    77
  • Joined

  • Last visited

Everything posted by TomTolleson

  1. This is great, Stephane! By the way, it seems that you have a leadership role in composerworkshop.com. I tried to register with two different emails and got the attached block. I will try to not take it personally!
  2. Hello! My apologies if there is a better thread for this topic, but I am wanting to organize a composition to reference other files (one which will contain lists which are large enough to be unwieldy and the other for my functions). Approaching this with ADSF would have me creating a system to load. Something like: (defsystem "composition-lisp" :description "composition-lisp: Tom trying to organize and load multiple files." :version "0.0.1" :author "Tom Tolleson <tom@example.com>" :licence "Public Domain" :depends-on ("optima.ppcre" "command-line-arguments") :components ((:file "/common-lisp/composition-lisp/composition-lisp.ads") (:file "macros" :depends-on ("packages")) (:file "hello" :depends-on ("macros")))) However, I'm wanting to do things in the most simple way possible and I'm sure I've missed it. I'm happy to delete this and repost as a comment in a more appropriate thread if needed. Thanks, THT
  3. Another option - as a companion to (midi-to-omn) could we have (omn-to-midi "pathto/file.mid") or something similar? Nevermind! I just tested the compile-score with adding a MIDI file and (compile-score 'piano :file "/Users/ttolleson/opusmodus/Singles/WaveProcessFabric/MIDI/piano.mid") (compile-score 'piano :file "/Users/ttolleson/opusmodus/Singles/WaveProcessFabric/MIDI/piano.mid") Satisfies my need completely. Thanks! Tom
  4. Hello, I'm having an issue getting MIDI over to a DAW and since this thread mentions the settings explicitly I thought I would add onto this. I'm not able to record MIDI using Logic Pro or Ableton when Opus Modus is the source. I'm able to record MIDI from other software but not OpusModus. So I'm getting ((0 . "Bus 1")) When I evaluate (midi-destinations) Which is aligned with the above definition by the admin. However, I"m not sure if this is the IAC Driver which I have sending and receiving port 1. Is there a best practicce for getting this up and running? I haven't tried sending MIDI since I upgraded to OM 3. Another solution would be for me to save a MIDI file from OM. But I don't see how to save the last score as MIDI in OM3. Sorry if I'm missing something obvious here. Thanks. Tom
  5. Hello, Is TOT still supported and working with OM 3.0? I see the latest pull request for the repo was July 2021. The installation instructions on the site seem to only include the git commands to clone the repo. I created the directory /common-lisp under my user folder and pulled all the repos mentioned into the folder. Of course, that is not an "installation" unless the folder is already linked to lisp. Which mine isn't. So I tried to load everything via ASDF. But, when I try to load via asdf using quickload (ql:quickload "/Users/ttolleson/common-lisp/tot") The response is Error: Reader cannot find package QL. So, without being sure as to how CCL loader prefers to load, I went ahead and attempted the command given in this thread which is (require :tot) Of course that won't work if it isn't installed. So the result of that was Error: REQUIRE was called after delivery time with module :tot. To fix this, either require the module before delivery or use :KEEP-MODULES T. 1 (abort) Return to debug level 1. 2 Return to top loop level 0. Right. So I'm not understanding the actually commands to run in OM using ASDF. FOr future readers, the options in the top GUI menu Tools> Load and Tools > compile don't seem to do what's needed here. Any advice is appreciated. Thanks!
  6. One question @Stephane Boussuge - what is 'round ? Context - (setf new-ints (mapcar 'round (linear-interpolation bassint n-steps))) I'm unable to find that in the documentation.
  7. This is beautiful, @Stephane Boussuge! First use of a for loop and a defined function for me with OM. This opens up a whole new world. Thank you so much! THT
  8. Hello, I'm hitting a brick wall with m thinking from object-oriented approaches. Basically, I want to create a melody line that "flutters" pitches in a key corresponding to a bass pitch, and only when that bass pitch occurs. It's easy enough for an "If, then" statement but my attempt to solve this are leading me to take a first step of interpolating between bass pitches (as integers) and manually calculating the remains of the bar manually. However this is not ideal as I would prefer to use euclidean-rhythm with a rotation, so finding a parametric approach this would be ideal. Here's the general approach I've begun. Any advice from people more experienced with LISP is appreciated. (setf bass '((g2)(c3)(a2)(e3)(fs3))) (setf bassint (pitch-to-integer bass)) => ((-17) (-12) (-15) (-8) (-6)) ;;; create a set of integers from interpolation ;;; between bass integers (bassint), ;;; then convert those to pitches (setf melody (gen-transition 1 10 10 1)) Thanks, Tom
  9. Hello! I'm trying to use the arp-down function on some chords and not getting any results. Are they still supported? (setf protochords (gen-repeat 5 (respell '(eb2eb4g4bb4 arp-down c2c4e4ab4 ab2eb4ab4b4 arp-down d2d4f4a4 arp-down bb2d4f4bb4 arp-down g2eb4g4b4 arp-down c2c4eb4g4 arp-down ab2eb4ab4b4 arp-down d2d4gb4a4 arp-down bb2d4gb4bb4 arp-down g2d4g4bb4 arp-down c2c4eb4g4 arp-down ab2c4eb4ab4 arp-down f2db4f4a4 arp-down bb2db4f4bb4 arp-down g2d4g4bb4 arp-down eb2eb4gb4bb4 arp-down ab2c4eb4ab4 arp-down f2db4f4a4 arp-down d2d4f4a4 arp-down g2d4g4bb4 arp-down eb2eb4g4bb4 arp-down)))) Thanks! Tom
  10. This works perfectly Julio. This provides some solid building blocks. Thanks Julio and Stephane!
  11. The find-closest could do the job but I'm having some difficulty implementing it with variables rather than integers ;; establish mline and tline (in this case just randomizing the tline) (setf mline '(d3 e3 d3 a3 f3 g3 c3)) (setf tline (rnd-sample mlinecount '(c3 e3 g3))) ;; convert pitches to integer. Both of these work properly. I'm just trying to create variables with integers to apply into the "find-closest" function. (setf mlineint (pitch-to-integer mline)) (setf tlineint (pitch-to-integer tline)) ;; The following sample of "find-closest" works properly (find-closest 5 '(6 2 8 3)) ;; the following howevfer does not (find-closest mlineint '(tlineint))
  12. My direction now is beginning with (setf mline '(d3 e3 d3 a3 f3 g3 c3)) (setf mlinecount (get-count mline :length :note)) (setf tline (rnd-sample mlinecount '(c3 e3 g3))) I just need to figure out how to replace the rnd-sample function with a function that finds the next lowest pitch from (c3 e3 g3), and of course I could also just create a variable out of (c3 e3 and g3) but I hope you get my point.
  13. "I once implemented a version of this in PWGL " Thanks for finding this! I do not have any of these libraries nor use PWGL but I appreciate you jumping in! Thanks, Julio! I'm imagining a melody line of pitches and a "bag" array of the diatonic pitches for that key. Based on the pitch of the m line, the algorithm would select the closest inferior pitch from the diatonic array. Likely there would be a pitch-to-integer conversion to find the smallest difference between the melody line and the pitches in the "bag." I am thinking of this in Machine Learning terms as a K-means "nearest neighbor" approach which likely won't help me in Lisp! Tom
  14. Hello! I’m trying to approach a (sort of) contrapuntal composition style many know from Arvo Part as Tintinntabuli. The method is generally a tonal-based approach. I didn't see anything in the forums about it so I'm hoping this post isn't a duplicate. My understanding of it is as follows: 1. In a key, say B minor, we have a melody line that could be: (Setf pitches ‘(cs3 d3 g3 e3 fs3 b3)) This would be the M-line (melody line) Underneath we would have one or more T-lines (tintinntabuli). Each would consist only of the B minor triad. The pitch of the triad in the T-line corresponds to the pitch in the triad determined by the rule established by the composer. This can be inferior or superior. So I could have a T1 line that is comprised of the first inferior diatonic pitch the pitch in the M Line and a T2 line comprised of the second inferior diatonic pitch. So the T1 line would only consist of B, D and F#. To do this manually would be: ;; M1 Line (Setf pitches ‘(cs3 d3 g3 e3 fs3 b3)) ;; T1 Line (Setf pitches ‘(b3 b3 fs3 d3 d3 fs2)) What I’m trying to do is automate the creation of the T1 or T2 lines parametrically. Any advice on the best approach to this? Thanks! Tom Tolleson
  15. Actually, what I'm finding works well is just to load the MIDI into Musescore and use the Midi Entry function under the Tools menu in OM to record the pitches. So my workflow is fine.
  16. Here you go! Tom progression.mid I have a lot of other files to load though as I output them from Musescore and other applications. It seems to be a bit of a sticking point in my workflow that it's not working with any of my MIDI files. Here's a file I currently need to convert to OMN. track1_percs.mid
  17. Hello! Sorry I'm just seeing your question. I'm using version 2.2.26813 Executing the lines (midi-to-omn "/Users/tom/intermediate/midi/progression.mid" :instrument 1 :bars '(1..8) :quantize '(1 2 4 8)) Returns this error in the listener: > Error: There is no applicable method for the generic function: > #<standard-generic-function mts-track-info-tempos #x302000A6CCBF> > when called with arguments: > (nil) > While executing: #<ccl::standard-kernel-method no-applicable-method (t)>, in process Listener-2(9). > Type cmd-/ to continue, cmd-. to abort, cmd-\ for a list of available restarts. > If continued: Try calling it again > Type :? for other options. 5 > Hope that helps! I'm still unable to save MIDI to score. Thanks, Tom
  18. Thanks so much Stephane! I wasn’t aware of the get-span and length-span options. This is a huge help! Tom
  19. Hello! I’m trying to span a list and produce new lines of pitches, by interval (or otherwise) and with varying rhythmic values but have all the lines end on the same beat in the same bar. To explain more specifically - I'm trying to span a list and perform an operation on each item in the list more than once. For example, if I have two melodic lines (variables named "pitches" and "basspitches") they might look something like this: (setf pitches '(fs3 e3 gs3 b2 a3 fs4 d4 b5 e4 gs4 fs4 gs4 cs4 fs4 b3 e4 fs4)) (setf basspitches '(fs2 cs3 a2 e3 fs3 d3 b3 gs3 cs4 e3 cs3 fs3 d3 b3 gs2 fs2)) I can play them together. However, if you notice, the first list “pitches” has 17 elements and “basspitches” has 16. But - I want them to end at the same time. So… I can have basspitches play with a variable “basslengths” set to 1/2 and then create an explicated lengths list for the “pitches” list called “lengths” as such: (setf lengths '(1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/4 1/4 1/2 1/2 1/2 1/2 1/2 1/2)) Now they end at the same time. Great. However, this is a very clunky way to go about things. Additionally, this kind of primitive solution will not scale if I add functions to it. For example - If I use interval-scale2 to generate two additional voices (one based on the list “pitches” and one on “bass pitches”) my solution above won’t work if I want interval-scale2 to product one new pitch per 1/2 beat (one new pitch per item in the list) and another list to produce pitches at a 1/8 interval (or over varying intervals). The reason it won’t work is (obviously) because I’m spanning the “pitches” and “bass pitches” lists and operating on each item once. My question is - how do I span lists of pitches, producing new lines of pitches with varying rhythmic values and have all of the voices end on the same beat in the same bar? Thanks! Tom Tolleson
  20. Thank you! There must be something weird on my end. It's happening in Macs using both Catalina and Big Sur. I'll post back if I find the cause. Thanks again!
  21. Hello again! So I've been working with this midi file and still getting no luck. I used miditocsv converter in python and I can see the tempo information there as 500000 ms (120bpm). Still having no luck and receiving the same error. I'm attaching both files. One possible solution - converting the MIDI to OMN in Python or LISP? I just need the pitch and duration (including rests) information. I'm happy to attemp this but I don't want to reinvent the wheel if there is already a wheel available. I'm attaching my files again. 0, 0, Header, 1, 2, 480 1, 0, Start_track 1, 0, SMPTE_offset, 32, 0, 0, 0, 0 1, 0, Time_signature, 3, 2, 24, 8 1, 0, Tempo, 500000 1, 0, End_track 2, 0, Start_track 2, 0, Title_t, "Lead" 2, 0, Program_c, 0, 80 2, 0, Control_c, 0, 7, 100 2, 0, Control_c, 0, 10, 64 2, 0, Note_on_c, 0, 55, 70 2, 0, Control_c, 0, 1, 70 2, 2375, Note_off_c, 0, 55, 0 2, 2885, Note_on_c, 0, 53, 72 2, 2885, Control_c, 0, 1, 72 2, 3340, Note_off_c, 0, 53, 0 ... so on and so forth (see complete data in attached file)... 2, 171816, End_track 0, 0, End_of_file pacing.mid example_converted.csv
  22. Thanks! Here you go. It was generated from Ableton. I'm also including a MusicXML of the MIDI pitches from Musescore if that reference is helpful. MIDI vocal pacing.mid VocalpacingXML.musicxml
  23. Hello, I have a MIDI file which I'm able to play fine in OpusModus. When I attempt to use File > Export > MIDI to score I receive the following error: "The operation couldn’t be completed. The value NIL is not of the expected type (OR CONS INTEGER)." I've tried a variety of export settings, all result in the same error. My goal is to import a score in some format (MIDI, MusicXML) and convert to OMN. Thank you, Tom
×
×
  • Create New...

Important Information

Terms of Use Privacy Policy