HISE Logo Forum
    • Categories
    • Register
    • Login
    1. HISE
    2. johnmike
    3. Posts
    J
    • Profile
    • Following 1
    • Followers 0
    • Topics 35
    • Posts 184
    • Groups 0

    Posts

    Recent Best Controversial
    • RE: How/Where do you actually market/sell your plugins?

      @Chazrox said in How/Where do you actually market/sell your plugins?:

      would add to this... use all of your resources. If you have friends/peer music producers, share your plugin with them and ask them to post about it if they like it

      Everything everyone said is correct....the truth is there is no ONE WAY to success but rather the combination of all of these things mentioned...I quoted this line is because this proved to be the big starting point when you literally have nothing...you need to rally and lean in on your relationships and network...get your people to hop in and help by doing a video or 2 in exchange for the plugin... or incentivize by giving them a small percentage of sales- like 5-10% (have them use a coupon code so you can track it) ....another strategy ive found is to simply Go Live on Facebook, YouTube using something as simple as OBS(it's Free) showcase your plugin via screen sharing and clean and clear audio...Just go live and create and spend a couple hours just doing that...even if NO ONE is watching...that's not the point...the point is after you are done to take that long live video and chop it down into smaller pieces of content- Reels, Youtube Shorts, and even shorter 3-5 min landscape videos showcasing the plugin and all it's features...from my experience a good planned hour long live video can easily be repurposed into close to a dozen pieces of micro-content...take all of that and repost them ad-noseum on every platform...wash rinse and repeat the process until sales come in and you build up your mailing list and then as someone also said take the best stuff and run ads on it...My metric for running ads has been at bare minimum put in as much as your charge for the plugin...so if you sell it for $100...put $100 into an ad to get started...worse case you make one sale and make your money back...best case you make 10 sales and make $1000...then you just wash rinse repeat the process....

      posted in General Questions
      J
      johnmike
    • RE: Audio Render not working as expected

      @clevername27 awesome!

      posted in General Questions
      J
      johnmike
    • RE: Audio Render not working as expected

      @clevername27 any thoughts?

      posted in General Questions
      J
      johnmike
    • A snippet to use computer keyboard keys to press buttons on an interface!

      here's another snippet contribution! I needed to create some "key commands" for lack of a better phrase that could press various buttons on my interface to say "mute channel 1" by pressing 1 or open preferences by pressing "P" so on and so forth...this snippet has 25 buttons assigned to 25 various keys on the computer keyboard(all noted in code) im utilizing the

      setConsumedKeyPresses
      

      so feel free to tweak and add whatever keys you want these were just keys I used for my project...

      The only thing I couldn't work out was the "Shift" or "Command" or "Option" modifiers so I could press Shift +1 or Cmd + G or something like that.... feel free to take a crack at it or tweak/fix my logic...still learning! big shoutout to @ulrik for "teaching me to fish" on this one!

      HiseSnippet 1733.3oc0Y0rbaaCDlz1zMVsISxL8R6ITcHi7DaGQJ4+pSZSj+a7j5D0Hmz1ISZBMIDEpo.zPBEG0L9EnO.4ApOM8TmdNWZ2kfjhlx0w1r7P4AXQf8CeK.91k.FsCDNzvPQfl9bGLZ.US+yL5LhK6sYOaFWauszzugw91gRZ.QUUqQCrCCotZ55SuKVg9bynE87WeaKaeatCcbUZZOWvbneGqOSNt11O3QLe+crcoGv5mw5lOXOGAeSguXH3OSaTWafsyQ1dzGailMkgl9ra6xjhfNRaIMDrokvcTmdhi4J6eNKjcnOEewTqCzQpp01rGy2scxXMTSSel1iG4SqF4etw9LWVZ8imAtYTCjwHxNGnO044RlWBWROiKMixktkQGm.1.43VP+4SM1iCKHcsgo5rthxVso18ZFaJ.K3xk5aeDcm.3kTD0LqWu9BDrb9MpT4t2krY.EbchM4PX11KPLj6RFXyo9Dof3XOPNLfRNhNZP.3BzvJATORqcI2mjPhsqaaz9ZUasa0EHPuiccqcWJjJqU8XlqrW0TFSptGk40SNY8199hi2DJQuIDZu5inif4df6pwN7VztLNkH6E4VDX7y738AOIjzUDPrVlb3PoTvUtJXxCyXw8IunBAdpZh8sEVz.KZhEKiEqfEqhEqAEvCPYKUGRLWbME50w1qqZ+7exfd8EMqqfuCBe+KIbSyEMsT3+dD+OfEaiEOEKN.K9Ir3YXwdS57MVzJl+1nE3hU0NXwV+6dRF7VlKZ0TguUUxE7IEOrtT4kpEvmMvEUbuFVvAMT3v9TWXQtsRe8ZT1w3N9CcAQouOt.FFKOlz5Zmd4MVg7TZWZ.EREQnukEJYbuDIAwFT2gP7Zj9oOPDTCwNHvdTjZIwLPl.NKJmp8F6.BCpn9FvetGLLf+dm6LO4cQSEiAgYo.yppFtUI2gTiAElfOgFF2yKMXXXuZIgNd3Xp+.AGdo13tY942.m31gJc5M4P3vQj81pxIQiz83LIy1m8qz3lgAGlHJyfQkYBGQcs8CoKP9+wedYzTPlwGpERisiGlnVIx5nIiNTYZhJHykJGBALFSUjO6VrjJQJkjxoV2gbGISvqIN7WRVjwrj8nPeklywC93PnL48rIXTZoDoAz3dbW5ago+Sa2RLr5mzEoYIWZXTtafVTAifYcI0RA+Mf5ib6aOt2tWpbxmx8j8RbzXm8.gmmuJCYz7DQzM5EGQ.LVA4l6X8TJtrpkWjvzKAG+qN6V1HE4XsFXcrik0tTCwAkpcvgQGcaHdVEJlzAQp8vJYSgnZAWrdts+PZsy1cleiyBjSOatG0slJf5f.lmGrUln4h3E7TTmD8qSHTPNkY5Dy4H7oKMHfAwnQeMhKjvX1Q3wAco6WSvX8IVFIQeo5vgdd3bMWvW7XQvQ3uiRnoX7DvqSDbfP8wBI8I7ZyW4cUlCBvI4apa2yrMLaRfv2mFblMi6xJ37.ViOr+gzfEHuAmeSMD1Fxo2ayrWr813nRtkwPAGiiex.Z766H7cw8rf+dxcBoEmcD1SzWD6gfoxncDci3cDoRxpwfNYNC0KlZQtOrSnoztDvrRfMderWF3MJF7lEC9xEC9JEC9pEC9ZEC95WM3URjK0KHdyBh2pf3aTP7MKH9kKH9UJH9UKH90JH9Bp+rJn9ypf5OqBp+rJn9ypf5OqyR+8r81xVZiGlN9aHv2UFPCjL7yW5aQeCygpNZ8bFaQCORJFno+koaAWS+ST7d8jCdi6TLh1YLZsq1a0zMzQpFk7inS2B81r+wzJmPct1r0b5SzhGeO8Ds3m5Rod1KvW3hb.qDGvJqCzVKuCTK4eBykhDKEIuuTIoghjOTpjzTQxOqWljrrhjeuTIYEEI2dpxjjUUj7akJIqoH4OKURVOWbx6+ujjL6e3zAJkCKl4hTJGVrxEpTNrzHWrR4vRybAKkCKKmKZobXYkbgKkCKqlKd4CkBKqkKdobXY8bwKkBKV0yEuTNrXlKdobXwJW7R4vRibwKkCKMyEuTNrrbt3ETFbQXYxK34lF6KbG5aKO88MgWrVbCLwouyM7hb3gL4nr668RbIT0O2Kg5h5h2xnMS5z6r8woNCeD1RdY3iwWc20M1taWpibrCNiwN+3U8d59Hz+TwP7eG+91x.FpCd7v9cDCCbn.6b33BgnjXJTTodudxYE5P4tQu72vSbil365wMZlznVeam.wqbTmFBubvqEUC3S7n6BcNi8w2ISbFPMs9LW1qbbNcWMAPqqJvFWUfMup.W9pBbkqJvUup.W6iCDuJ4GNTJ5qBazz1u81QmYUWeatMn.iTqZ+CPJmffA
      
      posted in Snippet Waiting Room
      J
      johnmike
    • Audio Render not working as expected

      Messing around with the audio render snippet example in the snippet browser....works fine in the example...but when I bring it into my project...it doesn't render anything but dead space...and then the audio in HISE becomes completely disabled and I have to restart to get it back working....im trying to get it to render a preloaded midi file instead of the one that's created by the example...here's the code ive added in the attempt to make it work....

      Content.makeFrontInterface(510, 160);
      
      const var DELETE_TEMP_FILE = false;
      
      const var SeqView = Content.addPanel("SeqView", 0, 90);
      SeqView.set("width", 210);
      
      const var AudioDragger = Content.addPanel("Dragger", 0, 32);
      AudioDragger.set("width", 210);
      
      AudioDragger.set("allowCallbacks", "Clicks & Hover");
      
      const var MidiPlayer = Synth.getMidiPlayer("MIDI Player1");
      
      AudioDragger.setMouseCallback(function(event) {
          this.data.hover = event.hover;
          this.repaint();
      
          if (event.clicked) {
              if (isDefined(this.data.tempFile)) {
                  var fToDelete = this.data.tempFile;
      
                  this.startExternalFileDrag(this.data.tempFile, true, function [fToDelete]() {
                      if (DELETE_TEMP_FILE) {
                          Console.print("DELETE " + fToDelete.toString(0));
                          fToDelete.deleteFileOrDirectory();
                      }
                  });
              } else {
                  Console.print("! You need to click on render first.");
              }
          }
      });
      
      // Button to Begin Rendering
      const var Button1 = Content.addButton("Button1", 0, 0);
      Button1.set("text", "Render");
      Button1.set("isMomentary", true);
      Button1.set("saveInPreset", false);
      Button1.set("width", 210);
      
      Button1.setControlCallback(onButton1Control);
      inline function onButton1Control(component, value) {
          if (value) {
              if (!MidiPlayer.isEmpty()) {
                  Console.print("MIDI Player has a sequence loaded.");
                  local eventList = MidiPlayer.getEventList();
                  Console.print("Event list size: " + eventList.length);
      
                  if (eventList.length == 0) {
                      Console.print("! Event list is empty. Cannot render.");
                      return;
                  }
      
                  // Add a stop event at the end
                  local timeSig = MidiPlayer.getTimeSignature();
                  local length = timeSig.NumBars * timeSig.Nominator * (timeSig.Denominator / 4.0) * timeSig.LoopEnd;
                  local ts = Engine.getSamplesForQuarterBeats(length);
      
                  local stopEvent = Engine.createMessageHolder();
                  stopEvent.setType(3);
                  stopEvent.setChannel(1);
                  stopEvent.setControllerNumber(1);
                  stopEvent.setControllerValue(0);
                  stopEvent.setTimestamp(ts);
      
                  eventList.push(stopEvent);
                  Console.print("Added stop event at timestamp: " + ts);
      
                  // Render the audio
                  Console.print("Rendering audio...");
                  Engine.renderAudio(eventList, COMPOSER_RenderAudioCallback);
              } else {
                  Console.print("! No MIDI file is loaded in the MIDI Player.");
              }
          }
      }
      
      inline function COMPOSER_RenderAudioCallback(obj) {
          local isFinished = obj.finished;
          local progressPoint = obj.progress;
      
          if (isFinished) {
              Console.print("Rendering complete.");
              local bufferDataToWrite = obj.channels;
              local audioFilesDirectory = FileSystem.getFolder(FileSystem.Temp);
              local fileToExport = audioFilesDirectory.getChildFile("export_temp.wav");
      
              if (!isDefined(bufferDataToWrite[0].length)) {
                  fileToExport.writeAudioFile([bufferDataToWrite], Engine.getSampleRate(), 24);
              } else {
                  fileToExport.writeAudioFile(bufferDataToWrite, Engine.getSampleRate(), 24);
              }
      
              Console.print("Audio file exported to: " + fileToExport.toString(0));
              AudioDragger.data.tempFile = fileToExport;
              enableBroadcaster.sendAsyncMessage([true]);
          } else {
              Console.print("Progress: " + progressPoint);
          }
      }
      
      // Visualize MIDI Sequence
      SeqView.setPaintRoutine(function(g) {
          g.fillAll(0x11FFFFFF);
      
          var displayArea = this.getLocalBounds(0);
          var noteRectangleList = MidiPlayer.getNoteRectangleList(displayArea);
      
          g.setColour(Colours.white);
      
          for (noteRectangle in noteRectangleList) {
              g.fillRect(noteRectangle);
          }
      });
      
      // Broadcaster definition
      const var enableBroadcaster = Engine.createBroadcaster({
          "id": "enableBroadcaster",
          "args": ["shouldBeEnabled"],
          "tags": []
      });
      
      enableBroadcaster.addComponentPropertyListener(["Dragger"], ["enabled"], "set the enabled state for the dragger", 
      function(index, shouldBeEnabled) {
          return shouldBeEnabled;
      });
      
      enableBroadcaster.addComponentPropertyListener(["Dragger"], ["text"], "update the text", 
      function(index, shouldBeEnabled) {
          return shouldBeEnabled ? "Drag to waveform or external target" : "Press render";
      });
      
      enableBroadcaster.addComponentRefreshListener(["Dragger"], "repaint", "repaint");
      enableBroadcaster.sendAsyncMessage([false]);
      
      inline function drawDragPanel(g) {
          g.fillAll(0x22FFFFFF);
          g.setColour(this.data.hover ? Colours.white : 0xBBFFFFFF);
      
          if (!this.get("enabled"))
              g.setColour(0x44FFFFFF);
      
          g.setFont("Default", 14.0);
          g.drawAlignedText(this.get("text"), this.getLocalBounds(0), "centred");
      }
      
      AudioDragger.setPaintRoutine(drawDragPanel);
      
      
      posted in General Questions
      J
      johnmike
    • RE: Button to Enable/Disable saveinPreset (Snippet)

      @d-healey yea I think I remember seeing this but didn't read all the way through...interesting...so far in my situation it's working fine...doing a bunch of tests over the weekend.....its a tempo knob that I programmed to change the bpm of a midi player and I just would need(the end user) to bypass saveinpreset on that knob temporarily to audition loop presets outside of the bpm that's saved into the preset...but been poking around on it all day hadn't had any issues so far...

      posted in Snippet Waiting Room
      J
      johnmike
    • RE: Button to Enable/Disable saveinPreset (Snippet)

      @d-healey I just tested...works perfectly...at least for the case im using it in...something im missing?

      posted in Snippet Waiting Room
      J
      johnmike
    • Button to Enable/Disable saveinPreset (Snippet)

      Just giving back here...I was searching the forum trying to find info on how to create a button that would disable the 'saveinPreset' on another button. I needed to be able to bypass the function on a "tempo knob" that controls the internal bpm of the midi player...so that users(in the standalone application Im building) could bypass the internal bpm and just use the host bpm when scrolling through presets(in standalone) I couldn't really find anything direct...but I was able to stitch this together from reading a few other posts/snippets...it works! I thought I'd just throw it on here to help someone else that may need to do something like this in their project...Im sure there's a probably a better/cleaner way to do this...so feel free to tweak this if my logic is wrong/bad...but it otherwise works in my project

      HiseSnippet 1009.3ocsV0saaaCElxwpX1aqaEnO.D4JGrfD6s1tgFLzV6jL30lTi4rfcWAszQ1DQlzfjJYtE8krWsGi8FrcHojsTsiSlAlPPrHO+78wORcNbfRFAZsTQBZbw7Y.I3qBGNWXlzaBiKH8OlD7vvyXZCnn9o5NeFSqgXRPvN+hchfF0Itm+9EcYoLQDrbJB4RIOBdCeJ2rb1Au707zzSYwvE7ok79IurejTzSlJyP9rSXaxLVzUrwv4Lqa0BIAO3jXtQpFZXFPSBp2UFOe3D4MBu+Wx07QofcPGxPLQ9oOUlFaYrcVRuI7z3AEqaMAyxfkpvNdU3wgmwi4KleoZ7sNCzkQTVOBpUkd6TgdctM5sFJEThR08T5QgCiT7YlkVr74KC6KvMmDFJ6koh2WRsWTOrmD8PXNXJ6J3TENXQDsdV616Sw+s2QMO7PZOEf7lxnixLFofZj3eiGmBTM6ZnuXfBzfglHUTCLcl70hQMwMLsgdMS474Bm6cMB5OSKfcLX5IQuE3fV6Vwqc26HJha2EvABFpOGFy01eq.aIjJ.+VAovg77ewDnXIcCPugIL2AVTonoUP5K3FNKk+9Mn.zQLTxoV9ivv8QP01S.TYRUUoYQPGfYwqEE4b28q5pcEcIKMCZsmeQLDbr1BRTlRgqSTKP6qBRybuQAynjozHVZ5H7CIOsw3y2T8RRStHkK.ZRlHxvwkgTLrb554yRqnB4ceOt607CMo3SNXUkujaQdjhCkII2l5XS2FUHOvG4br.72HGWQTr4NS6Vqwvnrwi4hwNewEhVlBGLSwEeVpobMUHu44zcoe2BP9nSHekVyG6I+J5ItcTcATcGTaOS5BoWdDsVu1hfUR8OWZf2JZY02FHInetojj0ZKOWofZslsUZUaJvVhroi.UocWmiX4mp0zdv8qlVj+CyRNJE1Omd6LHe7lKJSx+xFe626eLyvrEEymC8aFnLbKcBNFtF6v3KQ1H7XPekQNCaVrnb.IHz3r9v7Bn9xMDNh82DVYKi7mnyA+Jh4b6KWguT9XhstJ4dk2lgEmi8o7SEo7uVIkKaURVslO1sQFmkxLUaAY66la.2CqT22VaWn4l4k6K+enuT6M1W59RwGENfahlrdNVaMbD2c++fi4cy+5vSRRfHyRBVO7z+XaaceGv+axLCVy4LlQwsa9mmMcHdglH.QWHfTs8bPM6Ib+311wVEXHHhcC9G7I2XG63fbicJLRlxhTx2kWPxdeguvMCxIg6pRMv6rgiocHtulKqySwqu7tnnpoZk.+9sMveXaC7IaafOcaC7Yaaf+31F3Oc2AZuc4qxLxo9OaHjyFbhq7WPvItKr3NsR9W.5l9c1A
      
      posted in Snippet Waiting Room
      J
      johnmike
    • RE: Codesigning/Notarization 2024

      I know this may muddy the waters a bit...but ive actually never code signed my VST3/AU...only my AAX because its required...Ive only ever codesigned the .PKG when I was using those and the Standalone app(via apple's signing/ notarizing in Xcode) now I have a custom installer that I built and I only have to codesign/Notirize it via Xcode(not via the terminal) and I dont worry about the cosigning any of the individual binaries...and all my plugins run just fine for my users...

      posted in General Questions
      J
      johnmike
    • RE: Create tooltips like this...

      @Dan-Korneff PERFECT! Thanks!

      posted in General Questions
      J
      johnmike
    • Create tooltips like this...

      When I hover over this combobox in the interface designer I get this info tooltip...How could I create a hover tooltip like this? Thinking of creating a "Help" system like this for each interface component vs having to create a manual or a bunch of tutorials...

      Screenshot 2024-11-08 at 10.31.38 AM.png

      posted in General Questions
      J
      johnmike
    • RE: Anyone here using Cyberpanel for their website?

      @orange @d-healey thanks for the clarification! ive had issues with Cpanel in the past...but it's been pretty rock solid for the last year or so!

      posted in General Questions
      J
      johnmike
    • RE: Anyone here using Cyberpanel for their website?

      @d-healey cyberpanel as in "CPanel"? making sure im making the correct connection because that's what im using via go daddy hosting...and when you say "Update" do you mean update the PHP version or something else?

      posted in General Questions
      J
      johnmike
    • RE: Delay speed - tap

      @ulrik yup this is what I was after! much simpler than I thought! and yes I meant a "Standalone application" so sorry...been separating the two versions of the plugin in my head as "Plugin" and "standalone mode" sorry...Thanks again...gonna play with this and test to make sure it's all good! but so far so good!

      posted in General Questions
      J
      johnmike
    • RE: Delay speed - tap

      @ulrik take a look at this snippet...I modified this to work in my current project but it basically "hacks" the tempo sync to use an internal bpm and you can switch between "daw sync" and "Internal" the Internal is what im actually after so that when my plugin is in standalone mode tap tempo could be used to change the internal bpm...there's a knob in there that controls the internal bpm...anyway we could hijack the tap tempo to change the knob position?

      HiseSnippet 4007.3oc6as7aibjdu4LSOqIsmYsw5f.jSUzgMTqF2hujFN1vq3qlhT7o3C8xwwoX2EIaw9AU2MEEm.mXDDffbIHmx48XtFfbH2VCjK4+fbZMLRNkSw+Gj7UU2jraJRFNZ7L6jMRXNv9qpup988n9dTcO0MMjHVVFlbAB1ZxPBWfOfu4Dc69Y6iUz4JliKvSoDjpXHSZQrr4xLYH1xhHyEHvCOjNm.AeDG6ue3fLXUrtDYNINtSLTjHkUzTrmSsdpRJpp4wvJpn4Y1IRUTxPOqgpwH.OOjOB2Prz.bORULcZOfmKviEkUrMLaZisIVbAdTFC4IM6aLV2Y9mnXozQkPeHJWSXgbHm2PUlhXJUtr8UTkqOUts3fEs9bsvCczBeLeEEYkYzmqM9P1.n4b3UeD3A9g2C8AundgWDOvaIP5AdfzOYpggAIU7DhoqgoRwbEQNTh5CHYGYZRzsaRtZDwmA4GNvcnVlfp0K8xFFCE0w.7j8Rlt5cfo1bHw+.Ad3FKqQWqrxQEq7JpDpbGX5CvroxHXyygswbA9a4iFIlfdq8KkLaiSMJIHT4XwKtLsffvYBBoEpKnoznYqhwt.nHbXZgKExIHbdiLRB4xzQ3xRoULZ2umP2CuTna2qSW.VfBWb9E2Pfwk0ykQP87LB4OJSwDoqWHZuVEDpmsnvYEZq97CE5EWqNvaKUXs2YmLBbTH53U9WyuaYkNlXyI6ld3PUEIrshgNp4ngCMLs28PCSr9glFFWSrPL6EUQasaArt7Dj6.61vPZ.Jm4HM2eNkgLXKEIujPQhlFkwRBcrsoERRE0GaaAhN0pSOL0TomN1djI.rGWcjVFLngAi128af+9x+yCpZno.iyNt6ZI+vT4H5KiLEmfw0z16wYGuDeNBsHZCMlS37Tbd7cejiu6Gw2TxTYn87QnF22muntMwrKF7P8585LWtG73eFeVCXF51BZ3Aj7lvCy3HbxHQdFZ+HQ19yBAyxxPkHHoRvlgABg18WDJ3wsEAGhZUa9ogBFJ3mf7bZAIaPrz+irQpf7fv1H69DDQWtVW14BD4ZXSeFpyHaDtKrgrwUwV1HcCaBxnaWjhtkMAKiLIViTsUz6ATPXjs4HcvEfHirbO7IDJHB0puhEB9GccjvVDzXB7SSzDiQng.jPcMMzPVT0MSB0wpYUolcCSvJq.+fMKXKnqPk5nvi6SzonAYAQmgsy1fMjF.RBkGFycQRPrTKx1NZ.KhcM8LDrMDOSuGYlVnqhIYpV.9MHlcfIQw8uDUjBZJ3oFBHJ5A+urTFppFiAEgzHKaPjrodGLEogt5DG87MNBHPg7LTepNhQuP5rkPsDqTuFBrlinGiDlgAEaTOCCYp9nCdJHNkpClpuXJBpN1hnRj.KvyXqJUuQsNVz.XfFFx7.1LrjsEUkkK8otPThIGrM7DHkE5ZhoEFMVwtORzEvNKnyBMeI7JnBqTmQIm1zQPY.UCRnZ4nTLIpLOFXwnncWX8.mRcYl4kx.asck4hNt.v9qhFaXpBhYQDVCMxhIkKXVbWRFK5fhelWIJr9HsNfmB3izAhRL00BFGYCARrnlPiQTc6NJVUIigPIa6W5vNVD7vglFXo9GD5WraH3uc2EkiHohMYABsBAozAGpqwlrCftYqPeNhUlgPOh87zZg2xaFssfCxKkYZTDXA7PQ.a4KesSLfcgXsvITLxRQanJAM.NGsqkNFLCI1MwLUQnEVZA3HMDKjvxrEdqDOOtPbCIbCQKbyrYEizqgPubYFqUWlzHVzp0EFYIF6kQxs2EsOoYdySJJeckwVQjJFMMVKchRciEuVNYsXwa1EeBtcrKutlTxDw2+XsqpE6LqiTvkOpx3DILpztS+IkjzJbi3XQy71p4Dq2Qdv9Wp2svHoBIK9R0iTGe8jhUqJku0UQ5XTo2NQtvtbV7KDqMnyNIfDHZG0dxM1I6E+zgsZmcf4.Qqi5jytcxAwa1bX7ZpWaL45N8ZazzrboX06rW81IpTD2hzreD6jEIMNKm9Y6aeo9QsrZmrvkow4DSL9P0pYG1d+yj5oKHl15E8JE+Jr1Xs3Mxb1I4GmPyN49RGUnIAj0xmEUqsR5ytoc1SMibnP77BOu2Y5sJWpXk8doXgLku4vnYRKTljuR1L5k5YojTb3UwLyeRkKJYdQDoW.6RuRpihuemKqcZ9585mnU790ZnHeEoyY6DwnW8m2sPb0qupj7NENKI9HkwxMKU2pVhbGU+Bq3sNo3ESHwilrw3FUZBFGHab8KGalYvKKYXOrggkzgFurbhBVMjNLVbH9YjWbLdu72bYhJx6WbupMGHc0ocss6PRzKudYkB62qtbx81e+iqbt7omGI+HyLipT9pzGlLZqZsacSybWMnL1JeknSTO4zFmCpg7WryKNMdhR6jvzXXiz2DytsTghjjIR2IwNYsincV7gVGlt3kR3h0t33BCN8DipYJuSma1QP+boLZ0nm.B44LPqBfaundOEcHWGDAvl.oqzsnEZPqmPk333OmAVfiR5c.1llIENvk0.npCODdqoSv+YMZHiL15nUxl6D7yEMr0Z4xcB94pOjuEBvxphfx8pXdg4s0RDTfrEv+WrFQElRjs19YgPK+u0yIDQ5K8sqz.4qeScmwZ1y0xWz6Hewti7E+NxWh6He6sLMZEVlQPkB0fWTGRypbMTm.6Am7v0fjlLBSSLOiPcSRWh4z44gz7T3.IZ+rSmCc6MI8fr3NsEQM00LUfiXelaxrh5PsGvIueNT1UHfaHEqSeRGZpHGFp2C.WTAZYnzAAWbeEvUSe5V2DFhM8ULyvzkvatH5NQgZKiJrh5blk6J3fMV0RgTzUgHBntPkmrdOnZb2iCTsuogZXoop9mApYUXEB8mEJnRWTX2mBBOF715.vJLaoDTfRYtoV24qE.ifAGMTlFGhNKZvmfecnu9yB0EJSKbGVMESYeaTGp.4BnrXUUZakguMVYB2hhjucghcKnxLo9nv2FyTgIXvfT4gVncjOMnaDSX2KXXYmYnV3OIJC6AC1AhhNv4mA8vTzkwzzXkTW4Snpsvauvp.xtqgIqmhBWk8AVp0ZdtMBbFC1nkZohBCLSY9EQ+RJmN3z0mALLyjgUaJlCqYtYMOuZVTkZ4DWhnLMF3F6oEz4LzzKUJ7ri7ewzkZIdZeoC7m6WMctqzsZAbMSVpWN84KQLbyn8pIE2pcsvQXAB9ZVKoqKu4xwrePLW82pV8ko4cRm9JB4aE0Y8HdVN6Unk8ggYHNiX5VnrERW8PQ2Pld6JwMnYmYDn7sn7MezvzeVj5R7Lz7VQ.gaZa+CMgFsBGd5XnCPa8KQag9TzVasMZGzL1ombBEDfW6lhnBhMDmsbnV0P4KVMG5zBhUgf8hHQ3gZ4Y+ro3wsEqlUDUrIpgX5rEDygRCCS8jXSnp3YsP0pJN6zOqSVJQmtYCCtsRrdwFPHC82YrSa7jwd5DEZsxjHQfrdxauDy9BEBs4l+EhTCl7EVpkahW994XpmZaYC5y3ZOmxxrtdFNLH8L9YHFzd48osX2Xh2noLgZQj6Ij7RjzPaxedTwUMrI0zcRz.biVbntcW5XtpFVY3KYX58yYtNFcaI2qAjNQt.Ox+UsxuYW0pjyAZOSzPmVLSsgD8UcW3btQA33B7dtnBlpM6R7dp6k3kYjssgNG8NGee9YUUyw.M.t.rqA7Uh4nSYd9sJtIKPH9okI+ZxerE4eyDfY7G+0j+Dul7u2qI+QVB+sKxt3ct.AbcI.2jgDSaEpGXfbjqUjHNWtaP9bDqAPh.t.OYVlCf7F40byrM8a5lZxbD7mjZrhrc+4ihS0mnzqumaiNWJBqNb5M+TlfMceGPlXYEiCMMFMzq+fM4Fa5NSCyxhJS0PuRXMpGrlZzadr9T9rsgL+UVBbehe31TUQlX5ZRmVCmGz9q9y8f1u8ONkl22ZW0TZXOBlQJnUigMUdouSSVi51UAlEOemgZb9k1T+o2RZKlxQDdBOsNXAjyqHPlzEOR0INsWkmE9ZRQcnOMHUxzWRzlXZ9H9ExBrJCD3YsAFnaCikZxbjrOjmkiesdSOwExkwcHpLD+d7reGcU1laATN8k.TrpROcM1N8XdURWaWLUkm8VFnJEmWzvhWtsE6RkYEiXsx7qSewFbDHmCd1aqbyLIdhHOWD4T7HhoFtnHd9qygENWOsP7Eq1RrQ0zkeUQZLOH8aMeafTnvv6DRi6UmN4sARq2PL+WAJ1WUjlv6Iw+h2ZHETrupHcOuV++x27H8C3Y8RybVeUwp2jk.ZdqblJc1VEOQzGRCsRjFj2sA1UATN6TJVULnwtvlSbpAcovxu3fLuk3btKFeLOsKLt0mBYcH1sAVuQjm7FFwz14WFhu8qM+C4qXHORk9l489EnP+rabG.5ev2qNm1autkh8DeepF+X8YoroP7i3qSuctkiwGrDLR+hWdCfQ2OlmmvK1sKQxdN.eDe9ydy7k63c6+8b192m+TvXydcmta9fAq5yn56+6+U+6a5mQ0vM9ynpljMf.22UjEIp2Udgwh4ww4WmiXOR2+zcHEyKIpzA8rqE0qO2ThdmYp5XceKF7ruUphxzigoB8u8ebfy0r2j.RibMKIPX8+Mp7CGTejpE4T5QOOq626gbLujKfMkoW6nO+tGttunrn+tyWTVfM8qx4m4RcNhhtzuNm+f.7nUbmIzanoBvJtGgdyLzgpxtZivai9C+bT78oWRyzI.EyZXRDoewMytn5UekK+3tz+N0M1bmZY++Cj0wmq6O0Ai+D9zEx0rga1F1uQh5WSTAA1u6ZECcig8MzU7cruAw1ToWOhunIKULRaaCMTkcj40D+wAkvS7R86e4G+ctS167bnTl.PyK4BP7iYO+c+CoXK2LBW+OlpIzRluut1y+1FDUB1ZNJh72jRTxf9pStip80+cYFfeCcMdBuiPhXogd2qZjmNEeNVg28.3GvyL+uqp+9o7tNiuyp.eJu6Yi2UUgqsf3G9+aJHd8IXfp+PuS2VyuOOTEZLDyTh9sisrgwH52ZbELj9hderPsOMgx7kHz2klNQkVqQfGPqJv44HSegLMI5xrG9ug+bGLJ84.tCFc5faTGLV5qpClu427y+WdmoClC1jNXNO0R5f4iSsjNXfFN13NX99i+m+t66f4cjNXh8icGLIey0ASx66f49NX9sQGLeymG5+5N1ACW1E5f4e8uZS5f4e5u69NXtuCl66f49NXtuCl66f4GuNXdarGZXISiuRxoJJZxl2iQAjac1+ufCxWg9LZ12lFOeDgHbZPkxekjD0e8SfhgVNOwtC7D+NvSh6.O6cG3Y+6.OO+NvSx0xCsIkzirMzb74AB0Ec9OWdfY+GeOvC49erQklTK
      
      
      posted in General Questions
      J
      johnmike
    • RE: Delay speed - tap

      @ulrik the "host BPM" at current in your snippet it only changes the bpm of the delay module....Im trying to get it to tap to change the host BPM...kinda like Ableton live's tap tempo function...

      posted in General Questions
      J
      johnmike
    • RE: Delay speed - tap

      @ulrik again for the win on something im looking for lol...this is dope and works perfect with the delay...how do you just make this work for the global bpm?

      posted in General Questions
      J
      johnmike
    • RE: Tap Tempo function

      @orange wow...just should've scrolled back a few days in the forum lol...question...this is connected to a delay...how would I connect it to just the global BPM?

      posted in Scripting
      J
      johnmike
    • RE: Tap Tempo function

      @d-healey was intrigued by this so I hopped in with ChatGPT and started messing around with it with a bit back and forth I came up with this:

      namespace TapTempo
      {
          const var tapButton = Content.getComponent("tapButton");
          const var tapIntervals = []; // Array to store tap intervals
          const var maxTaps = 4; // Maximum number of taps
          var lastTapTime = Engine.getUptime(); // Define outside the inline function
          var currentTime; // Declare these variables outside
          var interval;
          var totalInterval;
          var averageInterval;
          var bpm;
      
          inline function onTapButtonControl(component, value)
          {
              if (value) // Only process when button is pressed
              {
                  currentTime = Engine.getUptime(); // Update currentTime
                  interval = currentTime - lastTapTime; // Calculate interval
                  lastTapTime = currentTime;
      
                  // Manually maintain the array size
                  tapIntervals.push(interval); // Add the new interval
      
                  if (tapIntervals.length > maxTaps)
                  {
                      // Create a new array with only the last maxTaps intervals
                      newIntervals = []; // Declare this without 'var' for inline function
                      for (j = tapIntervals.length - maxTaps; j < tapIntervals.length; j++)
                          newIntervals.push(tapIntervals[j]);
                      tapIntervals = newIntervals; // Assign the trimmed array back
                  }
      
                  if (tapIntervals.length > 1)
                  {
                      totalInterval = 0; // Reset totalInterval
                      for (i = 0; i < tapIntervals.length; i++) 
                          totalInterval += tapIntervals[i];
                      
                      averageInterval = totalInterval / tapIntervals.length; // Calculate averageInterval
                      bpm = Math.round(60 / averageInterval); // Calculate bpm
                      Engine.setHostBpm(bpm);
                  }
              }
          }
      
          tapButton.setControlCallback(onTapButtonControl);
      }
      
      

      when I tap this button like 2-3 times it slows the bpm down to like 10 or something really really slow...but when I go to tap it again it does nothing but the console throws the error:
      Line 27: Unqualified assignments are not supported anymore. Use var or const var or reg for definitions"

      I know this is a bit of AI generated goop...but im curious as to what the proper way to make this button work..

      posted in Scripting
      J
      johnmike
    • RE: Global Midi Learn(not saved in preset) Possible?

      @Lindon ok thanks...starting to make sense now...I'll mess around with this a bit and see what I can do with it!

      posted in General Questions
      J
      johnmike