Is there a way to change the channel amount in a scriptnode synth?
I've tried changing the "compile channel amount" in dsp network properties and using the sidechain node but it seems like both of them are not working.
Is there a way to change the channel amount in a scriptnode synth?
I've tried changing the "compile channel amount" in dsp network properties and using the sidechain node but it seems like both of them are not working.
@Christoph-Hart said in Scriptnode Synth Crackling with Chords:
But yeah, sends / receives are currently not polyphonic, but I can look into making them polyphonic as there might be a few good use cases.
I'm making a fm matrix and i found i just ran into the same issue.
It'll be really helpful to have a poly global send/receive :)
RNBO is also a nice way to go.
I think you mean wave terrain synthesis for the "random" generated wavetable. It usually implemented by reading the data in a certain area of a dynamic 2d matrix(like a glsl), scale the data size into one cycle length of the wavetable and play it back.
There's a book called "generating sound & organizing time" which has nice examples of wavetable and wave terrain oscillators made in gen~, which can be your start point.
for the drawing case, I think you just need to add a multislider with the size of one cycle and write the data in multislider into the wavetable buffer with an offset of "cycle length * cycle index"
@clevername27
I guess this will allowing users does some weird sound designing stuff, like something similar to the sounds in aphex twin or autechre's tracks
I want it to be a "creative spectral sampler/osc" for some creative usages instead of a precise spectrum processing tool.
Actually I decided not include this thing in the initial release of my synth months ago cuz the CPU usage and the tunning is still big problems but after the serum 2 is released i feel like i really need to have that kind spectral thing in my synth anyway.
@DanH
I store the whole spectrum data in a N x 512 grayscale matrix, the pixel with the highest value in each column will be the fundamental frequency. And basically you can manipulate the spectrum according the pixel values in each column like shifting the vertical relative distance between each selected pixels and the fundamental frequency, or smearing the values horizontally.
Most functions which processing columns can be done in the play back stage by directly changing the frequency and amplitude of partials but those functions processing rows (time axis) will definitely need a separate buffer and some interpolation to make it smooth.
@clevername27
It's actually not really complicated, just a bunch of voices playing back different positions of a spectrum in different speed ratios.
I got this idea from a m4l device called "Pathways"
https://youtu.be/ljljrQ9QPiY?feature=shared
I have an unfinished prototype does "spectral granular" with warp functions. Been considering including that in my synth for a long time though. I'll try if i can find a way to implement that in hise.
Just finished the UI of the first effect pedal in my synth today.
I'm not good at 3d graphic design, it's way much harder then i thought but i just tried my best.
still got another 19 pedals to go...anyway hope i won't stuck in these ui things for too long
I think we need a function that get the rbga values from pixels of an image.
I've tried to do this in Javascript though webview but i couldn't find a way to send the data back into HISE.
Also I found there's a juce class called bitmapData that has some functions probably does this and I tried to bring these into HISE myself but after getting bunch of errors over about 20 times i found out maybe I can't do this properly with my c++ skills and my current understanding to the source code of HISE.
@rglides Yeah, this thing is actually older than me, I knew it from Aphex Twin's Windowclicker EP
@rglides said in A pixel drawing program, in HISE, [SNIPPET]:
Metasynth
you mean the one by u&i soft?
finally we could have a windows version lol
Thank you for this cool snippet!
I'll try if i could make a conway's life game on this!
@Orvillain
Thank you!
@griffinboy said in Creating an array from an image:
I would like to create something where the user can load images
I wrote a javascript code that does this. I've tried to embed that in to this project though webview but I found out I can't send the array back to onInit.
https://docs.juce.com/master/classImage_1_1BitmapData.html
I just found the BitmapData in JUCE and seems like it does exactly what I want.
Not sure if i can do this but I'm tying to bring it into HISE now.
@griffinboy
I found a weird way to do this, actually we could turn the image file into a big array externally (by using a c++ or a python script or something else) and store it into an single channel audio file. And then we could simply do something vary similar to a 2d wavetable, just read the rows/columns as cycles and interpolate between the cycles next to each other. If there's more than 1 plane we could store the data of rgba planes in the same array in order like this [a r g b], and then read them separately by transpose the index. This will also give us a Z axis so we could interpolate it with both data from rows and columns to get new values.
The whole structure will be like this:
I wrote this simple demonstration patch today
HiseSnippet 5828.3oc6bsuchijdG2yvlwryrYm8jjyI+Wc58blfagkk.CHld6IsQ9FtAKY.eq6i2cDHInrERXIAFX8jLIuQ4MXdT1Gg7DrcpKRnha1z1t6LYxpdFrp6+9tTe02WURR00oogmmiarURTeXWiXq7kwqMz1usbaMncrRaiynTGsVFa45pMLVwgc077LzisxJe1d3ZrxpedLx0+8+ZQMKM6lFQYEK1INvlFkgcf9Q4p952.sr1US2nNrCSs270kZ5XK6X4zCglOKtPrtZMuBMxGpgq1yhGaeMu1wV4EwapIjyrYiBlBFoyap2HeCiMyZTP2nPNolYMkxJkIsQFobwV4WsiNz2wslulugWrU97hN5Cq014Fa5.bBzC1vx.mPLVMzHSydWGKcLIhyMlbanktZHaxKFpWTiXZeFko8ODuBTGNN+Hl2ukT.HpErLvUd1jv6yl.dhrvSfAdyARqv.o3TH80wq0zE10OpDLd90wKY6a3ZpgjSrP4vdcpYA0MbUQ7bDThuxmgDIzdH1yF8GhK6fZmsOeGsqL10EkXb+jLmfPJ.5m0dYhDI1Xi0uiqttFc0bM.djwBKe8.eCvDZYf+quFhZ8tq1i6eKGMcbKRrK5mZC87M5viyamAZc5ZYrEhj78Rh.CRaxyGzWyErUOcnCt5fWA1wtEz1fzhwY6gHFGUGGqjq8NgKXaoYcmpFZ5n1wLZltNcpZXZ3ZfT2q46BsakbbekhslQivX7znmIpknNLnqoHwabMSRYiuHw5+R4JA3C5JAa8SuMnxV0qV5LPRMfGhQijgtsZ.bbAZVcaqA5hr4X.bLAZ1.H1N0ZKpeE2FrU0pacNpmrAZX1MQwasDef36maWKF9MG1zxnrgcK+1exPiKd1hqyMdIGr129nPO451Os7x2sEnHPFrMXGvt777W.RAd2df8Ak.G.dCnLNqT.zu2O5eUz0+qqHb6RyPIZLkr0MF7sOVz76+8TcAMKKfGwxrG.ZCbPyVIixbgaRA7zWFg.J05q+c.YbKDlo5r4HxZ0f49LL2u4cBWcMeMfEc5BRpkVGzQCYbe.3FnNMqolPMWJPDSAL5LrTfXjpw28cX0sIHU1FcHnBPAnBNBTETCTGbL3Dvofy.7i+2ES1UODkijowXkcnXvZ5YUi98QW2tDpW2trJsQZc3wecPxLXbwR1L3JybUuQVbPqbubX416w5USGqdcr8RNbrAr4x71DCRdl+w.xMW54fO.PhLRsGRpUKz.UQjdSEP8wFmlGZ4C9kEs3LhLkM4rAlku+ft+CSAbdC9Xd3gKmcFpzhH7eHlmNDMUlw7jgVy1T8QukEvKw0e7wab+trO01.1psONuNZCXlMst3SnqM29wbEpG.bdp7ONjz9+JtG+o0aoeVCtORnaQAJ7fgVFTPLZCHSUS1Vqug8+hOJVEjImNnHpMzuuNt+GK2zaX3eiggMMFJujiV6a+YdnPXi0z.9P15dm.WRj0Pg0EW6EcsfOgpDA1XwAUN1JaSz5CO4WhSPAKD5NAVJbt+dzDEXL1EapHEP5909XHJROEzcS0JUiTZgC753kwAfMn4C1XYl7e6LlFeDlLtCOiyrLb8Hd9s2eOh7i2ETzEH6B11k5T0Vs.EaAjaA1tUPFM.Ea.ja.1tQPFZfhZ.YMv1ZjLVFGXlvesKRrHSYznJtcoL4d68myclwhbgbtlCQylB8xinebaPnO2hzTl4h5VFxqLjqLIgqMY3d.XjTTbpzomtBYlLYj0BFGAYbBTGZR1bOefmQSenisG1VfeaCJcLG6Ae.yP+XdIhB2FuM8fjP.G1Ll.3EnYjv0RAzr0QjlugaWGKMeiGrsRp4WhLAjD20eKvn02BzdkPJf6qDSAZ8pzo.MdUlW9XIlafHavXldSGWWCutN15P6Vj8VZifPzl6VF9f8O3iYs+YzERMswPvVVH0iOLB9WL6G8K1fbPEQGBANxJlM8O5jP1FUvVQGZPSjkBeisr0qZzB5glLMYMSJLwoNLYgEW9tQ7N5lJZP6ktiRi5HDcZ3WUytkQhonK9vBRJvmBHh9eAdA7XOEvWx5gQ1Bq5FaXAsuB36.VHuVDwfBOkoVF9xNcPS4QIR9bl577EvZRuDMN8hZblknwYd9DDrHuK9.fp6P3yyxHlnxouiJu0D0LycTyh3CFZiMHGRFCYTGmdw7NZwOmHBZzy22wl3iHxfpgO8.2R.sQxFCfYOaxhcH+GKRpnHtGccrR1Lr6RgFQqdFqk3OmXUZGyS5H7YVsZhUQcbR3qDdI7OvrQoT.WqolkwtZM8cbWW7kPNt0PcQXenoqStS0AsBERyQfn1f6ye3kIP+27or.P970vJcAPUVyxpAhekbZZfbnZ2ygSFcExJ7VVKJj9NbuQC1eaZTDafVuJ7V5pV.6dcZX35wHCY2W4WAxJl9kS0izlf8Bg5eMSaIYbXuNnFJNcyzctw1Cy4AlDVOQzOsBzzxGbGka5dJvWr.b32Vym50TWTJKGmtL8GtpH7nhrF0DE.8bfUKrpWaiYopo0DQUTMf7RZlJjRwpNIV0xAAYPWJkaxGvhCqCQez0vumqMoN3z+v8iC5N+gkYd3iXLrBABN5XLOTR2vRBJYjkyEwHsWUZHrKh7dYTkaRIuJZ9s4MQ7Y2jgMeClwYMVps4hn1wmL2Fzc4lPpfYnFbgUQ0ZqonknsUjdKZXREHpoj2Fu.+qH4JwpBjqnMVibbGzBAAkQ+yEfvJiaNZo4wDuFhxe2EXZA2MZ7nAUykg4zfkQQO9f.VUGncx4fWVNqmulqOwfCpQzV+BFxkolF15g0KpQbSWWpsunJfLBF1vWxwAIl6ZPzTQR8JZsrg98zMRBSENeACtU03g1dFt9n7aDX+KRxp8AHVSR7PmSjLim52+ZKTTW7gIpCkZAR0IE0Ax3Ij3yHpepkzbh++.YcPrOaLuiuPiJ+mqjVF2tYlVa62tFp8krIlvlu7FKTPh7wQ8HRkgQ2N8z7.YO6etXllR94oa997HDVyiyQUPX9R9PdviRVypzrtHGEuexT.V94+TshhOAZEBhiEszam1h.MyI9yEyzzOpZEg1G9EmdA1Ydhq4d3PrlJv1oE6nJeBot0clJVjhI8lLiTSltXJcRt5j6otCQWQfw2eq.ZaLaXUuYi6j..rEQRG9N3EDJepZVblZVLrlXNvOLES.SkZtL6xElXCNiis9lhyxGlh3mng2KmXxzxoHreVdRh6hmLUqYIzoFHDE+BReyMEhvEjTjecZHYgJJ3oPeTYL3GURRzZ2KGhDXwD7kTdQgYL1FBcdFpB0PSWBbimodujtQaSwMqwEwKIiClCxDDILEbCb0lkaxwz2KjyNYkh3xoD3mgQuzQUdBzqmlEbjg6xGUIt2ESKkBaz2wkIJKUTL.VnRJhXeWsvn+mnV3MAXhLv7LUMD6ppSOejFPxPMfjsHg3SFHr8W+1PObOWFKpJ5zyV2irWWzZ30sO9Vz+0h2DZYskkUxvVj74MZQejteNVEkv1.QRRDRFuY.snwwiqaR5e7HOosmXzbyjuCIBly1M0Z7zl0R8nJlSfOaJQ9KHyiVkRGUMZ5m7cvTBoBolSwOHXIWiHQDyJDXJJwODt6BDIUCKzXbZanuwhDWEGWikSvEU+YDgQE8KKg4SSMBDmarAq.UHEDK7FKT2m7zyPkpW7nD+HiF113ynn+3Y5Lp.zGVGpQfEJ2YqDVXyl9djvANOEI1B46DEx0dYXEHaZD1oJbh2gXDXRIEIg3LoFmf49M1.+6ESzgM60vPE4zkROeFZit+z37SRGelpg20ui5oo6BwmGkqlUxtuCM.ftuSj7aZxuYtXs4NNkrqtLiCpZO1wYukab16wNNEWtwo3G93Lu4h3CWqnKVw21vyKJarkD7tulcMZ6oZSDjvH6RMgfDoAGXFQjWXs6eb2B+f6ONGWC8TicW+M1NMdazjX7b30VLRPR2TSHpebHokKxenEik0E4uO3rWpIzHdbvoA1uoEilz2KZJlZB8lEglkGQCMrrbtAqdHMw3RsTlUfCCxyY.4KxvmNKxtQpLoPQ3gTIIwLROJHxw6N7JTKdZAQp.bb1L3.AgTYlCHF7zCBtoEWuHS5Thalc84kOhCEfpIw0nw3JbIlk2WS5Riz862vy+CxeyvSF8LlEuHbzEtpEtTxYLMmyRhT1cdRRPyjjDe2qDB1dQ7QVRdVVI4SnBJjHERkt3icBsb4fmmhc+2oucUXChrA5SizeC5NlPdLZw9hD9pXMSDyfs.eCnXhUuq.kSr5TYkZ5bJlBGzd3loGAL1S6IEyN6GDgA3dImnSJH0TG1xZLCYwOcC4L6oBQKdggbRYujmHE769FtRN.4Dqd2wiubL7YcIDkIgLWeV5d9HeLjnGT1pKYzvKG9nm34xhITpoOcNJLmLLN7KUINnWbYKJ5.15LgSkrEPOt0D24j74eZqryxCcGNzNx4SYG476zNB4T5muYjz2oYjEQUK7.jCFsESPoW.A81oHn2dmDTl6vvXlmdJJycQQYlfhXtXv0gN9FJ1IIHHwOj.LcQllysrfd1xvctEieWucuqFljdJrrzOthwV4ym7kjN9heIoYeGtaRYPLUDOYE5qz0vdQuY2wB3pwhsxWDfJzv6Sdcp+cAuN0QSoiA0isxWEm4YBIFA53Wd5+5JwhgWII1y9udV7rho44u7nqywq5a0WlWpfrBuZ+Cyy22wsur4tGWTg2O2d44UOUCk1WZKE91CJiRebmaj6uYtRJ7keyf77k6XLTl2cyJJ7us9v77ib2dnbeuRnzibykmucwRij6O5xiT36jaOI9hBVij2endMT4EqKwef0kBx8GXdhBe19GKwq6lEUd5AUUL42rhD+9mWAUd95nx61osDes7Bhx6eYZck8K+lcJX50XXF4h4UtRY+JkaVnu6AkxJW28DGkQmw0ofpUK6rxGWZ6qU5OpkeA9102NmrssrmhsQuzETOH+04j253S6ob4HQtB1iNbm7xx61quxgk1cGNdug54kqT6pAJW5zqLm44CykWN8IGMRw7MUpw0WVotDr7kWInzs+NmxwmMWSI3QWmUPw+f9nzMrMjjKqwInLP3fy35qZcoD7LWOQkK22PiKyUM8jf84FHpXsqrFm8MkbQk2ounh3o7nxGz9ZI4ix1UTonPi2xcVmycjjGU3RQEa2cdKm8kCsjjyT3XT6aT5bt9U7gRxUpVVTY6dcNia+NYMkfRRYDTJXk6Dt8eyguUBtSZDd4EN3DNdcySkjUt5sBJMR25Xtypz7XIXU0pH7lVrNm5YiNRB50kajxkGXTiKi8ApRxmO3PAk8qk8HtyL5kKOrlakQJcKebUt8OL+NRvcKUBkt+kJbps6HkGVw2cnxA816PNjlkPdYeQoAJ6mYzAb10zbxC0S2bfR+iKVhKS0CZmGd0gGgJ+Zt8Q0W2HuLcZ.Q2+yn59+lIz8I58+cwIV7C03i9hOD6ALwI8eahyeahyunl3r759YtCce0VBk4N6vVHrWsj4HkBuoXct9JCNVRVzQEwKNsTUNUqQ4yK6AsGpjuLuJ29WcbEjrXGT46qr8IbpCapKI2cmcP75cGVma+baVRBN7xNiPklsJ2YbNmHA8GUTTIuu0obl6cIRWoUuMQ7lA0P7V8RmJAg00ETJepPcN9aDqJA6dplfhqfzwb7s6TSR9lpEFoTV6zi4rgZmKIeVssDTpdLrFmsnklD7vS1STo74H7vqb1gRP6BuAU99pmxclq4gHcgcuFMdEPxR9NPT+co5dBJucTVT6GrYYIXO+9HYqXODdGnpHIevgXY61bpb74b7Pz+YVCTNQLWEt9cFdfD7.jbSIyoZpbmooNJOrSt7CTrNIaINd6Q8xCKj6MiTZebspb7E2UVRdaNwgJCxZWgKyw62IubsKGbihU8C1m6LKOjrezVWNPws4tGvolYzf7x417ngJlCyThyLeZMzbwhE5qT.obfveNk7vAl6dihak9xb629sGlGteFi9JGbsLp7tVUxCOogaekKMMQykqbIed4rVW2WQTsPQt96YLJmb8sy3prcgqGTfuzk54j6VSyGkVYyBpoycUNYs8x6oj47qGVP0c2cyIei1tHaEWMHSA9706kSNyg65qT1oxnBlU56lSVLikmR8ruwt.+9Vi1TtBJNAkxv7cJXltP+rx5bCcUT2YTNDMnZmSlmyAYKJidiB7cMs2T1qqoihpWgKKzuQ5cxJO7sGXqn1b3YELGl9pLyQ2+qBz8IQ7PT6+h3znelcQCpV++zyhmoPNd5EwBMe3kDeCspQoMk3UG5GktuD0B935WfubkyiRueA9F9FQoUKPsvGl9rB7CbSGk1r.u5aTEFm9xBzU.BSi3htksiR6Vf2V9znz8KPWgHL8HT+64FkFIkJdIy3ku.cEjw3miurxUQoQZM15GHNN81bzUXBSuKRKdSuzQzKmYe25YFm9.N5JPgoQqPvyUaywoQV7F0eTTZUN5JTgoQyR145iiRirJ.kLhRirxPVAaL+jS83h2Dk9sH7tW1nzM3nqvElVmi+frpQoM4LKHoGjdw9iPeDeI5VqFO3488t7H49bmI8iowYlSiQqni0risxJAQVfh1nqgqODGHyJaazG1zf90ZZ03aa3ckuSWRcCBnCMkYx4Rjf6Ii4mGuQqXCXGrgrIHewJFmwO8e9Z5qHNaNPeiNgersV8Wgx683BhxMMa1q76X.0udQf52DmMhUF388CdcD79oad8jvKFbZ3gxA+Yhx1mYTIT7rvK1jnlM2vCqDm26eOgNh4aLve1biMK0sTw6wH.JwPg+36lhB+K8llB+QsWS2Kgs53zylgx+wWGM.jmMHrmAOaFZ78APeJFRHAMetGKY9k2qq8QD2OdDCwEayW2Qigv+tokl+wYjlkdMlsi+3igOgTxCqZrkR990e8WOOI46mUlmISlYjjI9.B.YARxu2aZpSeFI4QKTR9DKx90e.NUxPO1OYzybzLW4oWyb0IMuTVqQf4kuHN49ENs6uzMPO6qiy7Ek4UuB.iceDMRK1DYgtFbzDePBe7fM8hjDiA6+3zfEvAD+3A3D2q2YKf6Fa38ZT6mZLqJer6PWfcZcvBMKg9wWsDNAr.ZP3+Hfo+kwIu2RTpeJd84ygWaXiqI9S4XYCMWa7WLQnWEG72uAMWT+uxyVJ6Y+0+56my5UyicLuUlRrn0c+6iOwt9yP8+kQrRv+3qa33hlAWUSG1yKJ+mOkj86+9Yjr+oWqgOwyvsS1COnaYYAhxXJZB7qd+xINWHU8OGeAmkwhnue75kj9d8LzGRn+wh99x60oyHx4mrdZVn82PWnM3AE+SwZse485c7B7FbZp7KVdp7qnTI8cG6SAQdeF62j0mo+7j1NoP92FO78yA6DzZf621ylywNexmfElxxNK5GYcO+1wrW5qR.cs9o.5gKEP+lm.flaQ.8+9GF6VYx.M80dXv7ofelmAlfaYk8+aimTF7sQANOFZ8OYHUh0fCKRe8+d.R+h3Ica0P6olax7MJ9yoQ89aiWwQumkl+jexjweXoCJ.hVZm86TL9qNrsGzeH6Gd5mruixKKD+53pP+lsmOFe1bvHJB5OFXL3qO8WEeGSSil9Q.7yiu6Yeb9TSGi9vm1pBIReTH.3ubzHalMMPitMZ8Zuv.VCRKfSi4.0Lr0IIvFbCJTLLFBbghgEFqiVSWm+TS5Vuf+9V+EjbPXxl7s.e03UvoAyY2d5f7Q6O0r4jc0LML8CsgYdnMbyGZCy9PaXtGZCy+Panz82PrKza0y2oCcZSrXUT2grGYqrxNDerIZqw9e..AlTtD
So far it works well, but currently it only does 1 plane row scanning with linear interpolation, the column scanning is implemented but I've haven't tested it yet cuz I found I need to prepare a new data array for testing this. The 3D plane scanning algorithm is there but the function itself is currently to be implemented.
I'm feeling like this might not only useful for scaling spectrum magnitude and phase but maybe also for something like partial envelopes, modulation tables and even maybe something like morphing between a sequence of presets of a synth.
I'll keep polishing this patch and would like to hear your opinions on this idea :)
I'm currently trying to get the alpha values of pixels from an image, store these values into an array and use that to scale spectrums (something similar to the jitter buffer in maxmsp), but i couldn't find any functions about getting values from pixels in Hise.
Has anyone tried this before?
@d-healey
It's a comment inside a for loop
https://github.com/christophhart/loris-tools/blob/main/Loris Toolbox/Scripts/Config.js#L49
I found it's also working when that line is enabled,or with a return 0 inside it.
@d-healey
just found out the problem
Seems like there's an empty for loop in the Config.js, which caused this issue...
I bypassed it and it works now! :)
@d-healey from the source
Here's my setting of hi_loris