@Simon I just saw that a recorder is part of the High Performance Backend. Time for more server tinkering.

Posts
-
RE: HISE Meet Up
-
RE: Settings.setZoomLevel()?
Are you referring to the plug-in preview in HISE? If so, I have to close the window and reopen to see the updated size here.
-
RE: Cable broadcaster and callback not updating above 1.0
I haven't messed with the global cable much. It might be capped at a 1?
Are your meters running on a gain factor of 0-1? If so, you'll need to convert Gain to dB. Then, you need to map the dBFS range to the analog VU meter scale, so that -18 dBFS (or -20 dBFS) aligns with 0 VU on your meter.EDIT: if your meter is actually PPM, 0 would be referenced to -9 dBFS or -12 dBFS.
-
RE: Anybody understand what Sine Shaping Distortion does / how to make it?
Maybe I've been living under a rock, but I haven't heard of a sine shaper before, so this piqued my interest. It's a type of non-linear waveshaper that folds the input signal back onto itself in a sinusoidal pattern. Apparently, it produces a smooth and natural-sounding harmonic generation.
There's some analysis here:
http://www.openmusiclabs.com/files/otasine.pdfThe formula seems to be pretty simple:
output = sin(foldAmount * asin(input)); // foldAmount controls how much the wave folds.
I threw together a quick Octave script to see what's going on.
Here's the Octave script if you want to play around with it:
% Korneff - Sinusoidal Wavefolder Variations clear; clc; close all; Fs = 48e3; % Sampling frequency 48 kHz %% Choose Input Type: 'sine', 'impulse', or 'dc_sweep' inputType = 'sine'; % <-- Change to 'sine', 'impulse', or 'dc_sweep' %% Input Signal Setup switch inputType case 'sine' f = 2; % Frequency of sine wave (2 Hz) duration = 2/f; % Duration = 2 cycles (2 periods) T = 0:1/Fs:duration; Vin = sin(2*pi*f*T)'; % Column vector for Vin case 'impulse' N = 2048; Vin = [1; zeros(N-1, 1)]; T = (0:N-1)/Fs; case 'dc_sweep' N = 500; % Number of sweep points Vin = linspace(-1, 1, N)'; % DC sweep from -1 to 1 V T = Vin; % Use sweep voltage as x-axis otherwise error('Invalid inputType selected. Choose ''sine'', ''impulse'', or ''dc_sweep''.'); end %% Sinusoidal Wavefolder Functions % (1) Standard Sinusoidal Wavefolder function y = standard_sinusoidal_wavefolder(x, foldAmount) y = sin(foldAmount * asin(x)); end % (2) Phase-Inverted Sinusoidal Wavefolder function y = inverted_sinusoidal_wavefolder(x, foldAmount) y = -sin((pi/2) * asin(x)); % The phase-inverted version end %% Single Processing Loop Vout1 = zeros(size(Vin)); % Standard Sinusoidal Wavefolder Vout2 = zeros(size(Vin)); % Phase-Inverted Sinusoidal Wavefolder foldAmount = 2; % Controls how much the wave folds (adjustable) for n = 1:length(Vin) Vout1(n) = standard_sinusoidal_wavefolder(Vin(n), foldAmount); Vout2(n) = inverted_sinusoidal_wavefolder(Vin(n), foldAmount); end %% Plotting if strcmp(inputType, 'sine') figure; subplot(2,1,1); plot(T, Vin, 'b-', 'LineWidth', 1); hold on; plot(T, Vout1, 'r-', 'LineWidth', 1); legend('Vin', 'Standard Wavefolder Vout'); title('Standard Sinusoidal Wavefolder Output'); xlabel('Time (s)'); ylabel('Amplitude'); grid on; subplot(2,1,2); plot(T, Vin, 'b-', 'LineWidth', 1); hold on; plot(T, Vout2, 'g-', 'LineWidth', 1); legend('Vin', 'Inverted Wavefolder Vout'); title('Inverted Sinusoidal Wavefolder Output (-sin(蟺/2 x))'); xlabel('Time (s)'); ylabel('Amplitude'); grid on; elseif strcmp(inputType, 'dc_sweep') figure; subplot(2,1,1); plot(T, Vout1, 'r-', 'LineWidth', 1); title('DC Sweep: Standard Sinusoidal Wavefolder'); xlabel('Vin (V)'); ylabel('Vout (V)'); grid on; xlim([-1, 1]); ylim([-1, 1]); subplot(2,1,2); plot(T, Vout2, 'g-', 'LineWidth', 1); title('DC Sweep: Inverted Sinusoidal Wavefolder'); xlabel('Vin (V)'); ylabel('Vout (V)'); grid on; xlim([-1, 1]); ylim([-1, 1]); else % impulse figure; subplot(2,1,1); stem(T, Vout1, 'filled'); title('Impulse Response - Standard Wavefolder'); xlabel('Time (s)'); ylabel('Amplitude'); grid on; subplot(2,1,2); stem(T, Vout2, 'filled'); title('Impulse Response - Inverted Wavefolder'); xlabel('Time (s)'); ylabel('Amplitude'); grid on; % Frequency response [H1, W1] = freqz(Vout1, 1, 2048, Fs); [H2, W2] = freqz(Vout2, 1, 2048, Fs); figure; subplot(2,1,1); semilogx(W1, 20*log10(abs(H1)), 'LineWidth', 1); title('Frequency Response: Standard Sinusoidal Wavefolder'); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)'); grid on; subplot(2,1,2); semilogx(W2, 20*log10(abs(H2)), 'LineWidth', 1); title('Frequency Response: Inverted Sinusoidal Wavefolder'); xlabel('Frequency (Hz)'); ylabel('Magnitude (dB)'); grid on; end
EDIT: script link fixed
-
RE: PKG notarisation issue
my command line prompt looks like:
codesign --deep --force --timestamp --options runtime --sign
-
RE: PKG notarisation issue
I had this happen to me a couple months back. I think it ended up being an issue with a file that was part of the package. I haven't tried the new export feature yet, but I think you can get the log file to see the exact issue with:
xcrun notarytool log <submission-id>
-
RE: How to get CPU serial number using HISE?
@Christoph-Hart @ustk Confirmed working:
finalize UniqueID: Use stable SMBIOS fields to generate ID on Windows (70837bae) 路 Commits 路 Dan Korneff / HISE 路 GitLab
The open source framework for sample based instruments
GitLab (gitlab.korneff.co)
It requires 2 new files:
juce_Span.h
juce_EnumHelpers.hand edits to:
juce_core.h
juce_win32_SystemStats.cpp
juce_SystemStats.cpp
juce_OnlineUnlockStatus.cpp -
RE: How to get CPU serial number using HISE?
@ustk Got it sorted. Sending to beta for testing now.
-
RE: External Sidechain, I got it working
@HISEnberg You need to set HISE_NUM_FX_PLUGIN_CHANNELS to the amount of audio channels + sidechain channels.
-
RE: External sidechain?
@Christoph-Hart Can we get the default name of the sidechain to be the name of our HISE project?
Right now, an external sidechain is named "External Sidechain (+bus)" which can get confusing if you have 2 different plugins made with HISE on the same channel. -
RE: Software for Animation Sprites....
@Orvillain Do you have a link to set this up? I'm using wavefactory, which is easy enough, but keeping everything in Blender would be nice.
-
RE: Having trouble with syntax for settings a panel value
In your code, the key is written as "pitchSetArrays"[0][0], which is trying to index the string "pitchSetArrays".
I think you need to do something like :
pitchSetArrays[0][0] = this.data.keyNumber; panel.setValue({ "pitchSetArrays": pitchSetArrays });
-
RE: How to get CPU serial number using HISE?
@Christoph-Hart Here's where I'm at:
begin update Machine IDs again (61455395) 路 Commits 路 Dan Korneff / HISE 路 GitLab
The open source framework for sample based instruments
GitLab (gitlab.korneff.co)
I'm currently stuck at
Severity Code Description Project File Line Suppression State Details Error LNK2001 unresolved external symbol "public: __cdecl juce::juce::MemoryBlock::~MemoryBlock(void)" (??1MemoryBlock@juce@1@QEAA@XZ) HISE Standalone_App Z:\GitHub\HISE\projects\standalone\Builds\VisualStudio2022\include_juce_core.obj 1 Error LNK2001 unresolved external symbol "public: __cdecl juce::juce::MemoryBlock::MemoryBlock(void)" (??0MemoryBlock@juce@1@QEAA@XZ) HISE Standalone_App Z:\GitHub\HISE\projects\standalone\Builds\VisualStudio2022\include_juce_core.obj 1 Error LNK2001 unresolved external symbol "public: __cdecl juce::juce::MemoryBlock::MemoryBlock(unsigned __int64,bool)" (??0MemoryBlock@juce@1@QEAA@_K_N@Z) HISE Standalone_App Z:\GitHub\HISE\projects\standalone\Builds\VisualStudio2022\include_juce_core.obj 1 Error LNK2001 unresolved external symbol "public: __cdecl juce::juce::MemoryBlock::MemoryBlock(class juce::juce::MemoryBlock &&)" (??0MemoryBlock@juce@1@QEAA@$$QEAV011@@Z) HISE Standalone_App Z:\GitHub\HISE\projects\standalone\Builds\VisualStudio2022\include_juce_core.obj 1
Any chance you could take a look? (ignore the image file stuff..)
-
RE: How to programmatically change table viewport component values?
@d-healey maybe you can fake it like this?:
HiseSnippet 980.3ocsV0saaaCElzIJsQqqncnO.B8J2gh.67iiCJFpWbR175Rp2bZvtqfl7HaBKQ5IR0DusBzq1q0dE1s6sXuAaGJIaozjkjZfoKL7gmy247oCO7ipehlCFiNgP8Oc1TfPef2fYJ63tiYREo2AD5C8NlYrPRP9R6OaJyX.AgRW4abKPWeUR1ye+x8YQLEGJWhPNSK4v2Kik1xU624UxnniXB3TYbkn2tSOtV0UGoSQ9rhWCxTFeBaDbByEVMOx2xLiIzuziyZzJjObuvFvl6FJFt6PX6cf8DvdsZy2Ir8Ns2ZSXq1sHz0NTHs5jAVlELXR2WKlMXr9bUdANSZjCi.mQSx.rx4KS5NVFI5Ou4XHD5p8KaUqj2pdh2wRgbw5ksrGk4HnDQ0lFs1MQoleBThVgRqlSoG6MfmHmZK833ym40Sg6fgLbuoJUxikT6undc0XDJ6FwrIvQInwBD0a0nwyCved1K78w8GiM3crjfyjv4S0I1lAeUvbvi.aWc7TsBMp+zEQ7TDYIvWozC+uAk40Av2WphjJHHLUwsRsJPqxb5vknipymC54XZiRgm4+q9qunlaX.6Ytkqm67EU8wGyTi.Qcb02iU5FYhKQEkrKKJZHNQV+xLAyRENdh1BuVUOiM9u2O3icEFds9JxUDjbstcGTRtIf0UowCgjp8BWf3fwkm1V6tMswyaIUBTq5oj1WOEJrORGIbSQt+e0YSRQOEmRqUvPLTa1L5WTLiBh46HDovMjtXChj8RTJL7nNjONIOrHIChjBHIKA2yKaW4Z.+ldGvrL2IlBZgTcJjXktNB8.3cnFU94m08N.LSr5oY7tXVfPu+cl4Wrnve3G5LqjEmz4bovhhWdzemRHiA4nwVm02gVRKDabEm4a7E9gjTCpYZP+zZjJz3A256dY4+yetR4+vu0wXm41lWKKPRrTHhf9ZizMFUQC+OPo9oCj+BFpmWyMZfQpppmGytnZq0jFFJuHSaNTFEarHu5EiR1tl0aLPf.BYoQ1.yDLO344If3TcV7jqpdg5lZQZDydYwT20LENbjspBlSkRguDypdMzmfBaiaTg8tRwG60WZ4iudNV6Z3n6Xw+Cbr3doO26vvPfaKI3pdG8SK6kP2R4+QcpUpFcLC25wAAuSRiGf2eyAr5JEDYbC40bJB41Mb1tNv.PIxL9G7ovYSmMsvYy4NwgNdh9s7bI.2Me2OaEjSpruLXc7STP6fqb1m3FzkukyubptBvMWVfasr.2dYAtyxBr0xBb2kEX6aGn66j95TqNN+XCgbb+CyzpozCULbBLaZk7unaOxiI
-
RE: How to get CPU serial number using HISE?
@ustk I think the method can just be swapped out with the new one.
I've been tinkering with implementation on this end. Lots of little hurdles backporting from juce 8. Got a huge stack trace to work out, but I've been too swamped to complete -
RE: How to get CPU serial number using HISE?
@Christoph-Hart Would you want to give me a "this is how I would do it" outline and I could take a run at it? Just trying to manage the pitchforks.
-
RE: How to get around max start offset is 65536?
@d-healey Can you use getSampleLength() to calculate the 0-1 value?
Something like:var totalSamples = currentSample.getSampleLength(); var offsetSamples = (offsetMs * sampleRate) / 1000; var normalizedOffset = offsetSamples / totalSamples;
And then use the normalizedOffset value for your modulator?
-
RE: Has anyone run a successful Facebook Ads campaign using Advantage+ audiences?
An audience defined by your pixel will almost always deliver better results because META knows exactly who to deliver the ad to.
The Advantage+ audience is really good at creating brand awareness. Use a lookalike audience of your website visitor and then create placements that promote your brand. The goal isn't to make conversions with these, it's about reaching people that don't know you yet.