Support

If you have a problem or need to report a bug please email : support@dsprobotics.com

There are 3 sections to this support area:

DOWNLOADS: access to product manuals, support files and drivers

HELP & INFORMATION: tutorials and example files for learning or finding pre-made modules for your projects

USER FORUMS: meet with other users and exchange ideas, you can also get help and assistance here

NEW REGISTRATIONS - please contact us if you wish to register on the forum

Mono display from a poly modulation source

Post any examples or modules that you want to share here

Re: Mono display from a poly moduation source

Postby KG_is_back » Thu Mar 22, 2018 5:18 pm

tulamide wrote:
KG_is_back wrote:This could also be adapted to get the lowest voice ID, but I can't quite figure out how at the moment.

When doing 2^x, every voice id has its own bit, which would scream for bitwise logicals, no?


Yes, that is another way of interpreting it. However, it should theoretically work with any base, not just 2.

martinvicanek wrote:Since the Combiner prim works with floats, you have only 23 mantisa bits to work with. So you would need two floats to fully encode which of the 32 voices are active.

Yes that is true. However, in this example we do not care which voices are active. We only care for the highest voice aka the highest bit. When more than 23 voices are playing, the lower ones get rounded out in the floating point logic. We only care about the order (aka the exponent). The mantissa is irrelevant. I fact, the algorithm can be heavily optimized by simply not calculating the mantissa when doing the power and log functions. It would effectively boil down to two bitshifts, some bitmasking and float<->int conversion.
KG_is_back
 
Posts: 1196
Joined: Tue Oct 22, 2013 5:43 pm
Location: Slovakia

Re: Mono display from a poly moduation source

Postby adamszabo » Thu Mar 22, 2018 5:41 pm

Its such a coincidence that I am having a similar issue, even though I have a beta version with the "Min/Max Poly to Mono", which you can easily solve this problem, I am having an issue with it so I have to look for alternative methods. I had my own crazy hack method from a while back, I dont even remember how it works but it works ok. The point here is that we need to somehow get the ID of the very last key we pressed so we can grab 1 single channel even from a poly signal so we can use it for mono modulations or graphs or whatever. Now in a synth we also have to keep in mind that we could have unison enabled or long release times and when the voices run out the new notes that are being stolen have to act as the last key pressed.

I like the simplicity of Martins and KGs method but in my project I demonstrate that they dont work with stolen notes.

I have 2 unison enabled and a maximum of 6 voices so you can have a maximum of 3 different notes. The top code is mine, the middle is Martins and the bottom is KGs. To very easily see whats happening we will grab the latest pitch value from the poly voices, which will show in red in the channel readers. Now start pressing each key one by one, Q, W, E, R, T, Y, U, I etc... Mine repeats the correct channels and chooses the last key while the other seem to be missing a few. I actually dont really like my method its a bit complicated but maybe it gives some ideas as to how I think it should be!
Attachments
most recent voice test.fsm
(30.23 KiB) Downloaded 928 times
adamszabo
 
Posts: 657
Joined: Sun Jul 11, 2010 7:21 am

Re: Mono display from a poly moduation source

Postby tulamide » Thu Mar 22, 2018 11:36 pm

KG_is_back wrote:
martinvicanek wrote:Since the Combiner prim works with floats, you have only 23 mantisa bits to work with. So you would need two floats to fully encode which of the 32 voices are active.

Yes that is true. However, in this example we do not care which voices are active. We only care for the highest voice aka the highest bit. When more than 23 voices are playing, the lower ones get rounded out in the floating point logic. We only care about the order (aka the exponent). The mantissa is irrelevant. I fact, the algorithm can be heavily optimized by simply not calculating the mantissa when doing the power and log functions. It would effectively boil down to two bitshifts, some bitmasking and float<->int conversion.

I think, Martin's answer was more headed towards me, to explain why 2^x simply as a bitmask for all IDs would fail with more than 23 voices. For your approach it indeed doesn't matter much.

Adam, your solution is very precise. When I read your descriptions, I instantly thought of somehow involving MIDI. And indeed you do so, which is very clever. I don't understand much from the modules, but the result is convincing!
"There lies the dog buried" (German saying translated literally)
tulamide
 
Posts: 2686
Joined: Sat Jun 21, 2014 2:48 pm
Location: Germany

Re: Mono display from a poly moduation source

Postby martinvicanek » Fri Mar 23, 2018 7:39 am

Adam, it seems to me that the "missing notes" are blocked by the 6 voices limitation in the midi2poly settings. Your method captures those notes via the midi2mono bypass.
If you want to capture the last pressed key regadless whether the note has actually been played, why don't you go Ruby?
User avatar
martinvicanek
 
Posts: 1315
Joined: Sat Jun 22, 2013 8:28 pm

Re: Mono display from a poly moduation source

Postby Spogg » Fri Mar 23, 2018 8:48 am

Another great solution Adam, and I couldn’t catch it out!

Thanks for sharing this and I’ll add it to the first post.

Cheers

Spogg
User avatar
Spogg
 
Posts: 3318
Joined: Thu Nov 20, 2014 4:24 pm
Location: Birmingham, England

Re: Mono display from a poly moduation source

Postby adamszabo » Fri Mar 23, 2018 9:03 am

martinvicanek wrote:If you want to capture the last pressed key regadless whether the note has actually been played, why don't you go Ruby?


Because I have no clue how I would do it in Ruby, I will leave that to the experts :lol:
adamszabo
 
Posts: 657
Joined: Sun Jul 11, 2010 7:21 am

Re: Mono display from a poly moduation source

Postby martinvicanek » Fri Mar 23, 2018 1:45 pm

From the top of my head:
Code: Select all
def event i,v
   msg = v.to_array
   if msg.size == 4         # it is a channel message (as opposed to sysex)
      if msg[0] == 144      # note-on event
         output 0, msg[2]   # MIDI note number
      end
   end
end
Supply MIDI input
At the (integer) output 0 is the last struck MIDI note.
User avatar
martinvicanek
 
Posts: 1315
Joined: Sat Jun 22, 2013 8:28 pm

Re: Mono display from a poly moduation source

Postby tulamide » Fri Mar 23, 2018 2:13 pm

martinvicanek wrote:From the top of my head:
Code: Select all
def event i,v
   msg = v.to_array
   if msg.size == 4         # it is a channel message (as opposed to sysex)
      if msg[0] == 144      # note-on event
         output 0, msg[2]   # MIDI note number
      end
   end
end
Supply MIDI input
At the (integer) output 0 is the last struck MIDI note.

Stop it, Martin! Now you're also a Ruby expert. That is so unfair! :mrgreen:
I love that you follow the conventions of writing Ruby code. However, this code is not sufficient. I made a few examples somewhere here on the forum (I'm not sure, but I think it was for Kortezzzz), that would do the trick. Here you don't take Note Off into account. Also, in Adam's original fsm you see that it captures the end of the playing note as given by the envelope (which you wouldn't capture with midi, even with note off)
"There lies the dog buried" (German saying translated literally)
tulamide
 
Posts: 2686
Joined: Sat Jun 21, 2014 2:48 pm
Location: Germany

Re: Mono display from a poly moduation source

Postby martinvicanek » Fri Mar 23, 2018 3:14 pm

tulamide wrote:Now you're also a Ruby expert.

Far from that! Oh, I realize that Adam was asking for expert help, so it was inapropriate for me to repond. But I did leave a grace period of almost 5 hours! :lol:
Your remarks about Note Off and release are correct of course, I am aware. I thought the task was simply to extract the last keystroke. Obviosly it was not. I should probably shut up now. :roll:
User avatar
martinvicanek
 
Posts: 1315
Joined: Sat Jun 22, 2013 8:28 pm

Re: Mono display from a poly moduation source

Postby tulamide » Fri Mar 23, 2018 5:12 pm

martinvicanek wrote:
tulamide wrote:Now you're also a Ruby expert.

Far from that! Oh, I realize that Adam was asking for expert help, so it was inapropriate for me to repond. But I did leave a grace period of almost 5 hours! :lol:
Your remarks about Note Off and release are correct of course, I am aware. I thought the task was simply to extract the last keystroke. Obviosly it was not. I should probably shut up now. :roll:

I hope you didn't misunderstand me :oops:
I meant it, when I expressed my surprise. It was Ruby code, it was well written, and it was unexpected. So, my reaction was a positive one (and a bit of jealousy, because you seem to be a Hans Dampf in allen Gassen :ugeek: )

My text was not meant to demean you, in no effing way!!! Also, maybe it is what Adam looks for, he might not be interested in getting notified of note play being ended.

If you allow me, I would like to point out, that you don't need to exclude sysex data specifically. The format is different, and therefore the first entry of msg will be a string containing the sysex data. The comparison of a string with a number will never be true, so it won't affect the interpretation of the rest of the code.
"There lies the dog buried" (German saying translated literally)
tulamide
 
Posts: 2686
Joined: Sat Jun 21, 2014 2:48 pm
Location: Germany

PreviousNext

Return to User Examples

Who is online

Users browsing this forum: Google [Bot] and 36 guests

cron