yes definitely a script envelope that you then compile to a hardcoded envelope.
Just create a signal that fluctuates around 0.5 (sig2mod!!!) and use bipolar modulation mode so that the center remains in tune.
yes definitely a script envelope that you then compile to a hardcoded envelope.
Just create a signal that fluctuates around 0.5 (sig2mod!!!) and use bipolar modulation mode so that the center remains in tune.
@Lindon move the time variant modulator into a sound generator, if it's just on the master chain it won't process MIDI messages.
@Orvillain that‘s the point of 90% of what I was working on the last month, I‘ll show you tomorrow how to set it up.
oooh is there a way that some kind of analysis of each sample in the map could be done so the sampler is aware of the phase?
yes, theoretically that would somehow be possible (and I started doing this when working on the integrated legato transition engine which picks up the zero crossings to line up the phase between sustain and transition sample), but if the samples are not pitch & phase locked perfectly this falls apart plus there is a significant complexity of making this work with the streaming engine for a very narrow set of use case - if you squash your samples to be perfectly phaselocked, then it's just a minor step to transform them into wavetables and use the "proper" sound generator concept for the job at hand.
@Lindon You can design your own LFO in scriptnode and add the functionality there.
You can use this replicate of the HISE LFO as starting point:
The Tutorial project for HISE. Contribute to christophhart/hise_tutorial development by creating an account on GitHub.
GitHub (github.com)
If I'm using Wavetable Synth or Waveform Generators the current legato methods will work?
Yes, that's what the RefreshMipMap parameter in the wavetable synth is for: it will switch the mip map to the nearest root note when applying a pitch fade during note playback so that the harmonic spectrum is not stuck to the wavetable of the start note.
The sampler cannot do that because it has no idea of the phase of the sample at any given point.
Either a way to make generated notes artificial or allow any note to respond to addPitchFade
Not sure I understand your novel there correctly, but generated notes are always artificial, so why would you want to make them so?
HiseSnippet 1242.3oc4X1saaaCEGWJIp.1cqXcqXXWRDrKbFxBr9LNKHHe33zYr5Di3z1cWAqDsMQjI0jnylwvdG2iReC1NTxwVtwKv4ftUrMegg4g7OOGR9imik5lJCYYYxTCypWMIgYX9IV8lHTCaNjxEFsO0v7IVcnYJVJovzISRnYYrHCSy0et1fYkMLx+7tCOgFSEgr4lLLdkjGxdAeDWM2Z2i9Adb7YzH1U7QkFs2QsCkhlxX4XHdV2ptQBM7Z5.14T8vVyx36oYCML+FKeG2Puncibb72KHjFv1qOseea2HOufF6Y6tG0qQ.qtug4iZEwUxzdJphkAS5IxnI8FJ+YQgCdEOi+1XltgsQOvyElMZNjGG081MmLCCSqty2pVuXq5YVc3Q7Y1muk8Y4cPlqn7ll4Z2WHY+.BIyRgzFEgzSs5ElxSTy6QGOO1ps.NA6SgylxgRwXMVaeSqlRXDB0NinWyNKEZLSQsf502l.es09UqlxFPhAbncD4.x2Zue+whPEWJHRw4RE6BQssp9qUqLaH4rzNIwzI5tq0POSdvDUoZkhtnQQc4pvgZZnVgrsI9ZOZ6rs1k+VUx66j98K7RwLHJLcxjV2.Kf1QSmk6HUuBSkwwrzB0uW2ZTb48LUXMw3QukktM4FZ7X1rABa8Kdd9nU67LrXCuz.kh1Bt5hD1z1mIiizmS5ee2SeiomXvudY6SoJpFHlZCFWBKUw0gi4orafqfE3QEqSYYWqjIvkv6vN.0JiFGSUKhx5K4S6.1OVfezLhHiqlTNIvCfuqeu78pFhO0JmfVdLt1RhQXm5uiXbZVgO0pU+9rP07.bCqy9Qro.Vc2+jB2+XqdbAK+pQty+x71jWSugQdNSvR0ad12SZ7eeUSimrxowuHTAt+pTpHKQlsvD2iMhekTn2Ela7kYPNH1Oco9zrr8lRZ5R65cGdFrHWpldT03zbr33QxwB0BXv5KdNrwpc0cwaDkF+RxQuwGgxF0+.U13KlZcdDYuzxGO0zh7WTHf2uVGPITCemALktmyyyhVaKxAGPZTeqpUp.IsxjwrcRR4B0rgyyNFxf0mGxowvnOjrYygo7LH20PBOijxGLTsI46Ha9BtHB76La2eMiOREEr9PUT3+iEBVfXqbaL1iOJIl0RbCKFVj4w3mCqp9zwwpastHu1QJ.5QJ3gkSBbISAfy.VZ4XeoKniUJ3+iN2xyN5RVLiVNg1WeDfiLZJrOwPtW7v+SeK875qrJBWhlgI+6s.95+2t.9kxwJtXPGJ.g+Bjm.RO1CpaFx.uKDrXctCy0z2xKZWW2tnvoHJuwe.el1osts4zNsusy+Q7wHZXp7MgEYE0b5Q4Vf0sH+g2p.OEIzlXajmor7Y4Hnn2aBCWbptiPGrBcwJzCqPerBCvJbWrBafU3dOTgUuE.piVoMZkNnU5hVoGZk9nUFfV4tnU1.sRzLjCZFxAMC4flgbPyPNnYHGzLjCZFxAMC4flgbPyPtnYHWzLjKZFxEMC4hlgbQyPtnYHWzLjKZFxEMC4glg7PyPdnYHOzLjGZFxCMC4glg7PyPdnYHOzLjOZFxGMC4ilg7QyP9nYHezLjOZFxGMC4ilg7QyPAnYn.zLT.ZFJ.MCErBLj9Und7XkbTwaRvvnS2V4uULSyVBJ7P44O.uwexUI9bU
@Chazrox yup 60dB is way to coarse, if you start putting that through any FX chain you're likely to hear the cutoff.
@d-healey No but if you make a release on GitHub in the repo you linked above I can just link to the release page where people can download it.
Have you looked at the time-domain waveform? This should be visible there too and might give a better clue what went wrong.
You can also send over the node then I'll look if I can reproduce it but I can't think of anything that I've changed that might cause this.
@griffinboy Yes, that's the entire point of the update - you get complete control over the update rate and how the modulation is applied for each node, but I had to introduce a few breaking changes in the bridge between modulation and nodes for this (eg. the weird behaviour of switching to pan mode when the parameter range crosses zero). I'll write a "migration" guide with the necessary steps for bringing old projects up to speed soon, but in the meantime try changing the ExternalModulation
property of the modulated root parameter in your scriptnode network before compiling as I would guess that this is most likely the thing that broke it for you.
@tomekslesicki but then the DAW tells the plugin a wrong information, which I'm pretty sure would cause issues with all plugins.
I'm just forwarding the call with the specs provided by the DAW and it shouldn't be the plugin's responsibility to care about whether it's an offline bounce and the DAW might be giving you the wrong information.
Of course it is triggering the callback, why shouldn‘t it do it?
@resonant Call this function instead of Console.print in the callback and hope that every DAW supports dynamic changing of the latency.
On a very high level you give the broadcaster an event source (in this case a change to the processing specifications) and then you can add functions (=listeners) that are called whenever the source event occurs. You are free to call the function parameters as you wish, but there is a expected number of parameters for each event source - in this case it's two, and the first parameter will hold the sample rate and the second one the block size.
Now you've probably copy & pasted this from somewhere (or the broadcaster wizard spat this out) and the function parameters are named component
and event
(probably from a mouse callback source type), just rename them and address them.
SampleRateBroadcaster.addListener("sampleRate", "blockSize", function(component, event)
{
Console.print(Engine.getSampleRate());
});
Also where you put "sampleRate"
and "blockSize"
in your example, it expects a object and a comment that will show up in the broadcaster map, but both are optional, it's looks a bit misleading.
So basically you need to do this instead:
SampleRateBroadcaster.addListener("", "will be called when sample rate changes", function(sampleRate, blockSize)
{
Console.print(sampleRate);
});
@tomekslesicki no you get the samplerate and blocksize as function arguments (which you named component and event).
The new waterfall display can be styled to match this. There are plenty of examples in the docs including shameless reproductions of the most popular wavetable synths.
I'll need to polish it a bit, but eg. here's the wavetable display in the Arturia pigments style:
This is the bitwig style:
so something in between these two...
@Orvillain said in Broadcaster attachment design pattern:
Don't worry about that
Do worry about that, this might mess up your code because the HiseScript parser might think you're calling into globals.
This is the same as back when we added a Settings
object and everybody and his dog complained about their Settings
namespace being trashed...
At some point I'll need to add more strictness to reserved keywords (eg. I've run into an issue this week where a scriptnode network messed up the entire module tree if you name a parameter Type
because that's a reserved attribute for HardcodedFX modules).
And this is an expanded example that shows how to use the pitch modulation coming from HISE and combine it with the unisono detune in the clone container:
HiseSnippet 4158.3oc6c1DajbTEGu6wauqs2M65jrrIHtTRfDdS1LLeaaxg3c8GINrdWqc7tjUQHmxcWyLcbOc2zeX6IHjPhCvkHTP4R.gfSbfSnnHgfKvgHwIj3qKbANgDWhTPbIG.EdU0cOS2yW1SMd10cb4H4cmtqp5WU0+2686UyNY1xwRk35Z4HIO61srIRxWRoZKSuFqz.qaJswpRxWVYSrqGwAEboa0xF65Rzjjkm5koWPdlyIw94ieoagMvlpjNWRR5AV5pjaq2T2qyU2Z4ultgw5XMx15Mi05RKugpk4JVFV9f8LkRNIar5d35j6foMKihzqfcaHI+bJkKTTsj1BZEJTdoJp3JjkpgqUKeQsRkpr3R4KtDtzhUH4JKIe90zz8rbp5g8HtRxm6VVZsp1v5.yfGvCzc020fPeQdopvSN3xqaYnQmhzqJsRCcCsshVnbkjjU1pyx1TAKaWUYScM81Wuyx2braf5zi3KfxYRZdSkv7xG27xEy75iIIGyjNWfI8jJUUczs85bGp8bQkMLgcyZXXeJtoDzVI4emxJVPCL8x1DuGYcG3Es6v7Uxk6FH3WW+Eq4ap5oaYhrLuikG4tlye8Y+VyNyre6YQceqZ0568nOFGKCChSeuMUZ3LrNNuoeycIN2.sO1vmztgvzO4ZpxfWSiukqFLqi0PKyML08tqMwbPBAovkJ3uc+MVE6goaDgWCZmMwwSmZBxqR1GbCB1VlQYUh6ddV1fiPO6YfZwRy2.6kTBQczBuArFjXeit4X5p60Jti3Ilt53ZhOoxV5dpM5uMloO1HrRMIrwPuwmPYsZ0HpdcLvyor9qMYb8h+3mI5wG3Mwhjxd7e9vqXZoQPrKSb0cIN4GR7z+3wMdp8wNdZjS9MTFEGpgFCMOmwPO+otXno.2wDg4mIxFqp2z1frl49DCHlCyFeJHHSMrugWzUSJz1zxzxtgkotZbs08HdN50qSbha68cBcSOOHybmqb0kuGwffciI99RKeacSB1AVmHbtVjejS4028qmUIvbQTuCT5ML5TS1vnIVOex.iTQ41qe2PQO72PsM47G8h2szssLvNz3+q6P9l9DS012+AegO4knwq1nS3tk+AK+0w6SpY4zLLOYzTb4aSpCOy3i81jl1VPXzDx2pMsr7ZnaVOYTvqt7ssrrWyDCqBZwGjsZ.BVfNwk3kXXfgcaq.l2ULrhKykj1ntokCIf3I90Ww20ypYzDfwpV0iXyXBjeckJkxB+T64o+doUfeU7tmLuV5jycJywTi9zLkP6sbplXz8jN2wSkN7bHRijE2VDdJwheLipLrEroUV6POGb9iBh6wPDxPSqviRS6dV9dPXkMwP5wCgfh2wuYU.oRk.lkoIwfVjgbFZTffWmi9ZVnDhoF6EeJ7S3MySesb3MyGcyXURbGh2AVN6whHG92goc.DoaaHxcbiCQdSCCqCVwposdXZCXQgcssrLZEknWNSPKhL6a1zxGdhg1dmbN2hFzqp9aQhlFPU2ai0MniPUeWndHs6ZVEFGFZp7TOf33xdlWPIWV3+fPI2gkz+BqiUgMfVagAJXH2FsDKXej3jUs894fmSw8.BN.fA2V5yKhyMvlgoZS55IKRLrouE1AFCHjNsbrLxSEq7rfLezWA5mLTi5RJa39.5cUwFROfRCS6D6oPa94Bldmm1zYTrpUy.lTRIlrOcrIaTC5cB0oyCdBj42HqrMLQIHUCKS32z7XtHXEzrNAAKAHeScWfmCY2dJ9Umc1W.oQ77g1iYQWbYsrFDBD4P2jQySesG1oNwCtBcnZBovP6RPP5PjmE5MtqqJTUA06CsZvPsNXouw0yhno+fwC6wFT28HG.dGHcZQDZ9pDMztsX2oNtYSbGyBQOPA2DlrKn.0PMgTpncCp0QCr71SHZBZp0oY0DgssMfcKDN5Btf06grX4uoFLYeBTLiefQw5pKZd58zgYOqjFZqdKhiE8Oa.norVZZAyPcKeWTMC15.gsfEL+fGJzNWDvUPbN.zZWGLuDS.aGBVqswQYFHzcBSSXIAxNygNap15rohoydBE11+Nrs+jZsOGSqAEvkMdS5UsMmRjUGHMRH5l47u+67vOsaOmiv9OuBitOzxmVoJa0HdrjsYJL2vyEwjnFDchEfXCM5gKZ2DuiuoKrB.1ZauT58lUYSn.FcaiVRRwbeoFUzq.6dScyvmemP+ahOrqqkaYJNVPPsNsqJHcCVJSTwC6Txff7qPWNck1lbn21VrADlC6Cye5C9hJ22TiTCbIzj5w.BK9pmqeSefRDRGwxZIM7oArL1yz.L4dlFPljANMtfRv.LBSgO3+7+9qexk+vALEjjF3TX5I0T3kogQN41EnoX63Wc439U44yw5ZJ8KhUWtWO7G99iq608BF2Qv85RJVsihmz45BJrxe9rum0zmZ7r1ctWaoR+4+9fkkmhcljjFYmohiaVpfbqcmk5g+jG8YolQ4MoozIc4ConrE1Tja5QmGzQEXO0jaZHtSwUSRI..qoeXwB6rK6HoR3Z8LwJ1Hdi504J4fLjpldaEuF5tgD6t9Nw38somPIvrG47ff14aqQW1oL3NsPEKfbwzij1MK5gV9PIKPiLUcnGPbv3Ty2gRTizqgZAM3.rIbsf2k4tG9rY4CitS4ZYhsJdAkfROOhJS6ck6oTXF1NcLrtBL8KdXx76YpSqaCVaN.x+ByJ08fUo9u.5pW2Da.UmAU0PavqrQ005sULKCAH.rpMZAk0vp5ACsZe5aJT1YmcCn.HGMXQDtgpUycgYDa.CKELXHwrx9YCT+rlafNf7kAK1G1qf8sHzbzVadSD6cu5EnkLML8.TClMTFFL0wFzHss.aIvoPiZXXXnow9YUiFbfbgkjBaWvfEXx2eifZ1bQMfBKo0WVCJDECOamlXCnRLsfxVu9Io53hc1jSpPlCTHNjrctauBj38c3GGg74hauiPZnqDldEVIN.6n0MPWvbi9n.WuCid6nWU201.25V9PYsAGyehqPWjfnTGFcPTq0bWhlFQK3jqCObpDY3jOYhqNrLbWI5efEUYdFSJbktWO6SP0N7JQMp2c9tGliX2eJN28GVoxs27SrSkQvhLoYQFrPa.SgNY0mNLeDcwaH4iX2tWQWTGGhX62Gj+I7XCiFQjlusADKzCBsB4dcBOCt5D3dzxDgb1sSiPC4x3.fv1zyglkr1jPzXGvHNrb2vifq847wtUriZryA.RGOVtHHddv.DbPYc0jtJ.fd7sgRL5+NkNQNL2NGx1b86P1nuE.iNiPxtmDO3ce22cTqa4HRbMUhBuRDaHgkes1AxRzldM+tFjITXrAejDWRg9VzgtGcXFsppdLEB3UuTlm+6cs+1nWNRhovy7M79Sq8LeThfw+n2i9y+9XLE9uev727U+meDaJD6.SOwBjMZmrxG+aG+MBEkapoMoR4mP80iCNf3E6185gjn2ij+wjFJ67iNT1biXp9viQ4j7bXGtQWZ4dL5u+eoai9m8du2utWid4uay+PHeRm+smLpV92Yuk6qkCW+QfybhngmxOnzgKadY3ocRNCdjvCFb53SddvI1T37r+UJNoTNSIk38.O53QSDQ8xJuolqc1n60u296n6cDwRyjHV5HUiyIRBI5w79nPJbLcAe1QNx887MlPtftC3c.fh.mOMgPekDzu4OUyP+Dw3PxyED8zoFH5A5ebZmaNsiJmTjIXkErxBV4TMq7zoFV4OagGewHL27UdLCHOcJAP9yvLwERuLwERMLwEDLwBl3IMSbAASrfIVvDKXhELwiCS7BBl3y5LwESuLwESMLwEELwBl3IMSbQASrfIVvDKXhELwiCS7hBl3y5LwkRuLwkRMLwkDLwBl3IMSbIASrfIVvDKXhELwiCS7RBl3y5LwkSuLwkSMLwkELwBl3IMSbYASrfIVvDKXhELwiASbgbBl3y5LwURuLwURMLwUDLwBl3IMSbEASrfIVvDKXhELwiCSbdAS7Ycl3ERuLwKjZXhWPvDKXhmzLwKHXhELwBlXASrfIdbXhKHXhOqyDuX5kIdwS0LwWN9+KAP7grS.EOg9lUJgJSPEKnhETwBpXAU7XPEWTPEeVmJdozKU7RoGpXwGyNAU7jmJV74rSPEKnhETwBp3whJtjfJ9LHU7UR781QtzDV7bI+h6HW5gKV7QsSvEO44hEeV6DbwBtXAWrfKdr3hKK3hOyyEmOEyEmO8vEK931I3hm7bwhOucBtXAWrfKVvEOVbwhuS6DbwERwbwERObwhOxcBt3IOWr3ybmfKVvEK3hEbwiEWr360NAWbwTLWbwzCW7hBtXAW7DmKdQAWrfKVvEK3hEbwiCWr361NAWboTLWbozCW7RBtXAW7DmKdIAWrfKVvEK3hEbwiCWr362NAWb4TLWb4TCWbwbBtXAW7jlKtXNAWrfKVvEK3hEbwiAWbQw2wcmY3hG3dPezyebrPfJxyQWqGo4xEUtieyUnnytbrKr7jJ5mzHtk7DJUsMz8ppW2D.1O4xct7.qX4RJp3cMH6PNz1Ioq4Uai7GqE8CxI1sSVvxCe+2IYAK+Tksan6hLs7HHrmGwzGVacQdMHHW1TF4YgTA1GhoKbG1MpCwnP5lpNDHBK5fFDSjuqtYcTy.hUBZeKcUhaVzFn2z20C0.qtGQC5Bzc3gUyxAZI9FnZDhAplCgPeHXMrsG8uzBrUjg9dvHls6poxzU0TmWYE5BW3h6WTIe1bnuBZd5e77n40Ms88dA3EWG8bnbYyWn70AefjivETVkrqe81khM0HTyihBLORVpSTwFIc0jO9tZQWK2HpS4nJmihtKoqVLEZv7NgzbVEnkMxRuduBxf1ye1B4Iel2S7kuAFopmpdaGr7ALuFoSd8QOccPl7QO6i6IvJaY.eMFEdlIz3PIcPhmVPZ.mjPrNmeT68EB58X8PKNp8NQD29GOnu8K5vofHhGfczFxiMlfYVpfYZHrkmOLOO4cGZ20WW6E+G28s+UuznoVtlxcf36XC3YosEwQEbvw0IRaDz.VTg0NDZIjaoSjVZ.Dn.Z5hXuZL4QUi0aP31qZUsgrVZSxUse9O9CQ+Rm+0ozUsgoyaurcKKq8Zhc1iFH99aDcjGv3A7AdwBSKKuJYeHl01srY0ErJwcOOKaIo6Y46Aou2D64nSOCDPHWEh6qRVoAsxACWZFfLzL.AuNWTFgpDSsbQGPR3MySesb3My29zSZhUcr1IDHhNgWlcEH3pYXYJaReMJuz9cuS2TWSeGU0jCUOcr.ucrHucrDucrLucrBucbAd63h71wkF0NNaj.HG28LO28r.28rH28rD28rL28rB28bAt64hb2St0PE3VCUfaMTAt0PE3VCUfaMTAt0PE3VCUfaMTAt0PE3VCUjaMTQt0PE4VCUjaMTQt0PE4VCUjaMTQt0PE4VCUjaMTIt0Pk3VCUhaMTIt0Pk3VCUhaMTIt0Pk3VCUhaMTIt0Pk4VCUlaMTYt0Pk4VCUlaMTYt0Pk4VCUlaMTYt0Pk4VCUgaMTEt0PU3VCUgaMTkigFZS30gm0GsVaIoM2Zsf2me40LipMeJo+uNl8PJ