Make the Gain knob smooth the gain?
-
@d-healey
This snippet implements the function of switching two Samplers on a note, but it will fail when the third KS is triggered on the same note.
I didn't use the key method you used on Patreon because that seems to be a bit buggy. Here is the most basic method I usedHiseSnippet 1721.3oc6aszaaaDDlTxLMRoORJBP5Q1fdPJvwPj5QhggQ7K4FiDGKX43zCEHXC4JoEhZWUxktQHv+.Z+ATfboH+IZ60bs+K5sdMnG501YIoDIsoTkUhSsBnArg2YmY14wtyLexvMrYFXGGlsjb9CFzGKI+wJMGP4c1rChPk1YKAgCYVt8vaiLwRaLnOxwAaJIKm8qEbHmaAIuudy81.YgnF3PRRRGxHF3GR5Q3gTar1CHVVBsc.oWDtqr1NFL5lLKlKXMYUJI0GYzE0F+HjfsLJR2G4zQR9VJU0KaTw7Nl55UWtlApFd4VnVszJaVoRs6trV4kQUtaMbopRxWptIgyraxQbrij7BavLGzrC66o9GvgDGxyrvhEZRMgS1m71LKSgKJnJsYGhkYiggIGII4OpQXPKqeP65J6RLIinGF7tp2FpgRDM.JmIt4kMl4oE07JEw7RvjjiXRK3aRWSoogMoOObGg8bEkcnbrcKjQ7boOuRY96rJax.Nn7k5g5h21FVLRhB0JUZQU3GEWIedHW4vUOBYqJ7vccAdzTWU06xyRsw7XAjB2LjoaBRmfv5Siv5iQ3xSivkAga4RM3DFUkQeDii2iVnX9WjOetbjVpE1Ej.tuIzgXyG416YX6BEUWcUU8JEAldA7ctPOYIGLecN2l7LXYgHzIsoLa7FtbNitnpHbEUN8wHm9IjS6DxUdLxUNQ4NdJbppytSoMiNUoycmp16emZVyTkBbpiyqdxKlsZ4cyL2I1S73zlYYI71D1VTQ0dRBVf5EpVDd9X4hGwHT0HdoHkwWJJZkRC+ZEQXjQ2gR360GSGW8SofBLvu83c1BwQh5WAz.95is4DgIHuE9Hn6ge0rbJagc5xY8g9GmpTGTjkY5Zg3wq7J5OErADChUtSTRi5P3Ch1+5cV43o0DulRCB2nSx1XlDrQHRcdXiAMw9Dk5sZgM3gF3BJa+MmOcrhd7ep+weEklDJ1qJdvg2Tabya75h+7uMsyazepm2XOCN5H7A1HpSelSLE2D2ib.iJ74PhO1AZPh+t8E4tnz2jgrSbq2busAWLQYZh3t1dWBVuGykxikzyNowXzlwwXV3h2XLYl9wXZpoFLyRRiw7SKnn5OlPWGUQ26UxqlOfB9HnPyNlB50osg7wRF1XvxEd3CIN7BPQ4QLsTK3tSgau7xE8zfMtspExwqoyXlkHmEy.YoRA0OltTPM+7dcwnh9Uccf9UuHnu1niED4PQE5BCOshpe4ppB6XXyM+wcPllgSmOIwWTspX3saqUZXSmbAmouhHNO.OXKHmEJh3nxMRkNmTkKFLwUeKz.w5HaDwwODCwCnHVghEKtRtbdmpMFtqSGwkeOw5hCp.2F5JA1GzSRUMLH4MoxYKH4GkdaCS4NVXy9eOElsfwiEI2.ytVwynQOzre6M7Ql9veNUQcuDzPkBWgo.0SeEfFlhEnDVG5X2hXPPVPVdkIMMyz+13ztJMRfRDj7CPTe0uwf59BjnfdQjDcC+W1mZDrzwrRX9fqnLZP1fOXfvAoi2PH6T2PPaxSILxGjyDDYAV4dVymFzXveVZIhofTzwqk7h8Qa9JME53yTZQddStqQWw0RmDTxE+4Oi8wAjanM1jzquEtN8HnhLPQXieNjtagbs3CoFOOtKix52gQIFQmFYeLfqocarcTaOQGBP.gL5FR45qsO1BihNY0Ws1CgNvHaHNgmwXg1Y9iFIw70Wn3atphG2pyu3Fx9gMtg8YtbBs8tH3R3ygBnPiilv.7FX3zoTrknnpbFQoC+0kDq8mfmZ5s3efuB1TSrVNXSsgaF0EuwvReOAPFDCah93vlr1e8fe8bGahVhfShQ8DRnmnDwntELg.Mtp8IEiKQjXalcuH7c40FRTOJwFHZLkAqioocEYvgK+i6Umhf6.MwfmatmiADXDW6i9RqgqkC9IDSdGsnBFRVOJ46irMgTlw4OTpKMeCkR+r.kpZJTp4anTUlWgRclM6K.foRgRkBk5rAkROEJ0GDPozSgRkBkZd4OAyje8AyoewNKdCE.uftpWpT8+mb4EFbokGGtzWcqe7W9.EW5qd4Kq95Dvkd0jvkBvHmdboE+1+7cItTvP+8TboSKtzxSBW5ObBbo0RwkNugKc9GT5bxeVxTnnoPQmAnnkmCfhFntTnnS.JZ4TnnoPQSghlBE8cGTz2GmQOjgM6oF9U2EO5urGEvuod+GgjSYWwZUsS2SnGzB6oFFwU0oDTeVEr7rJXkYUvpypf0lUAuyrJ3c+uETLgw5tbVO+2F.h6F08FlQV1Grs2yDo+EPmCvVF
-
This is exactly what the video is for, did you watch the one I provided a link to?
You don't need to use one script per sampler because you want everything to work together as a single unit it needs to be controlled from a single script.
You can use the snippet I posted earlier in this thread to retrigger the note and the key switcher from the video to change the samplers. Then it should be pretty much complete.
-
@d-healey said in Make the Gain knob smooth the gain?:
@CatABC I posted a video to Patreon at the start of the month about keyswitching using midi muters. It will probably help you here.
Yes, I watched this video and followed it, but it didn't work.
-
@CatABC
In what way did it not work?I'll make an example for you in a little while.
-
@CatABC said in Make the Gain knob smooth the gain?:
@d-healey said in Make the Gain knob smooth the gain?:
@CatABC I posted a video to Patreon at the start of the month about keyswitching using midi muters. It will probably help you here.
Yes, I watched this video and followed it, but it didn't work.
The problem at the moment is not with the MidiMuter, but with the third KS, it is not possible to trigger the playing of the pressed note again and the fading out of the previous note
-
@CatABC but the key switcher on its own works?
-
@d-healey said in Make the Gain knob smooth the gain?:
@CatABC but the key switcher on its own works?
KS is valid, in addition, the KS system you made on Patreon, in this case, it has some minor problems (cannot stop notes, can not normally switch the corresponding articulation) -
@CatABC is that my keyswitcher on its own or your implementation of it?
-
@d-healey is your code. I followed the video step by step to reproduce your operation.When KS is before the note, it works fine, but if KS is triggered at the same time as the note, the problem I described will occur
-
@d-healey said in Make the Gain knob smooth the gain?:
@CatABC is that my keyswitcher on its own or your implementation of it?
function onNoteOn() { local n = Message.getNoteNumber(); if (n >= knbLoKey.getValue() && n <= knbHiKey.getValue()) { Message.ignoreEvent(true); knbArticulation.setValue( n - knbLoKey.getValue()); knbArticulation.changed(); changeArticulation(n - knbLoKey.getValue()); } }
changeArticulation(n - knbLoKey.getValue());
I just explored it and found that this line of code cannot be deleted. Keeping it will not cause articulation confusion.
-
@CatABC said in Make the Gain knob smooth the gain?:
but if KS is triggered at the same time as the note, the problem I described will occur
Aha ok, I think you will run into an issue here because two notes triggered at the same time, how does it know which one to process first?
-
@d-healey said in Make the Gain knob smooth the gain?:
@CatABC said in Make the Gain knob smooth the gain?:
but if KS is triggered at the same time as the note, the problem I described will occur
Aha ok, I think you will run into an issue here because two notes triggered at the same time, how does it know which one to process first?
// articulationSwitcher/onInit add these const eventIds = Engine.createMidiList(); eventIds.fill(-99); reg lastNote; // articulationSwitcher/onNoteOn add these if (eventIds.getValue(lastNote) != -99) { Synth.addVolumeFade(eventIds.getValue(lastNote), 500, -100); } if (Synth.isKeyDown(lastNote)) eventIds.setValue(lastNote, Synth.playNote(lastNote, Message.getVelocity())); } lastNote = n; eventIds.setValue(n, Message.makeArtificial()); function onNoteOff() { local n = Message.getNoteNumber(); if (eventIds.getValue(n) != -99) { Synth.noteOffByEventId(eventIds.getValue(n)); eventIds.setValue(n, -99); } }
I combined the previous code, and the first two KS can work normally, but when the third KS is triggered, it can't transition normally. I'm stuck here.
-
@CatABC This turned out to be more complicated than I thought. At first I tried the muter method, but the problem is that switching the muter is too slow, so you have to press the keyswitch before triggering the sound, which I think is the problem you were describing.
The solution I found is to add one script per sound generator as you were doing. They are all aware of the range of keyswitches so each script can check if its keyswitch has been triggered, and if it has it will play sounds, if it hasn't it will just ignore them.
The last challenge was to prevent hanging notes after the keyswitch has changed, to do that I'm tracking the last key press before the switch and then turning off the last note in the note off callback.
It's possible there might still be hanging notes under certain conditions, so if you come across any you will have some debugging to do - hanging note issues are always fun
HiseSnippet 1752.3oc6aztTaaD7DfHwNscRRSa5OUyzIicGJCx.NPnzX9vjv3PvClP5+xbHcx9FKemqtyTbyj2k9lz12f9HzGg7.zYZ2Sx1RhHLNNjTfJ+CO91a281Ota+ZfpdbKhPv8PZY2uaaBR6Szq0kIarQCLkg1dSjVF8lBYCJqNZ8tswBAwFooM4iUaqkYJj+m27n0wtXlEIDDBc.mZQdJsEUFBsZoJTW2sv1j8oshf8Bk11hy1f6x6.hxj5ygZisZhqSdFVg1D5nmfEMPZeq9hEl2ZA6GXWnvhKWzBWjrrC1wwbd6EVn3RKaN+x3EVpHYtEQZSW1lJ4d0jXIQfzlZctc2ZM3+LK3.NfJnG5RTKLQ0fSN.7VbWakJpfh1nA00tZeaj.gztV0PK1jAVr6nuC0lN.dnk6l9aXDRQTCn1DwEuIiIdlQEu4hHdIHRZQDooBDoaoWyxi1VFtiRdtg91LIwyAC9onhR.tHs+PeCNf.SNaKbSxVdvhADjq3byMiA7U9Ux5zgYIoblAm8LtjrKKW9ruJalruNqwI2xwIw8TmiG20k3k31p6FdCivbrNsNj3MiwQX2NjAHB5ebip9oaTi5ysBT6HHxYaynxcaSXm1MATOaE7qmu8lXIV4I5ACvqMwSRUhf1ljif2AA9kL5aRDMk71vKg2xoAWW31cbwx32gTuz5sAXCh43TdGlfJ6F8k341EqQUDukdUpzpQxx3DIHifk5CgL1643mpW1wgXICEvoz25G+v71K5w+YAG+MzqQYD+Xn9G9W5u13E3iHFOlvHdJim4Phk9miZrz1ibrzcsjvwuuGlIZyEwXbMRK59blxJDB74B30O4m1S4MiBeCN1Kwsdyi1BTxDooFV1wy+ZwZs3cXxXWClbXgnMGyPzScIND8m2CZnDYlTn5I96ozAerPZPNBh2rssvXUixr5fSXVKOBHtJ05oTgLGDu1iT2vEKjpHx.dyEBohXkrYCXTS1gOkWgzEPneV.rscEF+vb2yei6MigIjBPk.nOtyJHx8vr5jbvFlEd.7U9nL7IzSgg9anXXwPN5C6r3XEQRrqh.307QjtJhjYzoj4xkagcMX.q2Ar4PUGyVm3asdleZFkMLS1LTGibLieX0AlJEVGnR.kKuw8uOP+2u5.sNxd4ylISfwFN.1JYxFvJ+PDyREqAIJbnVTraYkubMP.OhjqueMjO88f48YX.0fE3.tamVDUTfgQyLFKpxe+cl9Iv6qKqtZfM8DJReICTiMgK6QN4rYdUbkAVM3TEm7TmoGmZ6h6pVGYiH14CHf4GxO.Fp7qjAryY7HPHC1.bn0YbOhuwImzCR2Cm5qAcHxUZ1.GTOY6qeaMK+Hw4rInOrP4UUXTnCCX5JCqpmQ3d03esRsWeOwvz1UFy6arnWzXAp05cKGfWx3uxU4x7zlrmTA+R5GB+y5ErtlK0l3gn1pRMpHP9RaXdtkJgFAJultuyebI1+1wII9gkFqZSUZZq1PQApr02X355wf0WqnFB0U8C0gJjcUl9o0UwlQsn11tjpbnBPUkggUL7aBIocM5uPhVEQK7wCV96urjniiC8X+1+bntsDRPB1tE7NBocacnHECahCtiqzPzDxm6RYMI16y8wGMRpPeituVjEcoUKB799ZwudATKt32qSrJzxzWFqQa01kTlcDjhBfnjwaCuR70y9PiWe1NbFucCNiZEsN28Hf0pdchWTYOQEZMoDa0LDxcJsGwkfiVy92T5oPYdXOvNQFSag46b0pI5u9J8.w0PEH238wuM0n42Fdg+mK8qN4U69U2i2QRY02ACWHUgKfBQpAsIZQfSmwHtpjoZSnR6Erdt9QRpQX19K9G3SuMMUq05soY+Miph2seOwp1eC6I9K7W6v8ZcQokXyD6INFzSPQgDoHFzMg5uXwYc.nXXoLEaAlhH3c8R8AVHZnfpXVLlAqiwocngQrQ+0iJyvvkhZDPys2UXAFFkcN5yvpcbEjWPskMLiRXH3BQA+DrmM3CsNG5fOdb9H3mPzno+P0N+4RPm2mV6Kj1ZeZq8os1m1ZeZq8WRase4K0s1O86dq8mYahnQh+Cqu6ysi3zaJ9rOhqxcrVHsi0++0w54t7N9cu9Q0zo5H33KOd56pCcpUvv2ca7eu+9h63BJjNtfA.uYRiK35oiK3J13BlOcbAoiKHcbAoiKHcbAWRGWvCSGWP53BtrMtf4SGWP53BRGWP53BtXLtfOFmQKrkG+kVAYaUALttODPuY9+6HkQeG0ZCySllEo9arh9RKq3r5sHrv3R37iKgKLtDt33RXwwkvGLtDtzYSnpY305H4sBdmfP6TsreYQZZAy+v+IC5ewhpACk
-
@d-healey I tried your Snippet, and I don't know if you have the same problem. When the third KS is triggered, the note triggered by the third KS cannot be stopped. In addition, when switching from the first KS to the second KS, and then switching from the second KS back to the original KS, there will be no sound, but there is always a level display on the waveform generator. I searched for a long time, but I couldn't solve the problem. This problem is too frustrating.
-
@CatABC said in Make the Gain knob smooth the gain?:
the note triggered by the third KS cannot be stopped.
Yeah this is the kind of hanging note issue I said you might run into. I'm just testing with my keyboard in realtime, haven't tried with MIDI in a daw but I expect it is less forgiving.
You'll need to dig into the code to see how to mitigate the hanging notes.
It's a bit cumbersome to work on because each time you make a change to one of the scripts you need to copy it over to the others. If you move it to an external file it might automatically update the others when it's compiled, I'm not sure though.
-
Aha, here is a free software loopMIDI, which can transfer DAW MIDI information to HISE in real time.
-
@CatABC There is a MIDI player built into HISE, you don't need to transfer it from the DAW. You could also build HISE as a plugin if you really wanted to work within the DAW.
-
@d-healey said in Make the Gain knob smooth the gain?:
@CatABC said in Make the Gain knob smooth the gain?:
the note triggered by the third KS cannot be stopped.
Yeah this is the kind of hanging note issue I said you might run into. I'm just testing with my keyboard in realtime, haven't tried with MIDI in a daw but I expect it is less forgiving.
You'll need to dig into the code to see how to mitigate the hanging notes.
It's a bit cumbersome to work on because each time you make a change to one of the scripts you need to copy it over to the others. If you move it to an external file it might automatically update the others when it's compiled, I'm not sure though.
I added this line of code to each onNoteOff,
Synth.addVolumeFade(eventIds.getValue(lastNote), 500, -100);
and it will have this error,
! onNoteOff() - Line 11, column 21: Event ID must be positive
but the note can be stopped. In addition, there is currently a problem that the third note does not play the note pressed above, but the note of KS itself.
-
@CatABC the last number is a delay time. You cant have a negative delay time. Thats saying you're trying to turn off a note that you havent played yet. Its usually 'zero' unless your compensating your a delayedNoteOn message in which case it should be a positive number equal to your delayed message amount / or more, hence your error.
must be positive