Essential- choke / exclusive/ voice note groups
-
Hey @Christoph-Hart ,
There is an essential feature currently missing from HISE, which is found in every other sampler. It goes by different names: choke group, exclusive group, voice group... It is the one used by a single note to mute another one (open/close hi-hat).
I was the wondering if you would please implement it into HISE?
This is what I think would be great:
- Any number of voice/ choke groups (at the very least 16)
- Individual notes in a sampler can be assigned to any voice group
- Decay time setting for each individual voice group (for how quickly a note should fade out when muted by another note)
I know that you provided a coding solution a little while back, but I really think it is more complicated to implement that it should be. This is something that is essential, and I feel it should be a part of the HISE interface. This is a must-have feature for anybody making a drumset.
Could you add this to HISE? Pretty please
Thank you!
-
This is just MIDI processing so a script is the correct solution. Maybe a hardcoded script though would be good but you can bet there will be people who want more features adding to it :p
-
Yes Dave is right you can easily script one - stuff like this is exactly what the scripting engine is made for.
If you search Choke here in the forum you should get some snippets to get you started.
-
https://forum.hise.audio/topic/437/choke-groups
I struggled with this script for a while... only to find out that I was placing the onControl scripts in the onController slot. Silly me.
It only takes a moment or 2 to implement. -
@Christoph-Hart Correction, you can easily script one. Me, not :) I can easily pull my hear over it. I can easily play drums, but scripting...no.
I know that most things here seem trivial to you, but for someone like me is like trying to understand Chinese. I know that with scripting you can make anything. But, you need to have proper background to do so. I am not completely new coding. I've tinkered with web platforms of Joomla and WP and managed to get things going. Here, I am lost.If you don't mind, I'd like to give you some feedback and I hope you don't take it the wrong way. What you are doing is incredible and you are obviously of a brilliant mind in every aspect. However, I feel that the overall adoption of HISE platform will depend on how use-friendly you make it, not for coders, but for non-coders. People like me, that are good at what we do (recording, production, playing...whatever) would like to utilize those skills through HISE without having to first get a computer science degree. Microsoft and Apple became mainly what they are because for the general folk, they replaced typing lines of code with a few clicks of a mouse. I always knew that I could theoretically make any plugin if I had a computer science degree. I was under the impression that I would be able to make a simple instrument in HISE without one.
I agree with what you mentioned in another post, that you can't pre-program everything that anybody would possibly want. However, this particular feature is standard on every sampler (even the terrible one for the BeatBuddy) and it would greatly help those of us who want to make drum sample libraries. I, like everyone else doing drum instruments, expect to see this feature already present in HISE.
And yes, I tried the script and it is not working for me. By the time I figure it out, I could likely put together several drum sampler instruments.
Thanks for reading
@dustbro Would you mind elaborating where exactly you placed it? I can only find one place to insert code for everything.
-
I‘ll see what i can do. A hardcoded choke script might be generic enough to justify becoming part of the codebase but there are many feature requests that I have to prioritize so if people can do things without my assistance it is always more efficient, and pasting a code snippet to a sampler, changing the note number for the choke notes and press F5 should be doable without a computer science degree (not that I wouldn‘t take your point of view serious, in contrary if this step isn‘t as easy as I think, I have to fix this because that is the whole purpose of a scripting environment).
Let me just go over the snippet mentioned in the other thread and add the decay as parameter, then you can add it to the sampler module you want to choke for yourself.
-
So here you go, revised and ready to be pasted where you need it:
HiseSnippet 2020.3oc6Y0uabbaDeOIs0QaibR.RA5eR3TfbGfjhVqOr.DLx8shPsrE7oX2hf.Cpc4oiP6QdcWtx5RfQ6aPek5CP+i7nj2f1eC28tcOoyxmJpcKZ5gYE4RNyveb3vgCWcRrNPjjnicpr5oiGIbp7wt8FqLCZMfKUNG01ox8cOlmXDwrrlZNdDOIQD5ToxxGRMTY0Ubr+94utIOhqBDEM437BsLP7D4Poon0Q0+8xnnt7Pwoxgk3dm5GEnUszQ5Tfmkc2xYDO3B94hmxI1Vx0oxupSnzni6Y3FQhSkUZpCG2af90pL9egLQdVjfdw2oGTTVyc0QgDhoVcZMPFEdxj4chiSE2SJrBKmYE9b2ikgxosWXM9TaGrBIJaOprzsAO+xvaqEFdNkP2JYnCfPGlFwMyhLZ4HuCod1UpiTFgJQZFWd45+nv8ybOQZBFLe7tzbvKVndei27E+0b6zuuHvT.1Ub69G9vtRe+Ln7qc6IUB6NRKP9M12YujeofcnPIhIi5srm7m92+dxmEXvneZLWkLRmLih6IFJOUqHCRQieahnar3O8bZQtb6sz73410O+0cwbbtxziaRisdKMFpSUlY7NVdgWRlergslWrgUdeEaX4ECdyARUt4NrOysWPrbjonmrH2sFnuPvx5aFzj2zR+v8baoo8ZlMSDluQHOefo5taU6f07J09KkglAnYa6q4AGhDC6RdLyviOWXXOlMgY7VK8vQvGPYp9frtePsCJKRr77ywoIuUYx5+AWenBEA7wuUor8Zkw6q9JFqgh0HNF7KSX7nDMiyrZhqLqyDWJTLYelzvdM74YmIXizinnPhPF82XlVUZjEWZdhLglke22efU+C4vpljFKHcLfmvDJc54CXIX8EGWwLX.uTKCwXGoCr9qrvzXo5blYffozFwyTr.z6Y3.Nu7AXyXQhH9RQ081o1A8SUAV4zpmZYuZMuezigex9UOFqwXbHa.04SSGdlHtZM1ieLqZt8i56E7nTQ0Za3WqlUxebMaA8ifUTlM0xElb1WJI1AEbWTCCdYgdLaqZEcVR+zOXnZD8Z93DVZhvNw6qiYat4lLoB.POhVDFqSYgZ0WZXJAL+DWRUn3pYzDjqJspYNJjjM2dUaFdt1fmCfdBU3TaNS2uO7CFNjiFIrPcbtjbGrZmICugNrgd2zth0ueywcxPwDz.O6xL+lou8lBzHhRD+WsMhB5yzolo1o0dKVAdX3KzQoCEjDSFr0K4EsNaCeJHw61n3UZ7aEIvtLrYvN3IEFt7sEAT+Uy0Zl1HaJYYt8cB1nOyciP4g+zAHHAHkfBcxiGi.BAbZ4fr61HDWP+YpWDO1H6KCj.wiYjqz2bTuNk0X.m11hNsxkyNOe5YWfQjnyjQH8FVrfmfHMSEexDhBwzX5.UsjMs7H0HjbG.3OpMEzgfXDEpppz7kzPGl4sTf3bG8iZW6Fl4QoICJaOm3pWapk+MdWOpT+9KbXoEaw3khbebMSdtRGKlZ12f17NLaDJKwj8w5QXa7.4FC3FFB3OI39EBwHFE4ED1VcC6b1nXmqHzYpX9SV5PmXcTDMcv7c0Y6kxXZtcjKVUk0RrNNMAS8I7gCumMi.uEKiffrC.KwnVcjRZdFL.YbL4HiIs36Lc4pLSESpxsZmLygshllShq4GJSIgkyNpYrolb+7TS5EICEwNRj9w8bsgLbrlioov8SWU245B+o4BiS5OS2TekU7OxMyY5Zx+Wd5BJ+pt4mQdME3bRcmu8n1bCmRxJeJgo4HA19PKPUZKtDYNmkx0ptsEIWXziv8GmlHBZ1jeEhrA9I7yDQ4n1V224phAb85yb+FAbG31U7JKmfbrORcBkRfgdefM0rBt2t9qojxJZ3U0Mhq.CeRVRegrSyLRN2Db2xRRA39awyBtgxvvHwIZboL5xZS64OVOwHF0S9ChxYvOjWno5+05Io86KQKttrgINY.8igAjRoydeixn7dKxZ+ayJ5maFlj6atUPZDXfW5uWw0q0FOzq0Wf+zldnJcvSW5gd4P5gpzfdnJMIA1vmDxGB4SB4Cg7gP9jP9PHeRHeHjOIjODBBrEjYKu1fPQms75BB0NDDJZ.BEMAWjxgdIUCMCkR5EpjzJTHoSnRvEAcfZB3.2.xDpAfILC3RHF.FbsMXbau1fPQms85BB0NDDJZ.BEMAW6.F2wqMHTzYGutfPsCAghFfPQSv0tfwc8ZCBEc10qKHT6PPnnAHTzDbsGXbOu1fPQm875BB0NDDJZ.BEMAWOBL9Hu1fPQmG40EDpcHHTz.DJZBt1GLtuWaPnny9dcA8E66Xcxbq7mytM4B4+Tr2uvAhELOGnOYhCTN++eOne43A8tBh+vRdO0Cd+EDepy2GtuA3xK1Gx5c7YIVcBF6IGNJRzQcoHBmil+g+ZK5ySiLSasLHOVqziFnUxfxF0mKlrssDzm67ogwfqTWzxmW+4Bb+gxempeW8mHU3JEvLI9WzTb2+BMyc4525lAW6Yfr+23S2t7uL+zsOGWfFWw3XNbToXJ3xO8zowABfDkB2WkhyrDElI68sn2y9lopP6K+C7KuSe58J4c5OoyOHiwPdPr9UAY4QS9xejsELuU1+ILq5dL8NyeRxyjsA4FJeUP.Yr2.Vm4KwCuyRr8cVhctyRr6cVh8tyR7n6rD6eKRPei4FoF8vrsdngS5XuzRkJcTzIOVubm+IMijFhC
Import the snippet, select the script processor and copy it to the clipboard (Ctrl + C), then paste it into every MIDI chain of each sampler, adjust the values in the comboboxes and the decay time).
-
@christoph-hart Thank you. I will try to locate another place where the code can be inserted, as where I was putting it is not working. It compiled correctly.
Copy+paste is not hard. What is hard is figuring out why something is not working, when it should. It would probably take you a few moments to work that out, but behind that is years of study and practice.
From my experience with software developers, I come to realize that the better the developer, the less they can relate to an average user's experience, since the specialized knowledge gap is more significant. For one person that knows how to do something through scripting, there are at least 1000 that don't but would like to achieve the same goal. Imagine, when mixing music, if every time you needed to raise the volume of a track you had to write a few lines of code. No music would ever be made. I am sure the paint feature you devised is a fun and easy for you to use, but if Adobe made that approach with products like Illustrator, they wouldn't sell a single copy and probably wouldn't exist as a company.
My advice (and hope for future development of HISE) is for you to approach the scripting as a last resort for HISE users. I think it is excellent that the powerful scripting engine is available when needed, but I personally wish never to have to touch it. It would be great to have all the essential and main features the other samplers have (and then some), with scripting being there for advanced configurations. The easier it is to do things visually, the quicker it is, the more intuitive the system is, and the better the user experience is, ultimately the more extensive the adoption of your platform will be.
I hope this helps shed some light from a different angle and it is by no mean meant to diminish anything you have done or are doing. I am very greatful that you have created this project.
Thank you.
-
Dear Goran,
Thanks for your comprehensive feedback!
I think you touch some important aspects regarding the user-friendliness of HISE. I am currently working on updating the docs to make the initiation to HISE more accessible to newcomers and to provide a broad overview of its features including pros and cons.
This also includes a thorough introduction into its architecture (to get a better insight, why something worked or not.. :) . sidenote: take a look at MVC for the decoupling of controller: 'choking-script' and model: 'samplemaps' ) and the (
scripting
) effort one would have to stem to come to a decent result.Regarding this, I must say that I don't think that a no-scripting-only-plug&play approach will yield products, that can fulfill the needs of the diverse projects that can and could be made with HISE. IMHO the versatility of scripting is a key feature of a Plugin-VSTi-IDE that not only wants to clone existing approaches but to extend the general capabilities of building virtual instruments.
Despite that, I think that you're absolutely right in suggesting to make the average user's experience as simple and powerful as possible. That's what good software design is about, eh? Hmm, with scripting in mind that would imply to somehow lower the entrance-hurdle to get going. Do you have any suggestions what would/could help you in this process?
All the best,
d -
@dominik-mayer Thanks for your reply. I am glad to hear that you are working on more information regarding the usage of HISE. In the meantime, I am combing through the existing documentation to familiarize myself better.
Just to point out- I was not at any point suggesting that the scripting feature of HISE should not be available or that it is not important. To the contrary. I love the fact that it is there. What I am saying is that for simple, everyday tasks, the scripting should not be needed. What I am currently working on is a super-simple interface for a drum sampler, that mainly features mixer sliders for individual components with mute/solo buttons. I am still trying to figure out the hi-hat choke through scripting and signal meter...
Before I make some suggestions for improval, I want to state that there are so many things in HISE that I am absolutely delighted with. What @Christoph-Hart has built is mind-boggling.
I think that the general approach should be: what is the easiest, possible way for a user to achieve a particular task? Then focus on setting it up. When you think it is done, ask yourself: "Could this be achieved in an even simpler way?" Then refine. I love software that is intuitive and I generally figure things out without having to read a manual. I love features and deep customization, but to do it without having to script.
It is challenging to jump out of your skin and try to see something from somebody else's perspective that doesn't have your level of expertise. I know.
Compiling of HISE: once everything is setup the way it should be, it happens in a couple of minutes. However, setting it up, figuring out what is wrong when you not a software developer can take a day. I encourage you @Christoph-Hart to post updated installers more often. That extra 10min on your behalf will save hours and days for users and help expand the user base. Again, easy for you, quite challenging for most other people.
For example support for vector graphics. Currently, it is an awfully difficult way to implement it. I have to convert an SVG using some tool in JUCE, then strip some tags, end up with inferior monochromatic vector made up of numbers that mean nothing to me. Import into HISE, then mess around with Paint scripting trying to rebuild what I had just undone...crazy! The way it should be is: Add graphic-> select SVG file-> DONE! There is absolutely no need and justification in my mind to jump through these additional hoops of undoing something that was done, just to rebuild it using lines of code. Not practical and makes no sense. If I can simply upload and use an SVG graphic on my website, I don't see a reason why a sophisticated piece of software like HISE should not be able to do that. No need to have all the graphic tools of Illustrator built into HISE- just need to support a simple SVG import. Done.
Loading a custom font: click, browse to font, select-done. Then, when selecting the fonts for text, the fonts that are most likely going to be supported on end users' machine and those embedded should be separate from fonts only available on the local machine.
Currently, you have to know about it by reading the manual, then copy fonts into image folder (which is not explained in the manual), then write the script to make it happen.What I love in HISE are some of the interface design features. I love being able to click a button to create a knob, then have the settings on the right. That's great and that is the general approach I would love to see more of. I like the tooltips. It would be nice to have them in places where there aren't any.
It would be nice to have a widget for a meter that can be as easily hooked up to a module, like a slider. I am yet to get that working for me.File parsing: great, powerful tool. What could help is to remove option combinations that don't yield proper results. I had to do trial and error to find out what works, while if it only had selectable options that combined together produce proper results, it would be a lot quicker.
A lot of things that scripting offers could be made as buttons in a toolbar that could be visible/hidden, for example. A button on the toolbar to show midi notes being played, for example.
A very clever feature in scripting is the popup of available options when hitting esc. One step further would be to integrate some of those commands as drop-down options outside of the scripting environment.
The more options there are that can be achieved by clicking on elements and selecting possible scenarios, as opposed to scripting them, the better.Anyhow, I don't want to keep on rambling on. I will be making notes as I go along and make a dedicated post for where I see opportunities for improvement. I know @Christoph-Hart is one person and is busting his butt to accomplish work for many. For that I am grateful.
Thank you.
-
@gorangrooves said in Essential- choke / exclusive/ voice note groups:
Compiling of HISE: once everything is setup the way it should be, it happens in a couple of minutes. However, setting it up, figuring out what is wrong when you not a software developer can take a day.
It is handy for people who want to mess around with HISE to have a pre-built installer. But ultimately if you want to export plugins from HISE then you will need to have the correct compile environment set up anyway so at some point you will need to take a day to set this up.
The more options there are that can be achieved by clicking on elements and selecting possible scenarios, as opposed to scripting them, the better.
You'd think that would be the case, but it is not always so (especially for programmers) :)
For example support for vector graphics. Currently, it is an awfully difficult way to implement it. I have to convert an SVG using some tool in JUCE, then strip some tags, end up with inferior monochromatic vector made up of numbers that mean nothing to me. Import into HISE, then mess around with Paint scripting trying to rebuild what I had just undone...crazy! The way it should be is: Add graphic-> select SVG file-> DONE! There is absolutely no need and justification in my mind to jump through these additional hoops of undoing something that was done, just to rebuild it using lines of code. Not practical and makes no sense. If I can simply upload and use an SVG graphic on my website, I don't see a reason why a sophisticated piece of software like HISE should not be able to do that. No need to have all the graphic tools of Illustrator built into HISE- just need to support a simple SVG import. Done.
This I agree would be useful, although I know it's not a simple thing to implement.
Loading a custom font: click, browse to font, select-done. Then, when selecting the fonts for text, the fonts that are most likely going to be supported on end users' machine and those embedded should be separate from fonts only available on the local machine.
This would also be handy
Currently, you have to know about it by reading the manual,
You should read the manual anyway :p
-
Hey @christoph-hart,
I managed to get the open/close hi-hat script working from the HISE snipped you provided. The previous copied script I was trying did not work. One small step for you, a giant leap for me :) Thank you so much!I need to expand on this a little bit, as open hi-hat can be muted by either normal hi-hat sound or foot hats, and I was wondering if you could help, please. Following your example, I created an additional combobox and copied values over from the ones you created. I gave the combobox ID "trigger2".
I also added the following line to the oninit:const var trigger2 = Content.getComponent("trigger2");
What line of code do I need to add to have "trigger2" mute "target", in addition to being muted by "trigger"?
Thank you so much.
-
@gorangrooves
In @Christoph-Hart 's posted snippet above, this line of code identifies the key (or keys) that cause the choke to happen:if(Message.getNoteNumber() == (trigger.getValue()-1))
You would want to use the || operator (which means OR) to add another note number to this IF statement.
if(Message.getNoteNumber() == (trigger.getValue()-1) || Message.getNoteNumber() == (trigger2.getValue()-1))
This would make your IF statement run when trigger OR trigger2 is played.
-
@dustbro Thank you. That makes sense, but unfortunately, it doesn't work. I get the following error:
:! onNoteOn() - Line 3, column 106: Unknown function 'getValue'
Did you manage to get it working for you?
I also thought that just adding something equivalent to OR would do the trick, but the exact syntax is where things usually fall apart. -
@gorangrooves I'll check it tonight
-
There you go (not sure what you did wrong, but the error message is indicating that your component reference didn't work).
Now imagine this being a part of the official codebase. I would have either made it 100x more generic in the first place in order to support every possible use case (what if the next user wants 3 choke targets. What if the next user wants 3 choke targets and 2 choke triggers with different decay times?) Or it would be constantly updated and most likely breaking backwards compatibility.
HiseSnippet 2115.3oc6Y8taabbD+njt5nqwNw.I.4iKbJPnPsTH0+r.DLB+uhPsjELUraQQg6p6VJtPG2k8t8jEarQ6aPeIZeNZe.5GxiR9X+V6uYui7NJQaQED6VTGhgb2a2Yl82N6Lyt6wihz9h3XcjSokOdzPgSoOzs6Hkoey9boxY+VNkti6A7XiHhk1TiQC4wwh.mRkVbOpgRKuji8y2+UM3gbkuHuIGmmpk9hGIGHM4sNr1uRFF1gGHNVNn.2aVaeespoNTm.7rnaEmgb+y3mJNjSrsfqSoeV6.oQG00vMhXmRK0PGLpae8KTo7+TYr7jPA8PUmtPQoM2QGFPHlZ0oYeYXvQim2wNNkbOJ2JrXpU3SbOPFHmzdt03iscvxknn8nzBuI3UsH7pL2vyo.5VJEc.D5fjPtYZjQKGYcH0SuRsuxHTwRynhKW+WEt208Howu+rw6By.uXg5sMdyV7usa6d8D9lbvtjame861U56jBketaWoRXiHs.4SsOydF+bAaOgRDQF02PL428ieL4i8MXzONhqhGpimRwcECjGqUjAIuwuIVzIR7GdBsHWr8lZdzL656+pNXNNSY5xMIQVuk5CzIJyTdGKN2KIyN2PkYkaXo2V4FVb9f2LfToqFgcW2t9Qxgl7dRyb2ru9LAKsuoPSVSK7utkaSMEqYVKVX9Zg7z9lxaUYkcusWg1elLvzu71UrseaO3PDaXmyiXFdzoBC6grwLimZpGLD9.JS46k188VY2hhDIO8TraxqUlz9uGMTWQp0uNwV+dWFhABe9nWqX1dsx38keIiUWwpGEA9kwLdXrlwYVMwUl6yDmKTLYOlzvdAhUXmHXC0CorWh.F8aDSqJLxhyMORFSVme6uaWq9GvwpQbRjfzQedLSnzIm1mEC+BrMGyfA7bsL.icn125myBRhjpSYl9BlRaDOVw7QumfMF8xFf0hDwhnyEk2dyU1sWhx2JmVcnk8xq38s21igOjJCYpjAmXM+G.GELnjAg37Pa6kWg8KYU2MU.6OxdkGKxCGuLPx7TdXh.r+xWxtR+qWfgUrZICB4vvZ3sr.nXenfL6lycdM.jhB8PVkUx6rf9oOvVWO7E7QwrjXg010SGwVas0XRE.fdHsNNRmvBzpuvvTBrBRbIUAhKlRSPtxzBuY+.R1LS9JSwykF7L.zUnBlrrwz85AWoAC3nQBKTGmJIOJq1YxfqnCaV+0rK5850XT6TTLFMHnpHyuZxSuJGMhvXw+Sain8aX5DyD6zseMVAdPvS0gICDjDiGr6WvK59rUqR4mtdihWgwuYn.ApHdxN3w4FtrHKep+xYZMUajMkrLEiJro4tpOewQ539HkBHkfRPyiFgzG9bxxSlXa9jynel3vviLxdReI.2HF407062scQM5yofbzoUtL14YyD6ZIxachLDGhhEI3wHuzDwGG6SIjpOYfJWv7UbjpGPq7.762hRQQPLjRrUVZ9BZnCRcLxQblO89sV4JVzgIw8KWH0yXu5UlXjek2kyg0q2kShc9MJ+04y6hzyDYt4Zl7TkNRLY4XUJ9cP5HVThwgx5gHRtub09bCCaaLdKhyDhgLJ+MHDYcE6e5nXsAkMQIhYaDnsthzggzzy6a8Vd5doyqMyNxDKyQ89XOILuGyGN5vzmGwa9NOhe51nEXTq1WIMOFFfwOmtwy3Vp3LYYrXS4SphsZmLyfs7llwwly1ZmNsVF6fUi8fQ2I6fQcCkAhHGIN7ysbsYMbrliIGf76tnlykE9iyDFmW3DcC8EVw+.2TOoKI+e9v4T9kcy1j7RJv4n4TAdiUv5WFBOtly2reKtgSGRLyn.C0PABLok3RsDmiS9mdjwkcaIhOynGBKxjCDglMYWAJcjeD+DQX171VupyE3ByktCFuQTEZfEvQha8UJsXLtav9pinijXnm6aORY9rbiZufNLYdCOulQbAX3iROrZ.63TyqSAP4csKlWLQgrWVq3kb+6CjAAghiz3xjzkLmzyuoVrQLrq7OJJdyiA7bMU6uTKNoWOIMgcYChcRA5GBCGcjR68jtzj42WqHru073FMs47tnR5vL9v6YlCoQ.Drv+rjqWyUW2q4mieZQeoJsw2NzW5g8nuTk5zWpRCRfUqRBUEBUkDpJDpJDpJITUHTURnpPnpjPUgPPfJPlJds.gh1U75.B01CDJpCBEM.WjxgdIUCMCkR5EpjzJTHoSnRvEAcfZB3.2.xDpAfILC3RHF.FbsAXbCuVfPQ6M75.B01CDJpCBEM.WaBF2zqEHTzdSuNfPs8.gh5fPQCv0Vfws7ZABEs2xqCHTaOPnnNHTz.bsMXbauVfPQ6s85.B01CDJpCBEM.WO.L9.uVfPQ6G30ADpsGHTTGDJZ.t1ALtiWKPnn8Ndc.8463X81bK8mRuN7b42jm9vJ5e8pNNezXGmL99IOm2e7bttr2qm50729QO68cm1oiU8FAqMJj+9eDWapW52aE3s9bGuUX2Vqoa2R+T.266Abuydg7KNeuU4q4cDt7XL1UNXXnns5bQHNTX1aguknGOIzLo0hf7.sROruVI8KFQ9Dw3sfJ.8YNepaLb+yxa4Sp8DAtQcwWZ7un1ijJbIaXlD+.ME27WW5LWt9L2T3ZOXG6+O9eTV78y+GkmnSL3F2GvgiJE1dXxft5jHeAPhRIBioP4EnsNSetx38Bo2Ym8g+M9j0YU54RYcVcbmuSFiAb+H8y8SuUH4K+A1Vv7VY+GQW18.5Yraa1MAIaCtvi7499jwdUXclsDqeikXiarDadikXqarDaeik3A2XI14MHA8G9TOwnGjF5gFNps8F3kJ0VQGaw5k67efiUDd.
-
@Christoph-Hart Thank you so much for the updated snippet. The script works great. The first line of code was different from I had (and what was in the original). From -1 to +1. Not something I would have figured out in 100 years. :)
If you were providing the hardcoded script in the current form, then yes, you would need a thousand variations. However, there is a much simpler and more practical way to achieve the same.
The way to achieve this (as is the case with most samplers) is to have choke/ voice groups. So, whatever elements are in group 1 (for example), they all mute one another. There is no need to specify trigger and target. Every note in a group is both the trigger and the target or every other note in the same group. So, in the case of hi-hat: open hat is not the only one being choked. A closed hat should also be stopped by open, as you can't play both at the same time in real life. However, because closed hat has such a short duration, muting it becomes unnoticeable. Especially if a decay is set. By the time decay is done, the closed hat sound is finished anyway.So, if you could create that little option, not only will you make it easier on every future drum producer using HISE, but also on yourself, as you don't have to keep on tweaking and customizing code for the same function. Makes sense? :) Take a look at how it is done in Kontakt for example. This is a standard feature on other samplers.
-
Well to be fair a open hi hat sample should not be choked by another open hi hat sample (same as ride cymbals should not kill themselves when retriggered), so this is clearly a compromise due to the choke group logic.
-
@Christoph-Hart No, I don't mean for one note to choke itself. For example, lets take A, B and C notes.
A can choke B and C
B can choke A and C
C can choke A and BBut,
A can't choke A
B can't choke B
C can't choke CSo, each note follows the polyphony of the sampler, but choke group creates monophony only between different notes. Makes sense?
-
@Christoph-Hart After doing some testing, I have discovered a little bug that needs a tweak.
When hi-hat note overlaps in duration another note of the same kind, the second note is not played. The first note is not being treated as a one-shot note. Take a look at the following examples:
- All 4 notes are short and play properly (all closed hats)
- 1st note overlaps all others and the 2nd note does not play (all closed hats)
- 1st note (closed hat) overlaps the others. 2nd note is open hat and it plays, but 3rd note (closed hat) does not
In any combination, the note immediately following the long note (a.k.a. the 2nd note) does not get played.
Can you please take a look at the script you made and revise it, so that all notes get treated as one-shots regardless of their duration?
Thank you so much!