HISE Logo Forum
    • Categories
    • Register
    • Login
    1. HISE
    2. Orvillain
    • Profile
    • Following 1
    • Followers 0
    • Topics 63
    • Posts 496
    • Groups 0

    Orvillain

    @Orvillain

    89
    Reputation
    64
    Profile views
    496
    Posts
    0
    Followers
    1
    Following
    Joined
    Last Online

    Orvillain Unfollow Follow

    Best posts made by Orvillain

    • RE: Need filmstrip animations

      @d-healey I really like that UI. Very simple, accessible, and smooth looking - for lack of a better word!

      posted in General Questions
      OrvillainO
      Orvillain
    • RE: Can We PLEASE Just Get This Feature DONE

      Free mankini with every commercial license???

      posted in Feature Requests
      OrvillainO
      Orvillain
    • RE: Orv's ScriptNode+SNEX Journey

      Lesson 5 - SNEX code in a bit more detail.

      So I'm by no means an expert in C or C++ - in fact I only just recently started learning it. But here's what I've sussed out in regards to the HISE template.... and template is exactly the right word, because the first line is:

      template <int NV> struct audio_loader
      

      Somewhere under the hood, HISE must be setup to send in an integer into any SNEX node, that integer corresponding to a voice. NV = new voice perhaps, or number of voices ????

      The line above declares a template that takes this NV integer in, and creates a struct called audio_loader for each instance of NV. Indeed we can prove this by running the following code:

      template <int NV> struct audio_loader
      {
      	SNEX_NODE(audio_loader);
      	
      	ExternalData data;
      	double note = 0.0;
      	
      	// Initialise the processing specs here
      	void prepare(PrepareSpecs ps)
      	{
      
      	}
      	
      	// Reset the processing pipeline here
      	void reset()
      	{
      		
      	}
      	
      	// Process the signal here
      	template <typename ProcessDataType> void process(ProcessDataType& data)
      	{
      
      	}
      	
      	// Process the signal as frame here
      	template <int C> void processFrame(span<float, C>& data)
      	{
      
      	}
      	
      	// Process the MIDI events here
      	void handleHiseEvent(HiseEvent& e)
      	{
      		double note = e.getNoteNumber();
      		Console.print(note);
      
      	}
      	
      	// Use this function to setup the external data
      	void setExternalData(const ExternalData& d, int index)
      	{
      		data = d;
      	}
      	
      	// Set the parameters here
      	template <int P> void setParameter(double v)
      	{
      		
      	}
      };
      
      

      There are only three things happening here:

      1. We set the ExternalData as in a previous post.
      2. We establish a variable with the datatype of double called 'note' and we initialise it as 0.0. But this value will never hold because....
      3. In the handleHiseEvent() method, we use e.getNoteNumber() and we assign this to the note variable. We then print the note variable out inside of the handleHiseEvent() method.

      Now when we run this script, any time we play a midi note, the console will show us the note number that we pressed. This is even true if you play chords, or in a scenario where no note off events occur.

      That's a long winded way of saying that a SNEX node is run for each active voice; at least when it is within a ScriptNode Synthesiser dsp network.

      The next line in the script after the template is established is:

      SNEX_NODE(audio_loader);
      

      This is pretty straight forward. The text you pass here has to match the name of the script loaded inside your SNEX node - not the name of the SNEX node itself.

      2aa2dbe0-4ea2-40b8-8a45-49d96ada26ec-image.png

      Here you can see my SNEX node is just called: snex_node.

      But the script loaded into it is called audio_loader, and so the reference to SNEX_NODE inside the script has to also reference audio_loader.

      posted in ScriptNode
      OrvillainO
      Orvillain
    • RE: scriptAudioWaveForm and updating contents

      @d-healey said in scriptAudioWaveForm and updating contents:

      @Orvillain Did you try, AudioWaveform.set("processorId", value); ?

      Yeah I did, and it does update it based on a follow up AudioWaveform.get('processorId') call - but the UI component doesn't seem to update, and still shows data from the previous processorId. When I compile the script, then the UI updates one time... but not on subsequent calls to the set method.

      I figured I needed to call some kind of update() function after setting the processorId, but no such luck so far.

      posted in General Questions
      OrvillainO
      Orvillain
    • RE: UI Design - AI?

      They're all crap quite honestly.

      posted in Presets / Scripts / Ideas
      OrvillainO
      Orvillain
    • RE: c++ function optimization using vectorization or SIMD???

      @griffinboy said in c++ function optimization using vectorization or SIMD???:

      It's more popular nowadays to store waveforms in frequency domain using FFT, and to silence bins above Nyquist before inverse FFT. Either that or use filters to make mipmaps (multiple copies of your waveform at different pitches, with antialiasing filters applied, baked into the copies, play back the appropriate pre-antialiased file for the pitch) optionally doing so at 2x oversampling and using additional interpolation to remove aliasing that happens from extra processes that happen in Realtime.

      Cheers dude! I was aware of this, but I wanted to see how far I could get with sinc. Turns out, quite far! I've got 22% CPU usage for about 30 voices now. Which isn't really super optimal, but it was a fun project.

      That paper you linked me a while back - https://www.mp3-tech.org/programmer/docs/resampler.pdf - was what got me interested.

      I think I understand the process you mean though, for the mipmapping approach. Something like:

      • Oversample original audio x2 (juce::dsp::oversampling can handle this)
      • Set up a root note
      • For mip-maps below the root note - lowpass and downsample (dsp::FilterDesign::designFIRLowpassWindowMethod then keep every 2nd sample)
      • For mip-maps above the root note - upsample and then lowpass (use the same oversampling approach here for the upsampling and then the same kind of FIR filter???)
      • Store each level, and then move on to the playback engine

      I think that'd be the approach??

      Playback engine-wise, I'd still need to have an interpolation method to playback notes in between the mipmap levels I would guess. Can Hermite cover this, or do I need to go polyphase still?

      posted in C++ Development
      OrvillainO
      Orvillain
    • RE: Getting debug output to the compiler console..

      Hey apologies for the bump. But I got this to work by putting:
      JUCE_LOG_ASSERTIONS=1

      into the preprocessor definitions and then rebuilding. I get data from my custom c++ node printing to the visual studio log:
      947b7f47-31e0-48be-ad66-7de6be45afe0-image.png

      It wasn't working until I did that.

      posted in C++ Development
      OrvillainO
      Orvillain
    • RE: Orv's ScriptNode+SNEX Journey

      @Orvillain

      Lesson 4 - SNEX Node layout.

      I'm still wrapping my head around how the SNEX node works.

      The first thing to note is, SNEX code does not support strings. The documentation for HISE does make this clear, but if you haven't seen it yet... then I've told you again! Here's the docs link:
      https://docs.hise.audio/scriptnode/manual/snex.html#getting-started

      As the docs say:
      The Scriptnode Expression Language (SNEX ) is a simplified subset of the C language family and is used throughout scriptnode for customization behaviour.

      Which means that most of the syntax you're used to when writing interface scripts, is just not going to be the same. There are some overlaps however - Console.print() is still used in SNEX scripts. However, print messages only get logged to the console when you put the SNEX node into debug mode. Which you can do by clicking this button:
      13b51aa6-bc19-42f4-a155-79e6a22b5edd-image.png

      From what I can tell, by default we have the following methods:

      • prepare
      • reset
      • process
      • processFrame
      • handleHiseEvent
      • setExternalData
      • setParameter

      Each one of these methods has a purpose. I'm still experimenting to figure out what those are, but here's what I've come up with so far:

      • prepare
        This is called when you compile or initialise your SNEX node, and it seems to run for each audio channel. I would guess this is meant to setup global parameters like sample rate and block size. Things that do not change from voice to voice.
      • reset
        This is called when you trigger a voice, in my case from midi. When using a ScriptNode Synthesiser, the midi passes into the node automatically. This is where you would initialise variables that can hold different values from voice to voice, but that must start out with the same default value each time.
      • process
        Haven't quite figured this one out yet.
      • processFrame
        Haven't quite figured this one out yet.
      • handleHiseEvent
        This is called when you trigger a HiseEvent - typically a midi event. This is where you would parse out your midi notes, velocities, controllers, and program changes; any midi data really.
      • setExternalData
        This is called whenever there is a change to the external data. In our case, that would be the AudioFile we added in previous steps. So for example if you went to the complex data editor for the External AudioFile Slot (in the node editor) and loaded a new file, this method would get called. This is where you would resize any arrays that you're using to store the sample data, for example.
      • setParameter
        This is called whenever a parameter inside the SNEX node is adjusted. You can parse the parameters out by using if statements and checking P against 0, 1, 2, 3, etc, depending on how many parameters you actually have.

      SNEX has some hard-coded variable names, most of which I don't know yet. But a valuable one is "ExternalData". Consider this code:

      template <int NV> struct audio_loader
      {
      	SNEX_NODE(audio_loader);
      	
      	ExternalData data;
      	// Initialise the processing specs here
      	void prepare(PrepareSpecs ps)
      	{
      
      	}
      	
      	// Reset the processing pipeline here
      	void reset()
      	{
      	
      
      	}
      	
      	// Process the signal here
      	template <typename ProcessDataType> void process(ProcessDataType& data)
      	{
      
      	}
      	
      	// Process the signal as frame here
      	template <int C> void processFrame(span<float, C>& data)
      	{
      
      	}
      	
      	// Process the MIDI events here
      	void handleHiseEvent(HiseEvent& e)
      	{
      		
      	}
      	
      	// Use this function to setup the external data
      	void setExternalData(const ExternalData& d, int index)
      	{
      		data = d;
      	}
      	
      	// Set the parameters here
      	template <int P> void setParameter(double v)
      	{
      		
      	}
      };
      

      Most of it doesn't do anything. But we have established that ExternalData is linked to a variable called data. We can also see this in the data table view:

      3432f74b-5161-4a02-bcb4-06589ff748d5-image.png

      Notice how ExternalData is a Data Type, and it is named data. Also notice how it has a variety of sub attributes - dataType, numSamples, numChannels, etc.

      Let's swap out the file loaded in the AudioFile editor:
      ae436812-4ef9-4d74-b7c7-1b01d056c4d5-image.png

      Notice how numSamples has updated, and also numChannels.

      Back to the code:

      // Use this function to setup the external data
      	void setExternalData(const ExternalData& d, int index)
      	{
      		data = d;
      	}
      	
      	// Set the parameters here
      	template <int P> void setParameter(double v)
      	{
      		
      	}
      

      The data variable we established as ExternalData at the top of the script, is now actually having the data pushed into it by the setExternalData method - which has two inputs; "d" and "index".

      This shows the very very basics of getting sample data into a SNEX script. But we're still not doing anything with it yet.

      posted in ScriptNode
      OrvillainO
      Orvillain
    • RE: Orv's ScriptNode+SNEX Journey

      @d-healey I don't mean to be rude, but please don't distract from the purpose of this thread. Beautiful code and efficient code isn't the point here.

      The point is to demonstrate how the API works, and for there to be a resource for people who come along in the future looking to do sample loading from their scripts, and looking to do advanced things in ScriptNode or SNEX.

      I know full well that in a real world scenario, you wouldn't specify a bunch of files each as an individual const, and you'd put them in a key value pair inside of an array, or perhaps a function acting as a meta-object.

      posted in ScriptNode
      OrvillainO
      Orvillain
    • RE: Orv's ScriptNode+SNEX Journey

      @Orvillain

      Lesson 3 - using the SNEX node with sample content.

      This one is something I'm still getting my head around. @Christoph-Hart kindly provided a one shot SNEX node demo, which you can find by going to the example snippet browser in the Help menu:

      9dc656c3-1c19-4519-a65b-23a8b0f68951-image.png

      This will open a whole new window where you can experiment with snippets. Maybe I'll go over the specific snippet in another post, but for this one... we're starting fresh, and we're going to just do the basics.

      So.... here we have a basic interface script that gives us some file const references, an AudioSampleProcessor retreiving the AudioSampleProcessor from a Scriptnode Synthesiser in our module tree. That synthesiser has a DspNetwork assigned to it:

      694c0445-52bf-4463-9e87-26e544831daf-image.png

      Right now, if we run the code... it will fail to find the AudioSampleProcessor as explained above. Let's add a SNEX node:
      79d066a0-73ee-4e1a-95db-b38bf740fc4b-image.png

      When you do this, it will be blank. You will need to click the three dot menu icon and choose "create new file" - strangely enough, you have to do this even when creating an embedded network. But fine. Let's do it:
      bb7e6551-caff-4400-a6df-a48dc78ca076-image.png

      We need to give it a name:
      40eba1f6-f540-44cf-a267-eec804013f1e-image.png

      At this point, the node becomes active, indicated by the green highlight text:
      644f74ac-0bb3-4dff-b3c8-aa7a1857925e-image.png

      Now if you open the same menu, you get more options:
      335c2077-daf7-41c7-a48e-d0a8bf3b4faa-image.png

      We're going to select 'Add AudioFile':
      bdc1ef26-6564-497a-88cf-c936e11b18fe-image.png

      You can see that now there is an extra icon in the SNEX node, which opens the AudioFile "Complex Data Editor" panel.

      We can add an External AudioFile Slot using the icon on the right hand side:
      1f59716d-91f4-46c7-9acf-06dc11862eee-image.png

      And now you can see that the data editor will display whatever sample you assign to that AudioSampleProcessor from your script:
      fbdb8b3a-79c1-4f4c-89f8-0b16ad744232-image.png

      So here we see that file_r has been loaded into the buffer, and if we wanted to do file_f instead we could change the code to do that:
      8a440106-6b99-411d-92a1-9bb2cbdc1bf6-image.png

      Note - you will not be able to playback the audio at this stage, as your SNEX code will be completely empty. If you click the icon on the right side, it will open the code editor for this SNEX node:
      74b46993-1131-4f9e-905d-5606bc69f521-image.png

      So whilst the data is loaded, our code isn't doing anything with it.

      posted in ScriptNode
      OrvillainO
      Orvillain

    Latest posts made by Orvillain

    • RE: Crash on MacOS in compiled plugin when working with HardcodedEnvelopeModulator

      Is anyone else able to reproduce this on MacOS? Just curious if it is a me thing or not. I can't think why it would be mind you.

      posted in Bug Reports
      OrvillainO
      Orvillain
    • Crash on MacOS in compiled plugin when working with HardcodedEnvelopeModulator

      I'm getting this on MacOS Sequoia 15.5 and all DAWs.

      This is the most basic example I can come up with.
      Here is the project snippet.

      HiseSnippet 1352.3oc2XstaaaCElJNLKwYEXsqCcX.aPHX+vcnKvxw4FFFpy8ZrlDiXuzh8mBZIZahHQJHQklrg8rs8HrGg8Hz2fsCEssnRbbSMlaSW9QP3gmC4QmKeeGlFQBWZbrHBYUr0kgTj0mhadIW1amdDFGUeWj08vs8I7yB8S5BR19xPRbL0CYYU3.kJVKLKJ8m27zsIfhtzLQHzoBlK84r.lLSZiZ+Dy2eehGsEKvP6p0p6J36H7EIf6T.WFERbOizkdDQo1LXzyHw8PVeGd8Moq2d8UqtQkUHa533VYSO2pUJux5q5Uo5Zq0tryJqTci1qirlaOOlTD0TRjzXj0raK7trYOwq45K3TVLqsOUsvA0DtYs38E9dpOQkTzN8X9dMFDmhQvg1HKpUPG0dH9PlGan7rn2mktgclElAPqYx6dEx4dNltWYC2aDtjkgKMq1ktOtoaDKTlsixeVDWmKoQcHPdxzUz5hlokEdGAnAWtb.4L59QvhgVTZsxkehM7qG+CEKB4pXo84jH6mQh7bEPDaO94TeQH8PgWhOA9vbr+Q6zxok6RkM8Ex8eYokFi5KAG7X1d4XpbuNcntxRKocXPminxWKhNCLsSB2UxDbaA+HgjdLuziK9aEWn3uWz9pa0oyH2S8oGI78oQibaU8Zz3LrDOInMM5IPXwOgNTQHmjOQiu4DsYcnqNSXnnfWmyjGGR42T0Ipe5C9qet9tDIQUczWFnWHMRxTtf0tzygdScsxB3cowmIEgP240JjfR3AY.y5ZU2e+MfXPthIUACOlIuzDc3+rh8aqKdebClzs2n8wYFgOBQpogO1Gh3dXcoalCNKd+WNcvCLu940W+WgOvWzl3mEnfZBvSnZbgut+11C22dnBNiA0+utsn9g2ZT+q1rL6sqY4s.ZO6cNP6aac7mesTS76wtsbTK8qk9F7PPZ6AnzYdW+5owfimy8OTvEg8DblqYIzITYDqaWn5zb.CVnvmDciez8oBPVO.eU5g2kVamoO7Sg+eC+bhHQx3cOj.IwK.5tiRBZB82tT314bpuhBzZFEYkdcY0ZUDnIk6kt3efe5uoiZsU+McFrIRe3FLbbZJaLx5SZQhf4Mp6o5czpYaT7A+4vzrxmpy8nWn+TLxJKhKu7pqrYUXnRzVIWzWo4veuyxk0BFpJFTUY64.2pFApbtLvizYfEwufbNMcbnz3+WjttiHJv9.J.yd8VioNT6wtRvEZEQ3wghXpi4I2jFvZI3z3bRuhEUFoE4jtKUlvyezZQ4zREJ1GBEF5MesABqXJrAgm6vf04NoCUUbCV92OcONApYaRgubuiicg.SJFkApQiD+X5KXdxdNlFlIthoXErFjCyAVYUXZvXM2GsLVe.GNLGc0BC7wlrfPe5.hnTe7AvHucHI9xARmXVoQ9AskTBOdMSxCqcB0mRhMZG+1ZOGlthDowilnXgy67qBGY95KwZ20VgWX+w6P8SYV0bwyhCdkslfI+zOih1YJMyyNIwRQfhqaFL5T0yNyAIGHDxd.Ubdlf50tJj0jONT5cdBg2kpB004gIR8JKbfI8Uo+LfXfLWpVFgoUgXIMrI6Wy0GzhdgDn0SUJRQep3WjJ9EfFJQdS2ya9ib2ip+bb2C7L4XJ.d1P.QVndZq3egFITuP7Nza3FOX6gYEZ2MaZeDFXdqXm14Z+gYf32GSj993NBHtQhW4p+2MovjlOUB7cyS+ujt.f7.qscPmeUrf.XBgW45l+ntlgUlTCWYRMr5jZ3pSpgqMoFt9jZ3FucCUCvsUBfkq6MfAYarW5qarrzyvl1lf9W75mYoO
      

      Make sure to compile DSP networks. Then re-load HISE and compile the project to create a VST3.

      The script does this:

      const var HardcodedEnvelopeModulator1 = Synth.getSlotFX("HardcodedEnvelopeModulator1");
      HardcodedEnvelopeModulator1.setEffect("ScriptEnvNetwork");
      

      Essentially what we have is:

      • Global modulator container
      • Hardcoded envelope modulator - with a ScriptEnvNetwork loaded into it (consisting of an oscillator, sig2mod, and peak node) compiled to 1 channel (mod sources need 1 channel from what I can tell)
      • Waveform generator
      • Matrix Modulator assigned to pitch of the waveform generator.

      The interface script sets the HardcodedEnvelopeModulator to the correct network by using the setEffect() method.

      The HISE project works fine on Windows and MacOS. The plugin will compile on Windows and MacOS.

      But on MacOS, the plugin will crash the host on plugin instantiation. Seems to be a null pointer or dangling pointer issue. The crash does not occur on Windows, from what I can tell.

      @Christoph-Hart

      posted in Bug Reports
      OrvillainO
      Orvillain
    • RE: Crash when creating global mod sources using the Builder

      @Christoph-Hart Yep, this is fixed now. Thanks Christoph!

      posted in Bug Reports
      OrvillainO
      Orvillain
    • Crash when creating global mod sources using the Builder
      Content.makeFrontInterface(600, 600);
      reg builder = Synth.createBuilder();
      
      inline function createGlobalModulationSources()
      {
      	local modmatrix_idx = builder.create(builder.SoundGenerators.GlobalModulatorContainer,
      								"Global Mod Container",
      								0,
      								builder.ChainIndexes.Direct);
      
      	local globalModulatorsChainIndex = 1;
      	builder.create(builder.Modulators.Velocity,
      						"Velocity",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      	
      	builder.create(builder.Modulators.KeyNumber,
      						"Key Number",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      	
      	builder.create(builder.Modulators.FlexAHDSR,
      						"Env 1",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.FlexAHDSR,
      						"Env 2",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.FlexAHDSR,
      						"Env 3",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.MacroModulator,
      						"Macro 1",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.MacroModulator,
      						"Macro 2",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.MacroModulator,
      						"Macro 3",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.MacroModulator,
      						"Macro 4",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.Random,
      						"Random",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.PitchWheel,
      						"Pitch Wheel",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.MidiController,
      						"Mod Wheel",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.MidiController,
      						"Midi CC 1",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.MidiController,
      						"Midi CC 2",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.MidiController,
      						"Midi CC 3",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.HardcodedEnvelopeModulator,
      						"Custom LFO 1",
      						modmatrix_idx,
      						globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.HardcodedEnvelopeModulator,
      	 					"Custom LFO 2",
      	 					modmatrix_idx,
      	 					globalModulatorsChainIndex);
      
      	builder.create(builder.Modulators.HardcodedEnvelopeModulator,
      	 					"Custom LFO 3",
      	 					modmatrix_idx,
      	 					globalModulatorsChainIndex);
      };
      
      builder.clear();
      createGlobalModulationSources();
      builder.flush();
      

      If I do the above, then HISE will crash every single time.

      If I remove the last two custom LFO's (or just comment them out) then it does not crash.

      My extra definitions are:

      HISE_NUM_SCRIPTNODE_FX_MODS=24
      HISE_NUM_POLYPHONIC_SCRIPTNODE_FX_MODS=24
      NUM_HARDCODED_FX_MODS=24
      NUM_HARDCODED_POLY_FX_MODS=24
      

      If I run a debug build I get the following pop-up in VS2022:
      18776327-b9c4-4d09-bbd8-3a7165ee1ba2-image.png

      And I basically get locked in this cycle:
      033ba488-6299-4285-8a07-ba2083822d82-image.png

      Given it is saying that an array subscript is out of range, I can only assume that either I'm reading out of the range of an array, or that the definitions aren't being honoured in some way. A hardcoded limit on the number of modulators perhaps??

      If I comment out everything except the 3 'Custom LFO' creation steps, then it still crashes... this implies that the crash is something to do with creating multiple HardcodedEnvelopeModulator objects.

      @Christoph-Hart

      posted in Bug Reports
      OrvillainO
      Orvillain
    • RE: Matrix Modulation Feedback

      @DanH said in Matrix Modulation Feedback:

      So what exactly is the MatrixTargetID for?

      One use is for linking a UI parameter to multiple matrix modulator targets. In such a situation, you don't need to assign the processorId nor the parameterId - you can just name your UI control whatever you want, and then make sure that any matrix modulator you want it to connect to, is also named the same. You can edit the name by checking out the edit ranges section in the matrix modulator.

      2124ece8-19c8-4684-aa14-258c4ac9a4b5-image.png

      posted in General Questions
      OrvillainO
      Orvillain
    • RE: Flex Envelope - No UI control for Hold

      It is right there. Hover over the lower highlighted section and you'll see a horizontal arrow dragger mouse cursor.

      posted in General Questions
      OrvillainO
      Orvillain
    • RE: Crash when loading files into Wavetable Creator (Resample Mode)

      Confirmed here on MacOS too. Crash log:

      -------------------------------------
      Translated Report (Full Report Below)
      -------------------------------------
      
      Process:               HISE [88903]
      Path:                  /Users/USER/*/HISE.app/Contents/MacOS/HISE
      Identifier:            com.hartinstruments.HISEStandalone
      Version:               4.1.0 (4.1.0)
      Code Type:             ARM-64 (Native)
      Parent Process:        launchd [1]
      User ID:               501
      
      Date/Time:             2025-07-25 19:24:55.1964 +0100
      OS Version:            macOS 15.5 (24F74)
      Report Version:        12
      Anonymous UUID:        CCB1FD68-DBB1-BA98-C0F7-4D9C638A5DAA
      
      Sleep/Wake UUID:       DF6D33B0-69EB-4F03-953C-4FD81CFEA42C
      
      Time Awake Since Boot: 660000 seconds
      Time Since Wake:       1429 seconds
      
      System Integrity Protection: enabled
      
      Crashed Thread:        16  Convert Samplemaps to Wavetable
      
      Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
      Exception Codes:       KERN_INVALID_ADDRESS at 0x0000000000000008
      Exception Codes:       0x0000000000000001, 0x0000000000000008
      
      Termination Reason:    Namespace SIGNAL, Code 11 Segmentation fault: 11
      Terminating Process:   exc handler [88903]
      
      VM Region Info: 0x8 is not in any region.  Bytes before following region: 4298080248
            REGION TYPE                    START - END         [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
            UNUSED SPACE AT START
      --->  
            __TEXT                      1002f8000-102164000    [ 30.4M] r-x/r-x SM=COW  /Users/USER/*/HISE.app/Contents/MacOS/HISE
      
      Thread 0:: JUCE Message Thread Dispatch queue: com.apple.main-thread
      0   HISE                          	       0x101b04c94 juce::blurSingleChannelImage(juce::Image&, int) + 416
      1   HISE                          	       0x101b049c8 juce::DropShadow::drawForImage(juce::Graphics&, juce::Image const&) const + 212
      2   HISE                          	       0x101b0485c juce::DropShadowEffect::applyEffect(juce::Image&, juce::Graphics&, float, float) + 164
      3   HISE                          	       0x101b4e8cc juce::Component::paintEntireComponent(juce::Graphics&, bool) + 580
      4   HISE                          	       0x101b39bf8 juce::Component::paintComponentAndChildren(juce::Graphics&) + 1172
      5   HISE                          	       0x101b39bf8 juce::Component::paintComponentAndChildren(juce::Graphics&) + 1172
      6   HISE                          	       0x101b39bf8 juce::Component::paintComponentAndChildren(juce::Graphics&) + 1172
      7   HISE                          	       0x101b39bf8 juce::Component::paintComponentAndChildren(juce::Graphics&) + 1172
      8   HISE                          	       0x101b39bf8 juce::Component::paintComponentAndChildren(juce::Graphics&) + 1172
      9   HISE                          	       0x101b39bf8 juce::Component::paintComponentAndChildren(juce::Graphics&) + 1172
      10  HISE                          	       0x101b39bf8 juce::Component::paintComponentAndChildren(juce::Graphics&) + 1172
      11  HISE                          	       0x101b39bf8 juce::Component::paintComponentAndChildren(juce::Graphics&) + 1172
      12  HISE                          	       0x101b39bf8 juce::Component::paintComponentAndChildren(juce::Graphics&) + 1172
      13  HISE                          	       0x101b39bf8 juce::Component::paintComponentAndChildren(juce::Graphics&) + 1172
      14  HISE                          	       0x101b39bf8 juce::Component::paintComponentAndChildren(juce::Graphics&) + 1172
      15  HISE                          	       0x101b39bf8 juce::Component::paintComponentAndChildren(juce::Graphics&) + 1172
      16  HISE                          	       0x101b39bf8 juce::Component::paintComponentAndChildren(juce::Graphics&) + 1172
      17  HISE                          	       0x101b39bf8 juce::Component::paintComponentAndChildren(juce::Graphics&) + 1172
      18  HISE                          	       0x101b4e62c juce::ComponentPeer::handlePaint(juce::LowLevelGraphicsContext&) + 308
      19  HISE                          	       0x101b46d20 juce::JuceNSViewClass::drawRect(objc_object*, objc_selector*, CGRect) + 340
      20  AppKit                        	       0x196ed6d18 _NSViewDrawRect + 160
      21  AppKit                        	       0x1978ecc74 -[NSView _recursive:displayRectIgnoringOpacity:inContext:stopAtLayerBackedViews:] + 1084
      22  AppKit                        	       0x196ed670c -[NSView(NSLayerKitGlue) _drawViewBackingLayer:inContext:drawingHandler:] + 536
      23  AppKit                        	       0x197593a64 -[NSViewBackingLayer drawInContext:] + 56
      24  AppKit                        	       0x197209ab8 0x196d89000 + 4721336
      25  AppKit                        	       0x1971f1fdc 0x196d89000 + 4624348
      26  AppKit                        	       0x1971ed150 0x196d89000 + 4604240
      27  AppKit                        	       0x1971f1cac 0x196d89000 + 4623532
      28  AppKit                        	       0x1971ef6b0 0x196d89000 + 4613808
      29  AppKit                        	       0x19727a574 0x196d89000 + 5182836
      30  AppKit                        	       0x19727abdc 0x196d89000 + 5184476
      31  AppKit                        	       0x197593690 -[NSViewBackingLayer display] + 1268
      32  QuartzCore                    	       0x19bf0e0b4 CA::Layer::display_if_needed(CA::Transaction*) + 748
      33  QuartzCore                    	       0x19c0a2464 CA::Context::commit_transaction(CA::Transaction*, double, double*) + 492
      34  QuartzCore                    	       0x19beef3a8 CA::Transaction::commit() + 644
      35  AppKit                        	       0x196ee6024 __62+[CATransaction(NSCATransaction) NS_setFlushesWithDisplayLink]_block_invoke + 272
      36  AppKit                        	       0x19792f4d4 ___NSRunLoopObserverCreateWithHandler_block_invoke + 64
      37  CoreFoundation                	       0x192e9d098 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 36
      38  CoreFoundation                	       0x192e9cf80 __CFRunLoopDoObservers + 536
      39  CoreFoundation                	       0x192e9c5f0 __CFRunLoopRun + 784
      40  CoreFoundation                	       0x192e9bc58 CFRunLoopRunSpecific + 572
      41  HIToolbox                     	       0x19e93027c RunCurrentEventLoopInMode + 324
      42  HIToolbox                     	       0x19e9334e8 ReceiveNextEventCommon + 676
      43  HIToolbox                     	       0x19eabe484 _BlockUntilNextEventMatchingListInModeWithFilter + 76
      44  AppKit                        	       0x196dc3ab4 _DPSNextEvent + 684
      45  AppKit                        	       0x1977625b0 -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 688
      46  AppKit                        	       0x196db6c64 -[NSApplication run] + 480
      47  HISE                          	       0x100312de0 main + 296
      48  dyld                          	       0x192a12b98 start + 6076
      
      Thread 1:
      0   libsystem_pthread.dylib       	       0x192dadb6c start_wqthread + 0
      
      Thread 2:: Sample Loading Thread
      0   libsystem_kernel.dylib        	       0x192d743cc __psynch_cvwait + 8
      1   libsystem_pthread.dylib       	       0x192db30e0 _pthread_cond_wait + 984
      2   libc++.1.dylib                	       0x192ce3330 std::__1::condition_variable::__do_timed_wait(std::__1::unique_lock<std::__1::mutex>&, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l>>>) + 104
      3   HISE                          	       0x101a2ef30 juce::WaitableEvent::wait(int) const + 152
      4   HISE                          	       0x10162748c hise::SampleThreadPool::run() + 60
      5   HISE                          	       0x101a411a4 juce::threadEntryProc(void*) + 284
      6   libsystem_pthread.dylib       	       0x192db2c0c _pthread_start + 136
      7   libsystem_pthread.dylib       	       0x192dadb80 thread_start + 8
      
      Thread 3:: Javascript Thread
      0   libsystem_kernel.dylib        	       0x192d743cc __psynch_cvwait + 8
      1   libsystem_pthread.dylib       	       0x192db30e0 _pthread_cond_wait + 984
      2   libc++.1.dylib                	       0x192ce3330 std::__1::condition_variable::__do_timed_wait(std::__1::unique_lock<std::__1::mutex>&, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l>>>) + 104
      3   HISE                          	       0x101a2ef30 juce::WaitableEvent::wait(int) const + 152
      4   HISE                          	       0x100d6626c hise::JavascriptThreadPool::run() + 92
      5   HISE                          	       0x101a411a4 juce::threadEntryProc(void*) + 284
      6   libsystem_pthread.dylib       	       0x192db2c0c _pthread_start + 136
      7   libsystem_pthread.dylib       	       0x192dadb80 thread_start + 8
      
      Thread 4:: caulk.messenger.shared:17
      0   libsystem_kernel.dylib        	       0x192d70bb0 semaphore_wait_trap + 8
      1   caulk                         	       0x19e417cc8 caulk::semaphore::timed_wait(double) + 224
      2   caulk                         	       0x19e417b70 caulk::concurrent::details::worker_thread::run() + 32
      3   caulk                         	       0x19e417844 void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, void (caulk::concurrent::details::worker_thread::*)(), std::__1::tuple<caulk::concurrent::details::worker_thread*>>>(void*) + 96
      4   libsystem_pthread.dylib       	       0x192db2c0c _pthread_start + 136
      5   libsystem_pthread.dylib       	       0x192dadb80 thread_start + 8
      
      Thread 5:: caulk.messenger.shared:high
      0   libsystem_kernel.dylib        	       0x192d70bb0 semaphore_wait_trap + 8
      1   caulk                         	       0x19e417cc8 caulk::semaphore::timed_wait(double) + 224
      2   caulk                         	       0x19e417b70 caulk::concurrent::details::worker_thread::run() + 32
      3   caulk                         	       0x19e417844 void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, void (caulk::concurrent::details::worker_thread::*)(), std::__1::tuple<caulk::concurrent::details::worker_thread*>>>(void*) + 96
      4   libsystem_pthread.dylib       	       0x192db2c0c _pthread_start + 136
      5   libsystem_pthread.dylib       	       0x192dadb80 thread_start + 8
      
      Thread 6:: com.apple.audio.IOThread.client
      0   libsystem_kernel.dylib        	       0x192d70bbc semaphore_wait_signal_trap + 8
      1   caulk                         	       0x19e4342f8 caulk::mach::semaphore::wait_signal_or_error(caulk::mach::semaphore&) + 36
      2   CoreAudio                     	       0x195ca2f58 HALC_ProxyIOContext::IOWorkLoop() + 5276
      3   CoreAudio                     	       0x195ca13a8 invocation function for block in HALC_ProxyIOContext::HALC_ProxyIOContext(unsigned int, unsigned int) + 172
      4   CoreAudio                     	       0x195e4b37c HALC_IOThread::Entry(void*) + 88
      5   libsystem_pthread.dylib       	       0x192db2c0c _pthread_start + 136
      6   libsystem_pthread.dylib       	       0x192dadb80 thread_start + 8
      
      Thread 7:
      0   libsystem_kernel.dylib        	       0x192d70c34 mach_msg2_trap + 8
      1   libsystem_kernel.dylib        	       0x192d833a0 mach_msg2_internal + 76
      2   libsystem_kernel.dylib        	       0x192d79764 mach_msg_overwrite + 484
      3   libsystem_kernel.dylib        	       0x192d70fa8 mach_msg + 24
      4   CoreMIDI                      	       0x1af42deac XServerMachPort::ReceiveMessage(int&, void*, int&) + 104
      5   CoreMIDI                      	       0x1af44f740 MIDIProcess::MIDIInPortThread::Run() + 148
      6   CoreMIDI                      	       0x1af44476c CADeprecated::XThread::RunHelper(void*) + 48
      7   CoreMIDI                      	       0x1af44ee44 CADeprecated::CAPThread::Entry(CADeprecated::CAPThread*) + 96
      8   libsystem_pthread.dylib       	       0x192db2c0c _pthread_start + 136
      9   libsystem_pthread.dylib       	       0x192dadb80 thread_start + 8
      
      Thread 8:: Directory Scanner
      0   libsystem_kernel.dylib        	       0x192d743cc __psynch_cvwait + 8
      1   libsystem_pthread.dylib       	       0x192db30e0 _pthread_cond_wait + 984
      2   libc++.1.dylib                	       0x192ce3330 std::__1::condition_variable::__do_timed_wait(std::__1::unique_lock<std::__1::mutex>&, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l>>>) + 104
      3   HISE                          	       0x101a2ef30 juce::WaitableEvent::wait(int) const + 152
      4   HISE                          	       0x101a2eb90 juce::TimeSliceThread::run() + 128
      5   HISE                          	       0x101a411a4 juce::threadEntryProc(void*) + 284
      6   libsystem_pthread.dylib       	       0x192db2c0c _pthread_start + 136
      7   libsystem_pthread.dylib       	       0x192dadb80 thread_start + 8
      
      Thread 9:
      0   libsystem_pthread.dylib       	       0x192dadb6c start_wqthread + 0
      
      Thread 10:
      0   libsystem_pthread.dylib       	       0x192dadb6c start_wqthread + 0
      
      Thread 11:
      0   libsystem_pthread.dylib       	       0x192dadb6c start_wqthread + 0
      
      Thread 12:
      0   libsystem_pthread.dylib       	       0x192dadb6c start_wqthread + 0
      
      Thread 13:: com.apple.NSEventThread
      0   libsystem_kernel.dylib        	       0x192d70c34 mach_msg2_trap + 8
      1   libsystem_kernel.dylib        	       0x192d833a0 mach_msg2_internal + 76
      2   libsystem_kernel.dylib        	       0x192d79764 mach_msg_overwrite + 484
      3   libsystem_kernel.dylib        	       0x192d70fa8 mach_msg + 24
      4   CoreFoundation                	       0x192e9de7c __CFRunLoopServiceMachPort + 160
      5   CoreFoundation                	       0x192e9c798 __CFRunLoopRun + 1208
      6   CoreFoundation                	       0x192e9bc58 CFRunLoopRunSpecific + 572
      7   AppKit                        	       0x196ee77fc _NSEventThread + 140
      8   libsystem_pthread.dylib       	       0x192db2c0c _pthread_start + 136
      9   libsystem_pthread.dylib       	       0x192dadb80 thread_start + 8
      
      Thread 14:: JUCE Timer
      0   libsystem_kernel.dylib        	       0x192d743cc __psynch_cvwait + 8
      1   libsystem_pthread.dylib       	       0x192db30e0 _pthread_cond_wait + 984
      2   libc++.1.dylib                	       0x192ce3330 std::__1::condition_variable::__do_timed_wait(std::__1::unique_lock<std::__1::mutex>&, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l>>>) + 104
      3   HISE                          	       0x101a2ef30 juce::WaitableEvent::wait(int) const + 152
      4   HISE                          	       0x101abb2d4 juce::Timer::TimerThread::run() + 188
      5   HISE                          	       0x101a411a4 juce::threadEntryProc(void*) + 284
      6   libsystem_pthread.dylib       	       0x192db2c0c _pthread_start + 136
      7   libsystem_pthread.dylib       	       0x192dadb80 thread_start + 8
      
      Thread 15:: caulk::deferred_logger
      0   libsystem_kernel.dylib        	       0x192d70bb0 semaphore_wait_trap + 8
      1   caulk                         	       0x19e417cc8 caulk::semaphore::timed_wait(double) + 224
      2   caulk                         	       0x19e417b70 caulk::concurrent::details::worker_thread::run() + 32
      3   caulk                         	       0x19e417844 void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, void (caulk::concurrent::details::worker_thread::*)(), std::__1::tuple<caulk::concurrent::details::worker_thread*>>>(void*) + 96
      4   libsystem_pthread.dylib       	       0x192db2c0c _pthread_start + 136
      5   libsystem_pthread.dylib       	       0x192dadb80 thread_start + 8
      
      Thread 16 Crashed:: Convert Samplemaps to Wavetable
      0   HISE                          	       0x10099c410 hise::getMemoryBlockFromWavetableData(juce::ValueTree const&, int) + 200
      1   HISE                          	       0x10099b380 hise::WavetableSound::WavetableSound(juce::ValueTree const&, hise::Processor*) + 512
      2   HISE                          	       0x1009faf30 hise::SampleMapToWavetableConverter::rebuildPreviewBuffersInternal() + 1904
      3   HISE                          	       0x100440588 std::__1::__function::__func<hise::WavetableConverterDialog::loadSampleMap(juce::ValueTree const&)::'lambda'(), std::__1::allocator<hise::WavetableConverterDialog::loadSampleMap(juce::ValueTree const&)::'lambda'()>, void ()>::operator()() + 1292
      4   HISE                          	       0x10044a2d4 std::__1::__function::__func<hise::WavetableConverterDialog::run()::'lambda'(std::__1::function<void ()>&), std::__1::allocator<hise::WavetableConverterDialog::run()::'lambda'(std::__1::function<void ()>&)>, bool (std::__1::function<void ()>&)>::operator()(std::__1::function<void ()>&) + 152
      5   HISE                          	       0x100447994 hise::WavetableConverterDialog::run() + 684
      6   HISE                          	       0x100533018 hise::DialogWindowWithBackgroundThread::LoadingThread::run() + 32
      7   HISE                          	       0x101a411a4 juce::threadEntryProc(void*) + 284
      8   libsystem_pthread.dylib       	       0x192db2c0c _pthread_start + 136
      9   libsystem_pthread.dylib       	       0x192dadb80 thread_start + 8
      
      
      Thread 16 crashed with ARM Thread State (64-bit):
          x0: 0x0000000000000000   x1: 0x0000000171c72768   x2: 0x00000000000120a9   x3: 0x0000000000000001
          x4: 0x0000000000000001   x5: 0x00000000c42499f4   x6: 0x00006000021bfe60   x7: 0x0000000000000000
          x8: 0x0000000101a2f58c   x9: 0x0000000171c72740  x10: 0x00000b0000000b02  x11: 0x0000010000000000
         x12: 0x00000000fffffffd  x13: 0x00000b0000000000  x14: 0x0000000000000b00  x15: 0x0000000000000000
         x16: 0x00000b0000000b00  x17: 0x00000b0000000b02  x18: 0x0000000000000000  x19: 0x0000000171c72c30
         x20: 0x0000000171c727f0  x21: 0x0000000171c72c30  x22: 0x0000000171c727e8  x23: 0x0000000171c72748
         x24: 0x0000000000000000  x25: 0x000000010881eea0  x26: 0x0000000108315c10  x27: 0x0000600003a460c8
         x28: 0x0000000108315d80   fp: 0x0000000171c727b0   lr: 0x000000010099c40c
          sp: 0x0000000171c72740   pc: 0x000000010099c410 cpsr: 0x60001000
         far: 0x0000000000000008  esr: 0x92000006 (Data Abort) byte read Translation fault
      
      Binary Images:
             0x1002f8000 -        0x102163fff com.hartinstruments.HISEStandalone (4.1.0) <4b76ad00-b33f-3e12-95d5-2feb382eb5ed> /Users/USER/*/HISE.app/Contents/MacOS/HISE
             0x106d54000 -        0x106d5ffff libobjc-trampolines.dylib (*) <d02a05cb-6440-3e7e-a02f-931734cab666> /usr/lib/libobjc-trampolines.dylib
             0x1080f4000 -        0x10822ffff com.apple.audio.units.Components (1.14) <674f87bc-21a4-309b-9e43-c7ba1cd95d7b> /System/Library/Components/CoreAudio.component/Contents/MacOS/CoreAudio
             0x107e00000 -        0x107f8ffff offlinetransient.dylib (*) <2baf6788-5ef3-32ec-a76d-d5b6836f5b05> /Users/USER/*/offlinetransient.dylib
             0x141b90000 -        0x142227fff com.apple.AGXMetalG13X (327.5) <a459e0d8-5ddb-360f-817e-bc708b1711b0> /System/Library/Extensions/AGXMetalG13X.bundle/Contents/MacOS/AGXMetalG13X
             0x15e388000 -        0x15ec6bfff com.apple.audio.codecs.Components (7.0) <42d57795-e86d-36e5-9fae-f2ba92271fba> /System/Library/Components/AudioCodecs.component/Contents/MacOS/AudioCodecs
             0x196d89000 -        0x19821ac7f com.apple.AppKit (6.9) <5d0da1bd-412c-3ed8-84e9-40ca62fe7b42> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
             0x19beed000 -        0x19c2c0c7f com.apple.QuartzCore (1.11) <e0d9f378-dc87-33f8-93a5-3c62ad30ea19> /System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore
             0x192e21000 -        0x19335ffff com.apple.CoreFoundation (6.9) <df489a59-b4f6-32b8-9bb4-9b832960aa52> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
             0x19e86d000 -        0x19eb73fdf com.apple.HIToolbox (2.1.1) <9286e29f-fcee-31d0-acea-2842ea23bedf> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
             0x192a0c000 -        0x192aa74cf dyld (*) <9cf0401a-a938-389e-a77d-9e9608076ccf> /usr/lib/dyld
                     0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ???
             0x192dac000 -        0x192db8a47 libsystem_pthread.dylib (*) <647b91fc-96d3-3bbb-af08-970df45257c8> /usr/lib/system/libsystem_pthread.dylib
             0x192d70000 -        0x192dab653 libsystem_kernel.dylib (*) <60485b6f-67e5-38c1-aec9-efd6031ff166> /usr/lib/system/libsystem_kernel.dylib
             0x192cc5000 -        0x192d51ff7 libc++.1.dylib (*) <875203a1-087b-33a6-93a5-928bb7e9114c> /usr/lib/libc++.1.dylib
             0x19e416000 -        0x19e43dddf com.apple.audio.caulk (1.0) <5ce1b98f-c512-379d-9a42-5cce5923bf9d> /System/Library/PrivateFrameworks/caulk.framework/Versions/A/caulk
             0x195aae000 -        0x1961e225f com.apple.audio.CoreAudio (5.0) <b2b97b04-6275-3031-8a89-be6105f1e8f3> /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio
             0x1af3ef000 -        0x1af4a9d1f com.apple.audio.midi.CoreMIDI (2.0) <cf441ec3-9851-3874-8fe1-17d470031ea5> /System/Library/Frameworks/CoreMIDI.framework/Versions/A/CoreMIDI
      
      External Modification Summary:
        Calls made by other processes targeting this process:
          task_for_pid: 0
          thread_create: 0
          thread_set_state: 0
        Calls made by this process:
          task_for_pid: 0
          thread_create: 0
          thread_set_state: 0
        Calls made by all processes on this machine:
          task_for_pid: 2
          thread_create: 0
          thread_set_state: 0
      
      
      posted in Bug Reports
      OrvillainO
      Orvillain
    • RE: The Sample Map of The Future: Escaping the 20th Century Sample Mapping Paradigm

      @d-healey Sorry, do you mean the feature isn't ready yet? I'll go and dig out the meet up video. I can join those in the future now I'm no longer at inMusic !!

      posted in Feature Requests
      OrvillainO
      Orvillain
    • RE: The Sample Map of The Future: Escaping the 20th Century Sample Mapping Paradigm

      Hey - are there any good tutorials that can get a beginner into this complex group editing stuff???

      posted in Feature Requests
      OrvillainO
      Orvillain
    • RE: Global Modulator / LFO always retriggered ?

      @griffinboy said in Global Modulator / LFO always retriggered ?:

      @Christoph-Hart

      Link Preview Image
      free / rand – Google Drive

      favicon

      Google Drive (drive.google.com)

      I thought the difference was significant enough for me to want to model it.
      Then again, I am a perfectionist when it comes to audio things like this.
      It might not be significant to others.

      But in some cases I do prefer the free running over random phase. The phasing in the highs has a clear pattern which your brain can follow in free running, and I find that pleasing. Wheras random phase gives a chaotic and hard to follow pattern.

      IMHO, it is extremely noticeable and having a way to support that behaviour would be excellent.

      posted in General Questions
      OrvillainO
      Orvillain