@Dan-Korneff @ps Just got a report back that the automation system isn't working in Ableton properly. Thanks for sharing your insights.

Posts
-
RE: The big bug tier list
-
RE: Midi out plugin is not sending any midi.
@VirtualVirgin Apologies it took me a while to get back to this.
In my example I am just using a MIDI Player (I also tried with the sequencer), and a script processor with
Message.sendToMidiOut()
.It was quite interesting because nothing I tried worked with VST3 but as soon as I reverted to VST2 (so uncheck the VST3 support flag) it worked. I did some research online and it looks like it is a known issue (at least on the JUCE forum).
Interesting you noticed that about the MIDI Settings in HISE. I can't imagine that effecting anything at compile time. I will have to try your suggestion.
-
RE: Last call for help Audiowaveform xD
@tiesvdam the solution already exists in the Custom Sample Import in the HISE tutorials. Check out the
Scripts/LoopPointDragger.js
it has everything you need.Basically the best way to do this is to just use a panel and overlay it ontop of the audio waveform. You can use a paint routine and mouse callback to set the sample & the loop start and end points.
It's better to share the HISE snippet for future reference. Here is an example but mine is quite buggy:
HiseSnippet 2569.3oc6YstaabbEdWIsogzNAwoN.EEn.SDJJHcXnH0cCU2HYIKagJYSHZkX.Cifg6NjbhGty1cGpKMQuS8InH+p+x+nOJ4IntmYl8xrKWJIq33lDTAaJNybNm46LmqynNgbWRTDOzxt5SOKfXYeSmtm4KFt8PL02ZucjSv37ft3QALh08OK.GEQ7rrsm8gRJrqLmk5me3KtOlg8cIYSYY8kbpKYe5HpHa1Na9WoL1tXOxSoiLnd4M2yk6uMmwGCnYVmVVAX2WhGPdLVR1LNVOBGMzx9NN8Z61hrTOWLtG9tj0WekdKu9Z2ESZ60dsUV8tqz5t8Vck0V00x98dfGUvC6JvBRjk8b2m6cV2g7S70avWRin8.sBFz1pKry5o2ky7jpnbVqsGRYdcRNlhr.g1I6PaV8g1scNf5QSmO6v6iTKfx3v7.zdl7va1bvqsI7ZY.uRfjsAjlSCoa4z0MjFHxVQhma3rmufD1G6l2Vpo0Zl+yG5rMGnvWzbD9kjcCgAobTaoVsZfVrUq5aTsJXqhDniwgHsqQXaz8PJWmlCHh34pMexhyC7jwx9fGUGrOgA7jre.WayGEv8gA0lOkBIiU8AWfHvcfn4jS8E6DhGLfDV8aqVIjL.EwG66ARC9jzm5S71POufKvLMHhfkaASWsB0mAjf5O12UP49nwAdfEHUzQ0pWsBH2Jz909TZzNZAVSsE0gkTqUIEgMAlwMiNMV7StxISaE1T4gMUd7lJOdkwSHI.7EE0pqlOjHFG5K+54v+g+w3tXFRxXFKfg3qndhgZdzTDIO7TG.xkqkXUap+B3.GJpiVH2osAyjKh4G.GpSkU1T1WIZujckQlNqSYOqVtUET96fNYipkaYqAp2mCzTeJDoLxroIBkgtFSJB1TEgxlOgXKivSJgvSlP0LcJNur.BpOUrUeHrWe3rOG6kDSjXRYDMo2KM9uoaHABi5lrTs4adm4U9PPbTJCMYD+Ahgn+BpUZnTRvaJQOu0KT9qEhdSslGh8GPJyQ54s0LNYDcrSuRcyNIhHhC3iiHaiYrdP4lZIGA0HGC4gh0YwPZj9vbH+XRHfD0pwi9tuKdnGjRJ9rtzLGnrvO3ex7findOCjVl7AmkOC0p4JfifwjmXH0rspt5DJkJPU1mzWjBtSQ+Yk7y3Mi0LLORp8GEjZJ.xlPjpMRspBzgzACE4PsmD0FCU3sRkEV.sEiwOAI2xAT+An9g7QnVPbWrPFh88.e+QT+wQxOoiFOBM.GnXOm7uG5.LTZITY3iUvFHnbjVPeNZEcFNStjACIKaJLEgxDfUHrHRlxMIdAf1eLCRPJyGh38QARulzShQ3SOz7vHelyIvxjZPAf0.sRiLgles5on97BFzhlPIxB3QErPJ1isveZ4l3JRt9r6UhkrZ7h2CN.BiHPGA0jCWnnZKcaMBYqatoWjaEbx2kHP83vobjhWTjL6NZqGuCR19odnhVcRfnoTEpgT0iO9Kgxz5FFzUtmPQ7PfLTonAFbwXAxEcEPRdpNO4vJklPR+PRzvrFvpewI2pjjqJWB95aLQNuNxUOjOV.omxR4MHNcmzAZngO8iHR+Q8tbYcEMQGFxb+SqHLF5t0f2ARnou.PM8uhZdxPpfnU6AM6CWb3PnBQsmmOpARCrTCzvWbwzUHGEDesTQVmvUUkg2vQsTHREC2hELDmNSHArqsZtd8Xyu5.Ukp6YkEUp11KJtrRByEBNkpfgDLU7XNJpfw4OJymn17XYxujJgQy2.M+1LJ7sFnGoJz8mP6DmXT0T94UqVcgE1ZrGk+U3igVy2ZWiV7Y39FM2qaMXeYuCvl9xs781kPX0xeQhTQ0mGNp8TuZPdxjPI+Lpyth6D.G4lA+BrNCnQPD0tI98yC46O4oCGOpmOlx5.YoAcOKpnAh26api91pH3G8YLTlnFLYydCzlbPzxEUeH0DL.d45XPs2HlO.UOLD6QAcXWPD0ddqS2E9YkkkWpBCc7H+rM7ob908Vds08jyrnZ9kdwKpmHHIZkfTgf.3KMR2qFsatRJcRfNE5.ZNuzKwco2gK96MYPKg5ue.Nn17iBTqV71YMKsQxMR6yj6+Xtf7Den4RH9B7nPEWpe+RWS5YDxYR3U1xxWVH7hXrlOXsIgM.cmMljRHb647WI2Y5WI27ECb0NpFDx82CT8mDP7m16HXE6cKu9dLp.REpKu+IwWdOmisE0S9fB4c1sTJf4atXczd6.oGRDKrCvtFPBEToBYuC4XpKQ+FAUb1gD8RAOvxdlz.LK6a9FChSMAvYlCTcNkNw2Gt4PUwjrYFrYPxgxdfnq5j3sYwCv+MopYOKQUoP0zubXRTGHj26niNRIGnJwH8rKJm9Uu5UpoEjSEYD+5W+ZMpLT1anU1OH44RjoCUJ4MbRSOd45micCaKqDcyw9eBKkOcpk8u2YZoSsL0nDPVNzyzS4rInnf1m5JL4yB8QNGv8Fyvh7uRk7s7hW.hSx8zPxtO7inhyLequ2ZOc0UEh2xoCU3NrbLNSIXD7++o.iwO32G37f98gBsY.bNmce1OMutm41+aS1dU.nzAkneXuaqmQc4eTGF9LYDj4QT9Wq8eeUes1fq7q0B0MbAyCwzMQYydZH3+K8xM1Ji9+Lo+PNWHS6a9ZwFM2Ch2THGB2+ILhjaNnzZ7CF21Ygihf0WfD5ShDKDmpS2vRb8tnEFLlBRd0lmfO1Zj7DxwVJF3RXxu14ecKKVxUFRVio6bOYc6YunGYt807Qlm6mcOx7u.Rlj6cvqjfwtT8MxNlvfvEEF+XnvWe7XlHY1bwJyd.2mGLj6Scy6tIBoxtZLwdoJzVBA3xmMys27PBifiL7q+iatOb8IbXwHl2fyh1uw+MAJ0d86bzvEICvQ+xsHvr+5tHf915CN.CNgxbSOd7ntPtWWBr69POJxlUsmQ1aidbqjzUcI9dpAPKDuNdw1xw1wK1NYQSU7OnUwO1oq.tu.jYbPbeYJ8znKs2B+EAu50X5DRTW7f92MH66279iA6PX9Y+Gap1psFwG6mauhQ9gj.3Jo4C+d+MO7vGFxGGTjqoVI6G9hm3S.6ovTG2NjGE0GTGkrhLWpy3vAjKsHFXaMspRCETJS5CQcSb.xnVsKsdJV4GMiidb6BiWrv3kJLd4BiWov3UKLdsrwoWCT5Y33.WEbhqQ8atZYw.Yn521fx6SGjJe8LlENSOoUnw3ur66x+rsyc0hou3B9+pt55h++pq+3qt9N0M6sPk125385W08c5Q2GFWaDouzvOusy2zQkMGIK99+Jn9tnyF2DQA5V72UORVxaKothLCJEyLcoif9JjPBJx8NAkivtg7u1U+XfRr99pY.T5qtRaEmCjiQk7peif5UesqadQMAiKdcYboqKiKecYbkqKiqdcYbsqKiqe4LJamXqwB9HcxTKqC57.sCnc5yfXOq0+Elj2CtB
-
RE: FFT Analyser Path - Need help drawing the magnitude to height
@Consint I kind of gave up on it and used HISE's stock FFT instead, I couldn't risk the issue coming up again. So in short I never tested moving it to a background task. I did edit my original code so that it only repaints when a new FFT path is shown and to reduce the amount of bins. According to the profiler it was more efficient than the stock FFT but this doesn't necessarily address the issue users are facing.
Sorry wish I could offer more help with this issue.
-
RE: The delay module temposync slider popup
@pcs800 I noticed 2 things in your snippet. 1 is the mix knob is all the way to zero. The other is the delay time is super short.
But assuming that is not the issue it could be related to the nature of the delay. I don't know if this is necessarily true for this particular delay. However, some models are designed to output the difference between the delay time and the input signal. This happens to me in Gen~ all the time where the delayed signal isn't processed until there is a change in the delay time itself.
So you're solution might work, you maybe able to script it to change values with a delayed callback, and then an even later delayed callback to set it back to it's initial value.
I don't recommend this though. I would recommend just building your own delay in scriptnode.
-
RE: Why does this project refuse to save correctly?
@pcs800 The autosave is a .hip file, it's just a backup.
The .xml should be save in XmlPresetsBackUp. Even still, select File and you can load the xml or open recent and load the xml from there...
-
RE: How do you Tempo Sync ADSR?
@Delamere You can use the Synthesizer Group to load in several samplers and control them with the same envelope. You can also use a Container for that
HISE | Audio Modules | Syntesiser Group
A container for other Sound generators that allows FM and other additional synthesis types.
(docs.hise.audio)
-
RE: Enable/Disable GLSL and keep it permanent?
Oh and if you load a Floating Tile with Custom Settings you can also enable/disable open gl from there.
-
RE: Enable/Disable GLSL and keep it permanent?
@Gab For your first issue of enabling or disabling openGl, I think you need to use
Settings.setEnableOpenGL(bool shouldBeEnabled)
As far as I know this is the only way of enabling/disabling it. If your panel is hidden, it won't get processed but openGl can (I believe) still effect how other componens' graphics are being processed.With regards to making the value permanent so the user doesn't need to reset it each time, I actually just wrote a script for doing just this. My example is a bit verbose for what you need but it will work nonetheless (it doesn't need to be written to JSON for instance, and you don't need an array here).
In this example the button state is dumped into a JSON file which I am saving in the expansions folder (AppData is a better location when you release the plugin). When the plugin is initialized the script will run and set the corresponding control callbacks to whatever state it is saved to. At the same time, toggling the button will update it's state.
HiseSnippet 1652.3ocsXstaaaCEVJIpnwqsXEXO.D4WJqAN1oN2PV2hiiSm2xEupzf0UTDPKQayFYRCIpj5UTf8drWx8Frc3EYQeI8RvpPPrIO293ge7nCc6DdHIMkm33V57QCINtOvKXDSzuQeLk4z5PG2G40ISH3r.AVPRcNXzPbZJIxw0cwmK0wc4kbTO+yOc.NFyBIES43bAmFRNlNfJJls89+JMN9HbD4b5.KsqseqPNqAOlmA3YQuJNCwgWg6QNEKUaAOmeFm12w8685TMrB4ocBw3N3cI6rylcpsy16hIUipt8las6lU1syVat8VgNt2qYDUvSLf2coC3QiB5yugoCvEzTZmXhbPUm.Hx5oOhGGIWhxYcZzmFG0NOQk5.docQZaQcZ667NgFQGOeQ56aUBPEVXm.cWXR3s3DvqpM7pXAu4.IWKHsjFRO1KHLgNTTHQhmuwqESPR5hg8Iann00Yg+tjWCNnASTd.9JxQIvfwV3WsRk0Pv+VcuRkVeczyl4AcQ8Wzp9AG2LXNBMpr95kf84TA5ZbBpMlQhqhdFJOp8HhF7AC4LXf+JZwq.wqvjCT7wa2Fi7IMRShSuLUlpkDpTv9WaT8M1Zpz3xtzXBCTCzZE6C.keaJmshd4+JdFJDyPg8IgWgD8IHx6FhYoTvWntRNTB7QBHgBiAGhvrHD4ZBCcCVD1GQEfsXVOBh1EMB7FeHHClkxPuqAOhr9EohrHJ2NZoCIgzti.eMR6zgXQeTeRBYMTKTBIjOX.AhS8gCODKvnTJblTiA3uajJpvZVJ.ugIjThHEggI6ShijAJfidaV5XncDDifQoBR4lEqNAuX9AkMgZ5jnTi1Rv8LakgMK04qDeqIKb8ppcSIAWJ1excCIuKgzC0QvZxvvQiHv2UtUxXySkTw0OrUf7yOJiDbfhqgtVdliFSEiPvxQjviQcyXgB.aknrXJiLdLBRcJiLXw+ZbbFY0RuuDBdzT2xfN9qbs9f7JqgzprWoObaXNn9EMW+3ypeH5fWd94mcJJ375mO6wIIlmFNbllO2Pia+v7yD4g0frXdHNFQk4twpHy5sh7AjI0HEeM4fBVuOMp.4R4p+AbVeoSfSHiOxok7d8GxmI1o7s8gJNyMAtm17OXRRA.XLme07JE8SRIlcCATUeNUSbRyWxMY8.EKGkMXX8zeI3rSMxWaRlZYAOPjPY87qrpAlIDQVBCIRxH46ZGywQSBnY.RLnhUBL0OGHxj1jgjlpH5qtpN0MN2n2krq8.YPy5P5dnz7fhUxGYEXsJr81dljrk32+g8ry4JGqpfgMUcngFWL2LuMiQqVqHSBdRpWZ9xY1zjg+oF85bm7FPU0TSrkL6lcN5eNQ7EAdf6OerGQ5hyhEWL6omO4Rn3HR5gjtP3h7mdUMyVd9BaJ8r2orS.1n6iTQo0osNuU8ia8GM+bJhPYTAEGS+Sy1YA0UlK8opBtHJ5GlyqTKCUo6I5ChexSlOcVUzYVCeM8MSV.xJQC6xQpTKX4TaTxxRUrrX9NFJxnRQ9EtZ0YRoSTmZpvLt7lLZx5cUMrzopdU3CYILX+3KMioyV25pvTWuANNtCzYr+T060z+4r+sGrOiZMd9btKVn6YA5Uf2U80TUSfVuO4TtfbFSw.VFbNZZQc6NWYF.ECuiedhks8m7wLzmkMnCIw50VJEgVamreYuaueY614C0sIZoHbrBRGmAcacaM46X5sT1asAUfpBUm0OxzYsNA6PgFnW1yvQbTP19JPNurkr4nbGA9DhyPRhfJWBtGRtFthjtk8k8NjjdkfODtsy3FZgqloC6CyanWx4TQ89d5lLbdmc.GAIFW4WtgFI5WH4U62mP60u3lX+0usOEZ9J+FWOvq1F6V4oUqsQsJNEB1vHo1101rxN63zoWtAKeu+Edjd557Du0x1ZAbuOi71zKgBL9oVFN+39Nyd8G3hW7nrXrXxaiIuypQ.P4l3JPxq4.8fJFYem1+2th1mKDerWaJb2f4iwElCFAh0WCLZtX6C8Z1sKITT.vk7N52+5bKVmWvyDPqKmfgNX.9f2oYCB.lVHAhNCH5xi7tKH4V5wUxY5APQL0.IgzHrpbrqQX0bgNCvgI7KMs1Ku578Uy.Xho9YFV16D4XzbNIO.tI+kggS5pYLbi6pgO8tZXs6pgadWMbq6pgaeWMbmOsgxenk5YB9.8wFGmSZ2TU40007ZYIa04+TotZFH
Content.makeFrontInterface(100, 100); // ================== VARIABLES ======================== // const var Panel1 = Content.getComponent("Panel1"); const var Button1 = Content.getComponent("Button1"); const var buttons_stateNames = [Button1]; const var state_filename = "buttonStates.json"; // You can check the expansions folder for this file and even watch it change if you open it in xCode/Vstudio // You can specify any file path here, I recommend AppData since this is where the user presets are held // So just change FileSyste.Expansions to FileSystem.AppData const var stateFilePath = FileSystem.getFolder(FileSystem.Expansions).getChildFile(state_filename); reg btnEnabled = 0; // ================== ENABLE/DISABLE ======================== // // Panel visibility control function inline function setPanelEnabled(value) { Panel1.set("visible", value); } // ================== SAVE/LOAD BUTTON STATES =============== // inline function onButtonControl(component, value) { local id = component.getId(); saveButtonState(id, value); if (id == "Button1") { btnEnabled = (value); setPanelEnabled(value); } } // Save button states to file inline function saveStates(states) { Engine.dumpAsJSON(states, stateFilePath.toString(0)); return true; } // Load button states inline function loadButtonStates() { if (stateFilePath.isFile()) { local buttonStates = Engine.loadFromJSON(stateFilePath.toString(0)); return buttonStates; } return {}; } // Save state for a specific button inline function saveButtonState(buttonId, state) { local states = loadButtonStates(); states[buttonId] = state; return saveStates(states); } // Get state for a specific button inline function getButtonState(buttonId, defaultValue) { local states = loadButtonStates(); if (isDefined(states[buttonId])) { return states[buttonId]; } return defaultValue; } // ================== INITIALIZE =============== // inline function initializeButtons() { for (i = 0; i < buttons_stateNames.length; i++) { local id = buttons_stateNames[i].getId(); local savedState = getButtonState(id, 0); buttons_stateNames[i].setValue(savedState); } btnEnabled = getButtonState("Button1", 0) == 1; setPanelEnabled(btnEnabled); } for (i = 0; i < buttons_stateNames.length; i++) { buttons_stateNames[i].setControlCallback(onButtonControl); } initializeButtons(); // Initialize states at the end of the script
-
RE: How do you Tempo Sync ADSR?
@Delamere I haven't used it but I think you can accomplish this with the Transport Handler
Something similar could be done with scriptnode but I would look into the transport handler first.
-
RE: Midi out plugin is not sending any midi.
Ahhh okay, unless you figured this out already it appears to be an issue related to the VST3 SDK rather than something with HISE. Most certainly there is a workaround to get VST3 working but VST works perfectly fine. I plan to do some more digging on how to get it setup with VST3 but my only advice is to just use VST for now.
https://forum.juce.com/t/solved-vst-midi-effect-plugin/51475/8
https://forum.juce.com/t/vst3-midi-and-juce/31100/23
@Christoph-Hart apologies I know I should improve my skills a bit but could we add this to the HISE wishlist? Even better if you could point us in the right direction to solving this I'd be happy to try and take it on. Even when I export the plugin as an instrument I can't seem to get the MIDI out.
-
RE: Midi out plugin is not sending any midi.
@oskarsh Did you have any luck with this? I am having a hard time getting FL Studio to receive any MIDI. Pretty much the same setup as yours. I am trying this on Windows for now.
-
RE: Inverted threshold knob for compressor / dynamics module
@goldee It's quite simple to do, you just need to invert the value (if I understand you correctly).
This should help you get started
-
RE: Inverted threshold knob for compressor / dynamics module
@goldee You need to script the control callback for both knobs. Then you can update both Knob 1 and the compressor module.
HiseSnippet 1117.3ocuWEsaaaCEkxNZcVqdasXe.BA6Amg1BI2XmjELDWamrYz4Ti3rf0m5nnniIhDofDUV8J5GReaOs+g8V9T1mP+CxHkjknsURJL1hdwf7xy8dH48dtziBYHbTDKDnYb5r.LP6g5imQ4S6MERnfA8AZekNgdINjicMufxb.cmE.ihvt.Msp+nbQZ01.j78wC5B8fTDtXJ.3LFAg+YhOgWL6nNuj34cDzEeJwWY0a2Y.hQ6w7XwBBUU2BD.QW.OGeLTtrJ5feBFMEn8c5N1HK7ycPPnCbO7t61xY6c2YOH110dmVs2qk0dNsasSaDP6yNzkvYgi4PNNBnsQWl6rwSY+NMM.mQhHNdX4.avXQjSm9HlmqbKJmEzaJwycz7SpHfvKiJN2pldt8M5CItj74KN+95DClEHTO.0prH8pt.8rUomkB8JgRZJTZiTJ8H8wnPR.uvhjOeg9.JGGNAJtmToR5ZAU9qJ58XhUP4OyGdA9nPwfbDMZaY8DyVVVaseci5FhaqHt4kvPyWJRMrM+Ay4POGy6w7CXTwfFalXcys1eI.MuU.M2TFjBD8mQg9DTjLLI4nRLGNYBFI.jaTFk5FDpGghMmDSQbBiZxnIdTFrPlWCz7H8Dgm8hwaU23c0MpkPymEg4mImrwSssrdZp88Mpk5B6azEBt99jCkjHI8R1R6A87bD4wMVjDR.F2.Qu4nX7NiZ46UYPdAmGRbh43FESKOHCStwOcp32ohj4bVJHogQ9FsbJZmSQCEhcLiieEsQBELdug4xllLoTaY9xCGVpYoBP3sArAM12AGpd.HWnHKewRG8atzQsxFkluorPFc.kveU.ldS06frjTYYVFqDKkmTj8kYEYi8Ht3P.QTK8.8jCQPBgyT29mqu96uB7KC5C4v4tQ3QQTBDZqD4FPqO9RgVYZsaM893nK3r.grWdcgPj9NC5aKjS61YVwfS63ybybLh3f8.9pZ2u9Je3aU0si33fwj+XN++yO7g+9fn3ISHhUoqa51Uf200COhEQjWXEXadEPgwO7NXbSEF+aTEF2YbmH3k3AzQhTXLWJQEL+NYfaR2f6wczppqBcclarGjunXurkXlAoOTUXkpnTgumo1x7+rN.epT7Q5iHbzzx4XkR3nHc8+CNl02rtdpDdAA2P+ne8dnI4iSiug9bcyrti4xnK8RGN9PJTDFW0SF4z4ZrKaPHMKzTUurkydB1CCiTd0yq6TnWuRH93AkHlqpoTX9D4sY4HWlIeqRHKgOIOWCGVx9MyRoa4LaqtqyLrRfTYwPwSMhCJwcqZPq5mb5f8smMdBKlSnmODJZgJEANN1er3omHrHYjRwdxtJZUj5+oisjikTXLl5lL3ZwWlQa4XsLi1yMduDCeHJj8FTZmIYd9mmLiXeSSd3bM8gxwlK1RJ4SH4QdCBsnqVAXy0E3yWWfaut.ast.aut.2YcAt6cCT9WGdQLm4mpTC.CGcXxSHzzxqN0pB9W.ddAzb.
-
RE: HELP
@rava2212 Is it an FX project (or contain scriptnode FX)? If so you need to recompile those FX on your Mac before compiling the project to VST or AU.
-
RE: Anything wrong with doing this? || Buffer Length
@Chazrox Ya it's very useful to know. I would just say set it super close if you want that type of waveform display (like 256 samples). It changes based on the sample rate though.
As an aside I don't know why you are seeing the full cycle, that isn't correct. Something is going wrong there. I tried playing a sine wave at ~8Hz , with a 1 sample buffer and it looks like this (44.1kHz sample rate).
-
RE: Anything wrong with doing this? || Buffer Length
@Chazrox it's hypothetically possible but realistically it is not doable. Essentially your buffer length would have to be resized to whatever the frequency is. A pure signal (like a sine wave ) is easier since the frequency is stagnant and doesn't have harmonics. But with white noise it would be impossible. Essentially the buffer length always has to be the same size or somewhat larger than the frequency.
This part is chatGPT:
period (samples) = sampleRate (Hz) ÷ frequency (Hz)
At 44 100 Hz sample rate, a 440 Hz sine wave has a period of 44 100 ÷ 440 ≈ 100 samples.
At 96 000 Hz, that same 440 Hz tone needs ≈ 218 samples.
If you set your buffer to, say, 50 samples, you’ll only ever “see” half of the 440 Hz cycle; set it to 10 samples, less than an eighth of the cycle; set it to 1 sample, and you just get a single point that jumps up and down—you can’t reconstruct any shape.
Me again:
You would have to account for the sample rate, and then account for the frequency of the signal. Then you would have to dynamically resize the buffer, which is possible. However, this example only really works for a sine wave, anything else it gets more complicated and then closer to impossible! -
RE: Anything wrong with doing this? || Buffer Length
@Chazrox That doesn't look correct. You couldn't see a full cycle of the waveform if the buffer length is at 1 sample. You would only ever see a portion of it. Did you hit "Apply" after setting it to 1 sample?
-
RE: Envelope table - global mod bug ?
@Straticah Excited to see what you guys are cooking up
-
RE: Anything wrong with doing this? || Buffer Length
@Chazrox Did you even try 1 sample? You can't really see any useful information with just 1 sample. Even at the lowest sampling rate of 44.1kHz, I think that only equates to like 20~ microseconds in time (that number is probably wrong, but it's something like that).
But either way, setting the Buffer Length to to a float instead of an integer will either round the number to the closer integer or crash. It's not possible to go below the sample rate.