@dustbro Yeeeeeeaa ........ that will be so much helpful to me.... great...
Tania Ghosh
@Tania Ghosh
Civil engineer. Learning HISE framework.
Posts made by Tania Ghosh
-
RE: How to Emulate Hardware or Software Instruments/FX in HISE
-
RE: How to Emulate Hardware or Software Instruments/FX in HISE
#include <math.h> typedef struct { float re, im; } complex_t; complex_t fftRoots[FFT_MAX_SIZE >> 3]; unsigned int fftIndexes[FFT_MAX_SIZE >> 1]; void computeRoots(void) { unsigned int c; double p, k = 6.2831qEXY9X37kqHH11UeNi9CqMLiPBUQm8G9 / FFT_MAX_SIZE; for (c = 0, p = 0.0; c < FFT_MAX_SIZE >> 3; c++, p -= k) fftRoots[c] = { (float)cos(p),(float)sin(p) }; } void computeIndexes() { unsigned int c, j; const unsigned int m = FFT_MAX_SIZE >> 1; for (c = j = 0; c < m; c++) { fftIndexes[c] = j; j ^= m - m / ((c ^ (c + 1)) + 1); } } void rfft(float* data, const unsigned int z) { unsigned int w, w2, i, p, inc; float x, y, x1, y1, x2, y2, rx, ry, tmp; const float scal = 1.f / (float)z; float* data2, * dataover = data + z, * ptr1, * ptr2; complex_t* rotptr, * rotators = fftRoots; unsigned int* bitrev = fftIndexes; for (i = 0, ptr1 = data, inc = FFT_MAX_SIZE / z, w = z >> 1; i < z; i += 2, bitrev += inc) { p = *bitrev; x = *(ptr1++); if (p > i) { tmp = *(ptr2 = data + p); *ptr2 = x; x = tmp; } p += w; y = *ptr1; if (p > i + 1) { tmp = *(ptr2 = data + p); *ptr2 = y; y = tmp; } *(ptr1--) = (x - y) * scal; *ptr1 = (x + y) * scal; ptr1 += 2; } for (w = 2, w2 = 4, inc = FFT_MAX_SIZE >> 2; w < z; w <<= 1, w2 <<= 1, inc >>= 1) { for (data2 = data; data2 < dataover; data2 += w2) { x = data2[0]; y = data2[w]; data2[0] = x + y; x -= y; y = data2[w2 - 1]; data2[w2 - 1] = x; data2[w - 1] *= 2.f; data2[w] = -(y + y); if (w < 4) continue; ptr1 = data2 + (w >> 1) - 1; ptr2 = ptr1 + w; x = *(ptr1++); y = *ptr1; x1 = *(ptr2++); y1 = *ptr2; tmp = (x1 + y1) * 0.7071067812f; y1 = (y1 - x1) * 0.7071067812f; x1 = tmp; *(ptr1--) = y + y1; *ptr1 = x + x1; *(ptr2--) = y1 - y; *ptr2 = x - x1; if (w < 8) continue; for (ptr1 = data2 + 1, ptr2 = data2 + w - 3, rotptr = rotators + inc; ptr1 < ptr2; rotptr += inc) { rx = rotptr->re; ry = rotptr->im; x = *ptr1; y = *(ptr1 + 1); x1 = *(ptr1 + w); y1 = *(ptr1 + w + 1); x2 = *(ptr2 + w); y2 = *(ptr2 + w + 1); tmp = rx * x1 - ry * y1; y1 = rx * y1 + ry * x1; x1 = tmp; *ptr1 = x + x1; *(ptr1 + 1) = y + y1; *(ptr2 + w) = x - x1; *(ptr2 + w + 1) = y1 - y; x = *ptr2; y = *(ptr2 + 1); tmp = rx * y2 - ry * x2; y2 = -rx * x2 - ry * y2; x2 = tmp; *ptr2 = x + x2; *(ptr2 + 1) = y + y2; *(ptr1 + w) = x - x2; *(ptr1 + w + 1) = y2 - y; ptr1 += 2; ptr2 -= 2; } } } } void rifft(float* data, const unsigned int z) { unsigned int w, w2, i, p, inc; float x, y, x1, y1, x2, y2, rx, ry; float* data2, * dataover = data + z, * ptr1, * ptr2; complex_t* rotptr, * rotators = fftRoots; unsigned int* bitrev = fftIndexes; data[0] += data[0]; data[z - 1] += data[z - 1]; for (w = z >> 1, w2 = z, inc = FFT_MAX_SIZE / z; w > 1; w >>= 1, w2 >>= 1, inc <<= 1) { for (data2 = data; data2 < dataover; data2 += w2) / { x = data2[0]; y = data2[w2 - 1]; data2[0] = x + y; data2[w - 1] += data2[w - 1]; x -= y; y = data2[w]; data2[w] = x; data2[w2 - 1] = -(y + y); if (w < 4) continue; ptr1 = data2 + (w >> 1); ptr2 = ptr1 + w; y = *(ptr1--); x = *ptr1; y1 = *(ptr2--); x1 = *ptr2; *(ptr1++) = x + x1; *ptr1 = y - y1; *(ptr2++) = 0.7071067812f * (x - y - x1 - y1); *ptr2 = 0.7071067812f * (x + y + y1 - x1); if (w < 8) continue; for (ptr1 = data2 + 1, ptr2 = data2 + w - 3, rotptr = rotators + inc; ptr1 < ptr2; rotptr += inc) { rx = rotptr->re; ry = rotptr->im; x = *ptr1; y = *(ptr1 + 1); x1 = *(ptr2 + w); y1 = *(ptr2 + w + 1); *ptr1 = x + x1; *(ptr1 + 1) = y - y1; x -= x1; y += y1; x1 = *(ptr1 + w); y1 = *(ptr1 + w + 1); *(ptr1 + w) = rx * x + ry * y; *(ptr1 + w + 1) = rx * y - ry * x; x = *ptr2; y = *(ptr2 + 1); *ptr2 = x + x1; *(ptr2 + 1) = y - y1; y += y1; x -= x1; *(ptr2 + w) = -rx * y - ry * x; *(ptr2 + w + 1) = rx * x - ry * y; ptr1 += 2; ptr2 -= 2; } } } for (i = 0, ptr1 = data + 1, inc = FFT_MAX_SIZE / z, w = z >> 1; i < z; i += 2, bitrev += inc) { p = *bitrev; y = *(ptr1--) * .5f; x = *ptr1 * .5f; x1 = *ptr1 = x + y; if (p < i) { *ptr1 = *(ptr2 = data + p); *ptr2 = x1; } p += w; ptr1++; x1 = *ptr1 = x - y; if (p < i + 1) { *ptr1 = *(ptr2 = data + p); *ptr2 = x1; } ptr1 += 2; } }
How can I use this type of code and call it from HISE?
-
RE: How to Emulate Hardware or Software Instruments/FX in HISE
@iamlamprey @Lindon @Fortune ... I have one question.... For more customization do I need to write own C++ DSP code? if so, then how to integrate my custom DSP Modules with HISE? HISE works with Java script... I can do basic stuffs with JUCE or WDL but it is very daunting to work entirely with JUCE/WDL/RackAFX and make a complete plugins with JUCE only(without HISE).. I love HISE so much because of it's API and JAVASCRIPT....What steps do I need to follow to overcome this type of DSP C++ integrated approach?.. I have seen @orange has made some emulation stuffs with HISE using C++.
-
RE: How to Emulate Hardware or Software Instruments/FX in HISE
@iamlamprey
Where to start ? How to calibrate such things with math? Research.. yes ...after my building construction job I can spend time for R&D.. But I need proper guide ,tutorials documentation to follow..
-
How to Emulate Hardware or Software Instruments/FX in HISE
Is it possible to emulate an entire instrument/FX in HISE? For e.g Roland JUNO 60 or TAL-U-No-LX "Chorus" effect is very impressive... How to emulate such thing? Any help?
-
RE: Panel Scroll Zoom In/Out
@Natan I got it..... I have to make knob,slider with paint routine too..... knob sliber with Image strip will not work... ok... Got it..
Thank you
-
RE: Panel Scroll Zoom In/Out
@Natan Is this possible //? ```
HiseSnippet 1061.3ocyWstaaaCElxwZsVatXEnO.B8WJCtNRt2FPQwbiS7lQWRMp6x1vvPAsDsEQjIMjnahQQdN1e2ixdj1av1gjR1TY9FLP.F8OD34524vy4P59o7PRVFOEYU6CymRPVek8f4LQbmXLkg5cBx5A1mgyDjTWMoimOEmkQhPVVG78RBV0phTq+96NFmfYgjkjPnK3zPxORmPEKo1u8aoIIcwQjOPmXH8yZ2Kjy5vS3y.7bfsOZJN7R7Xx4XoXUrQVewoQTAOcf.KHYHqpGyilOHleESK+EzL5vDhbS.Z.XHM4t7jHIhkTQchoIQ8Kh6LDXk9KyBGnyBOx9LZDcA8kYiuVwvcoFl4CqJaBdAlvye2gmkA7ppg2CsGDlRmJVxQhsuztGCNnFggi.SXokEU4OpZ2gCRvDMmfujzME1rPCuW362v8499G9p5N0cN5n2x3CCp6.mHYB2OgScUDbesagMFSDc3SlxYvFuGq39XsxTVBkQbGMiEJnblKmo3JULkm3EVnUCvtIyHGV24y0cp0GyHIAMSISgjsvSZJMsVkncixEaDDMyjTUNqCNIYHTE4UFCEAo1mlQolxZCSMaUbdKcZsYcZkmap6jGm.F6KCp2ymIfrkWQ1xarNe3BqwMGAcJuIIwy+5tcCdo7mzLRdERnhUYKiRF8R6JsT5uRXdcC24MbupgabISbE.7m5669M5SXI3uPdr3U3o3sIv0f.hXZljyOSiDwdG5djaK2m.1F9lK0bCo9ABcbrXgXwFhYF4umDJ79sk392K7HrbtoTBs0NkPWWRy2WW3uCopfskpB9eZpxnc7btf7Nl2gNe1olyMNt2l0nQqjWdySBIckrkSyS2jhdrYSFRRKZ6KDDFqUdto85maZNVOT2sYHHm0iQEuaJgstoon7VTXtZkbTAhJTSUeP9T0AIzHRJhBCOums5bDo.r4UcncV4V2VYX8S8NAKvxY64vAf3TRpfJidqSHeBtzTOoul8IjrKE7oJ7lORAtGT6z5E2CH6.T97915wKnqW3v+bX64K89u19JYY2BB+UZ6XUElIEItV3q6sEe0xvWn.SeEzdJNErggwVfuxn.f0sPAPoDJr2ZZ1.EOxDEsWKJZIKGVPr5VqBt17PbdoSz+6czvKE3QyRvhxOeP9lobFPuQo6ok2Eyxnh4lEZ2IuoXWg6Cs6SEgwqFuUVAdksU2w3M+EZ0sOczHXl2RvV0t6ub2+bLj95kwmgEoTnfv97YSF.WjDR.jvfhJ47KqJxIM589x8xLy.BKRs4efUNy.4dqblAELQSvgo7OFpGwHeC38UT.LwTOEtF7lbXu6hAS119M8QSfml9wvPYp3I.1WsNs1Ccd5dnyy1Ccd9dnyK1Ccd4dny2tQcj+qf2LSvmnaS.B8OUMi2x5TFFpxTUjn+EjgcC1N