Closed Mrugalla closed 1 year ago
MPE's default pitch bend sensitivity is +/- 2 semitones for the Master channel (ch 1) and +/- 48 semitones for the Member channels (typically ch 2-16). Please refer to clause 2.4 of the following document. https://d30pueezughrda.cloudfront.net/campaigns/mpe/mpespec.pdf
Vital and Surge XT correctly implemented this spec and PolyPortamento followed it. Note that the bend depth setting on the Vital and Surge XT UI is not effective in MPE pitch bend sensitivity.
Are you sure? Because during all my tests when developing my plugin Xen it always appeared like despite having activated MPE mode on the synths they were using the normal pitchbend range, which confused me as well, because I have heard of this MPE-related pitchbend range. In Serum it's also +-48 semitones and you can change the MPE-Pitchbend Range to any other value, but it never seemed to make a difference. Or are those different "types" of pitchbend values than simply adding pitchbend to each midi channel?
The default pitch bend sensitivity of +/- 48 semitones for the Member channels seems eccentric because typical default pitch bend sensitivity implementations in non-MPE mode are only +/- 2 semitones. However, in the case of the middle C (60) MIDI note, +/- 48 semitones imply covering MIDI notes from 12 to 108. Based on this spec, PolyPortament enables portamento over 88 kyes.
So, I would like to ask a few questions.
(1) Does PolyPortament work in your environment without XEN?
(2) As I wrote in the blog, MPE status of Vital has a bug. It is not correctly saved DAW project file. At the project start time, MPE ENABLED is displayed, but internally it is not enabled. Are you aware of this?
(3) Could you let me know XEN requirements for MPE MIDI channel 1? How XEN use channel 1? PolyPortament assumes MIDI channel 1 is not used because it is useless. So, channel 1 implementation is short-cutting. However, if it has practical usage, it must be supported. The solution may be pass-through channel 1 events, but clarification is needed.
(1) yes. however only monophonic inputs, because idk how to seperate midi channels of individual notes in cubase. check out my plugin's autompe class for a solution to this that enables the user to input non-mpe inputs :)
(2) i was not aware of this bug. it would explain why i was confused a lot of times when i just couldn't find an issue.
(3) i use all 16 channels. but i still have to further investigate if that causes any problems
ok i just opened a session and also noticed that vital outputs different melodies depending on if it just opened, or if i manually reselected "mpe enabled". man that's terrible. i'm not sure if i wanna keep on working on mpe features :/ as if anyone wanna put up with all this mess
How about Surge XT ? :)
Ok, Surge XT works perfectly fine when I put my Xen-plugin to a pb range of 48. A little bit too fine actually, because my Xen plugin still utilizes the whole range from channel 1 to 16 and you said that channel 1 has a completely different pitchbend, so in theory every 16th note should be horribly off now. How can that be explained? Could it be that they just use all channels? or are my ears too shitty to hear the issue? I am so confused now.
i was about to test if now with the pb range of 48 i can use polypotamento with xen together but then suddenly the issue with the bursting noise re-appeared:
bro, i just rewrote my code to only use the midi channels 2 to 16 and a default pb range of 48 and it indeed made everything much smoother. thx for the help :) now you just need to fix your random audio burst problem and i can finally check out how xen sounds with sweet pitchbends <3
I got it. Pls wait a moment.
Could you try this?
the bug still exists in this build. here is the link to an unlisted video that will be there for you once it has uploaded: https://www.youtube.com/watch?v=cpcVdn2L1YI
How about this? The audio output port is completely removed, so it never generates noisy audio.
yeah that seems to have solved it. i instantiated 10 instances and it never happened again
It is a good news. Thank you for your cooperation. Do you have further XEN requirements for PolyPortamento?
Xen and PolyPortamento still don't work together for some reason. I might be misunderstanding something about the setup that is required. but I made a video in which I midi monitored what happens: https://www.youtube.com/watch?v=IJOsYqGeyOw
edit: video has not uploaded yet but will be there soon
I got the issue. However, it has a deep root. I have asked a question to the Steinberg Forum. Please wait a moment.
P.S. I downloaded XEN for investigation however, GUI does not appear. Xen.vst3\Xen.vst3\Contents\Resources contains moduleinfo.json only. Please check.
Xen has no GUI indeed. Don't you use a DAW that has a default view for the parameters?
It is definitely not a problem if it is your intention. I'm using XEN through DAW default GUI.
I'm currently rewriting my plugin template so the plugins that I make in the meantime are mostly just GUIless projects for simplicity reasons, but I might make one the next time I pick up the project. There is still a lot of potential, like adding support for that "note expression" thing in Bitwig. Are you planning on adding stuff like that to pp?
PolyPortamento is a tentative solution. MPE synthesizers (or DAW MIDI editors) should support this slight functionality.
I’m also interested in microtonal and xenharmonic, especially real-time note-based tuning. However, when I designed the current version of PolyPortamento, I did not expect the combination of MPE pitch bend-based xenharmonic and pitch bend-based portamento. :)
It seems to me, VST SDK has a technical and/or political issue to support this combination. However, I would like to solve it if there is a technical possibility.
Can you describe the problem to me? Maybe I have an idea. Cause I assumed that our plugins work in a rather similiar way. We both just take the input notes and add pitchbend based on that, right? I just wondered why it was not like a continuous stream of pitchbend data coming from pp
In this case, PP must terminate pitch bend change from XEN, then create outgoing PP-based pitch bend changes to synthesize. However, VST SDK (or DAW) automatically forwards incoming pitch bend messages from XEN to the PP MIDI output bus. https://forums.steinberg.net/t/how-to-suppress-midi-pitch-bend-change-message-output/871935
I got an idea. Pls wait a few days.
How about this? It works with Xen Pitchbend Range 48, Auto MPE Off, and Rescale.
Hey, I finally understood why it didn't work the whole time. The Auto-MPE feature uses a ringbuffer logic for splitting the polyphonic inputs into monophonic voices of each channel between 2 and 16, but that makes the pauses between each note extremely large on each channel, so your polyportamento plugin ofc doesn't have the chance to glide the notes like that. i'm not sure yet if i will be able to find an alternative implementation for it, but i'll let you know if i do. until then here is going to be my video where i test the plugins without auto-mpe like you said, revealing maybe the last polyportamento-bug, which is just that wether or not it glides is a little inconsistent when a noteOff is really close to an upcoming noteOn
I think two issues have arisen. (1) Pitch shift should also be applied to the first note of time continuous notes. (2) Support of Xen auto MPE mode.
If so, my answers are: (1) It is not a bug but the specification of PolyPortamento :). However, some MPE synthesizers support such an option, so it is easy to add this mode. (2) I think the auto MPE mode is very convenient. However, in the case of portamento, note-to-note relationships between two chords must be defined. Do you have any idea about the automatic detection of relationships? How about triad and tetrad? A chord may omit and/or add a note and notes may be rotated. I tried many note-to-note relationships between IIm7 and V7(9) (also IIm7-5 to V7(b9)) but did not reach any conclusion. (For such experiments, I developed PolyPortamento.)
(1) no i meant that sometimes there is no consistency in the way it handles close notes. for example sometimes it happens that a noteOff comes and then on the same sample index a noteOn after that. it should not glide then because the other note aleady ended. but there's also an even worse case where i purposely made all notes a little shorter to avoid the noteOns to trigger a glide by making them further away from the noteOffs, but if this distance is pretty small it can still trigger a glide sometimes. I think something about your blog processing might be weird.
(b) i have not found a solution to that, no. that's why i just made it with a ring buffer. it's a bit unlogical from a human pov when seperating notes into monophonic sequences, but at least it's like a universally working solution, regardless of the rhythms you input. cause if we started doing things like detecting chords and which notes are played at the same time and all that, there'd be a million edge cases with things like slightly inaccurate noteOns due to keyboard players or humanized inputs in general, or arpegios within a chord and all that. not sure if a solution like that even exists. if it does then i'd be happy to replace my autoMPE feature with that tho
A tentative solution for a short interval between two chords is to separate MIDI channels. Pls, refer example file in the PolyPortamento zip file. The first portamento use channel 3, 5, 7, 9 then the next use 2, 4, 6, 8.
I think the solution deeply depends on DAW MIDI implementation, especially time resolution. I'm not sure whether it is possible or not, so I will investigate DAW this upcoming weekend.
nah i think at this point it's our responsibility again and not the DAW's one. i mean cubase at least, supports sending around MIDI on all channels from one track to another smoothly, which is surprising for such an antique DAW, but welcome. for now I think we can both be pretty happy with the results. Your plugin works without mine and mine works without yours and there's a very good reason why it doesn't work together yet. Maybe we'll come back to it some other time with new ideas :)
OK. I have released v1.2.0 which solves the close notes issue.
Unfortunately, bad news. For support of Xen Pitch Bend Change input, some trick is used to avoid a limitation of VSD SDK. This works with Reaper v6.82 but not works the latest v6.83. This does not mean it fully worked. The ultimate solution may be to merge Xen and PolyPortamento :)
Anyway, thank you for your collaboration and useful comments.
cubase artist 9.5, windows 10.
plugin produces noise on 1 channel the moment it's inited. make sure to clear the buffers even if it's meant to be a midi plugin only!
i couldn't get it to work together with my new Xen plugin. I tried to route midi from xen into polyportamento and then into vital, but polyportamento messed up all the pitchbends that were created by xen in the process of converting the input midi to a different xen scale. i think it might be because the pitchbend ranges are not matched between pp and the other plugins. would be cool if you could add a parameter for that.
i'll try it again without xen soon :) maybe it's just a bit too much to run them in series