ddg.mono to make a melodic midi phrase containing polyphony into monophonic midi

    Aug 05 2011 | 2:22 pm
    I have a midifile containing a melody with certain parts of it being polyphonic.
    I want to turn the midifile monophonic in a similar way to playing the polyphonic midi with a monophonic synth, with last/low/high priority etc i.e ddg.mono

    • Aug 05 2011 | 5:00 pm
      Should I use borax and through or peak to find highest or lowest note if more than one note held down?
    • Aug 07 2011 | 11:55 am
      I kind of thought this is what ddg.mono was doing right out of the box,
      do I need to make a lind of complicated patch to achieve this, or am I misunderstanding?
      Thank you
    • Aug 07 2011 | 4:18 pm
      Hi flowdesigner
      I had a bash at this, with somewhat limited success using [borax], [zl group] and [zl sort 0]. I guess the degree of success depends on how dense the polyphonic texture is, and how regular/irregular those textures are. It might help if you posted an example patch, cos we're kind of in the dark here.
    • Aug 08 2011 | 12:18 pm
      How are you getting the note data out of your MIDI file and into the Max environment?
    • Aug 09 2011 | 1:15 pm
      Currently midi is getting into max with notein from a midifile playing from a midiclip in Live session view.
    • Aug 09 2011 | 1:45 pm
      So why aren't you just using ddg.mono right "out of the box"? If you look at its help file, you can just basically remove the kslider and integer boxes, and just connect the notein right to the ddg.mono. I haven't done this, but should work I would think?
    • Aug 12 2011 | 9:42 pm
      That is what i did
      but that did not work, I recorded the midi stream after the ddg.mono in a new Live midi clip, and polyphony was still occuring
    • Aug 12 2011 | 11:25 pm
      Patch looks fine to me, not sure what's up....
    • Aug 13 2011 | 12:20 am
      You could try inserting [poly 1 1] after ddg.mono, like this
    • Aug 16 2011 | 8:55 pm
      I'm late to this thread, but I have an abstraction I call cbm.mono (after ddg.mono) that takes a MIDI stream, and makes a MIDI-compatible mono stream (last note priority.) It can be found here: http://www.xfade.com/max/examples/
    • Apr 10 2012 | 10:20 am
      Thanks, Chris
      but is not dd.mono also meant to do this?
    • May 27 2012 | 5:17 pm
      anyone able to make this work with noteout and basic objects patched in a smart/simple way?
    • May 28 2012 | 2:46 am
      I just did some testing with this, and even changed the code to force a note-off at every note-on (a requirement for dealing with an intrinsically polyphonic synthesizer). Even with some code changes, we run into a difficult issue: the serial nature of MIDI notes.
      For example, if we hit a chord stack on a keyboard containing C, E, G, D, the notes aren't sent to the notein object as a chord stack; it is sent to notein as four individual notes in some arbitrary order. Let's assume that the order is as shown (C, E, G, D). ddg.mono sees each note come in, stores it and sounds it in that order (if Last Note priority is chosen). When you release the notes, the note-off messages are also sent serially (in some arbitrary order), and may also sound because previous notes are being released from the storage stack, and a new note is becoming the 'current' note.
      In doing some basic testing with Live, it appears that chord stacks are sent in low-to-high note order. Thus, even with changes to the code to support polyphonic synthesizer input, you get faux polyphony as the individual notes are all received, sounded, stored, then potentially re-sounded on key release.
      Eliminating this problem would either require some sort of speedlim-like behavior, or receipt-time encoding/decoding - both of which are too fragile to consider at this time. If someone were to have a good theoretical alternative, I'd be willing to try to code it up.
    • May 29 2012 | 10:26 pm
      OK - so I'm working on the update, but you can check out this thread:
      I've got a javascript object that will do what you want it to do, and is a mockup of what I hope to eventually put inside of ddg.mono.