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

    johnmike

    @johnmike

    45
    Reputation
    47
    Profile views
    184
    Posts
    0
    Followers
    1
    Following
    Joined
    Last Online

    johnmike Unfollow Follow

    Best posts made by johnmike

    • How I got my plugin codesigned for AAX!

      Alright I was able to get my plugin signed and Wrapped in AAX! This was a heck of a process but Im here to do what @Lindon said to me in this topic here: https://forum.hise.audio/topic/8151/help-with-aax-willing-to-pay/12 and "pay it forward"....I did share all this in that particular post. But I figured I'd do this as a separate new post so when someone is searching for AAX and how to codesign their plugin they will find this post directly and not have to sift through 100 other threads like I did....

      These bullet notes are process as @Lindon laid out in the pervious post.. But I'll expound on these points as much as I can without compromising the confidentiality of the PACE agreement:

      1. Join the Avid Developer Program:

      You'll need to follow the instructions here: https://www.avid.com/alliance-partner-program/how-to-apply

      You'll need to do this even if you don't want to sell on the Avid Marketplace. Im not planning to at all

      1. When you're in download the Developer version of ProTools (so you cant test your unsigned AAX plugins):

      Once your in you'll see a section in your Avid account for Developers like this:
      Screenshot 2023-09-13 at 10.51.36 PM.png
      This is where you'll be able to download the PT Dev Version/the Current AAX SDKs you'll need to export your project with.

      1. Email your Avid representative telling them you want to use the PACE EDEN tool kit:

      It was a runaround to find this email but the official email to email is audiosdk@avid.com

      1. When they send you and email for a pace person email them asking for the tool kit:

      They will verify you as an Avid Dev and then you'll need to tell them that you need a license for PT Developer. You CAN'T run PT Dev without a license...it DOES NOT work even if you are already a PT Studio or Ultimate subscriber. They will connect you with the department to give you this and they will tell you the criteria for how to submit to them verification of your unsigned plugin running in PT Developer. Once you do this then they will connect you with the PACE person.

      1. Sign and return the NDA they send you:

      This will be apart of the earlier step of signing up as a Dev.

      1. Install the license they send you onto your USB iLok:

      You're gonna need a physical ilok to do this so pick one up if you don't have one...you can do it through ilok cloud...but it's going to cost $$$$...your gonna need this heavy for every step past this! They will email you all of the steps needed to access the PACE Central site and how to get the license on your iLok.

      1. Read the silly amount of documentation!

      It really is a silly amount...probably about 80 or so pages. But everything you need is in there...it is a literal step by step walk though on how to sign the plugin. This is the part that is Confidential and covered under the NDA so I can't speak about the step by step. But I will say that it is a very detailed walkthrough and you'll be good if you follow the instructions to a "T" ...I didn't have to read through the full 80+ pages because not all of it is relative to signing. But I had to take my time and walk through each step. Took me a couple of hours, results may vary depending on how fast you read/are competent with implementing the steps...I took my time

      1. Use the iLok License to get to the web site:

      As stated before you'll need a physical iLok to access the Pace site...there's no other way in
      but once in there are explicit instructions on what to do. As long as you read everything you won't get lost.

      1. Generate your signing code:

      Again I won't spoil too much of the process but you do need to be fairly comfortable with the command line/Terminal on Mac. The process was actually pretty simple cause they give you explicit instructions on how to do this in the manual. But I got into a tough spot cause I'm not as good with the command line...I did however email the support team at PACE and they were VERY responsive in helping me fix the issues in my terminal commands...so if you get stuck just email them and they will get you out of the mud!

      1. Sign your plugin with the pace EDEN tool kit and your signing code:

      The biggest problem I ran into was the signing certificate...I tried my darnedest for about a day to get a Self-signed Certificate running and I kept failing...So I broke down and just bought the Dev account from Apple for $100...generated an official signing certificate from them and that worked. If you've got more ninja skills than me you probably can make the self-sign work...I didn't have the patience to keep banging my head...paid solution just worked...I did however get stuck one more time with it right at the LAST step because there were some permission issues with the Apple certificates. This is a common issue but the people at PACE support sent me to this forum:

      Link Preview Image
      "Warning: unable to build chain to self-signed root for signer" warning in Xcode 9.2

      I'm attempting to migrate an Xcode project to another computer. It gives me the warning "Warning: unable to build chain to self-signed root for signer" and when it runs it crashes immediately simil...

      favicon

      Stack Overflow (stackoverflow.com)

      And I literally just went down the page trying everything that people reported as "this worked for me" until it finally "Worked for me also" I can't tell you exactly which process worked...and It may have actually been combination of trying multiple solutions. But after that the signing process literally took 10 seconds and my signed plugin opened perfectly in the official version of PT Studio. No Issues! Hope this helps someone and saves them the 8-months it took me to figure all this out!

      posted in General Questions
      J
      johnmike
    • 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
    • Tool For Converting .Autosampled EXS to SFZ for Hise Import!

      For all you guys/gals that use Logic's built-in auto sampler I Just stumbled across this great tool for converting Autosampled .EXS files to .SFZ for import into the Hise sampler! it's really quick and easy and just saved me from importing a 400+ multi-sampled piano by hand... you just import the .EXS file and then click export then put the .sfz file it exported into the same folder where the samples are then import into HISE...took seconds and works great! Hope this helps someone!

      Link Preview Image
      EXS2SFZ | Björn Bojahr

      favicon

      Björn Bojahr (www.bjoernbojahr.de)

      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
    • RE: AAX Compile issue with 3.6.0/SDK 2.4.1 - Apple Silicon

      Big Thanks to @Lindon he helped me figure this out! Got it to compile and open in Pro Tools Developer on M1 Mac! :love-you_gesture_dark_skin_tone:

      posted in General Questions
      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
    • 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
    • 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: Connecting Multi-column Combobox to sampler

      @ulrik I figured it out...I had my sample maps named like "Elements_Element 004" same way in the code smh...I thought I needed to do that...when I took the "Elements_" off the front of my sample map name it started working! 😬

      posted in General Questions
      J
      johnmike
    • Table Based Midi Browser With Clicks & Keypresses + Other things?

      Ok so im still on the journey to build the ultimate Midi Browser... ive been able to get it about where I want it but there's a few things that just aren't fully acting right...so far ive got:

      -a table based browser in a viewport that shows tempo, time sig, bars and key etc
      -it's clickable and loads midi files
      -you can search and filter the data in the viewport
      -it has a midi file viewer that follows the midi player transport shows the midi data and allows for drag and drop midi

      The main issues im having now is that:

      -I can scroll the viewport with up/down arrow keys but hitting "enter" does not load the file only clicking does....would love to have it just load by using the arrow keys + enter or to even just have a "Prev/Next" button that will cycle through that the end user can click...either would work..both would be great

      -I can't seem to work out the color scheme for the table browser LAF works with a panel and regular viewport...but when you enter "table mode" you can't change the color of the rows. The problem being (as seen in the snippet) you can't tell what row you are on because there's no other color option besides gray

      -while searching/filtering table data works...when you click on the results it actually doesn't load what you click...it's still loading it in the table row order....so if I search "Your Loop Midi file" it populates the table but when you click on it it loads "Your midi file 1" same results no matter what is clicked/searched...seems to always follow the default table rows

      Here's the Snip:

      HiseSnippet 4498.3oc66rsbibbcC3typkb0Jsx1kiqJ4gtP4nBTK8Pb+hTTLwURtKAIH.VdSkj7.fFXFxAy.NW.I10aUp7KQukeg7r+JzePxmPdMOjp7iop7vlyomYvbg.ffzqRY4xnj3ho6Set0ma8YZzPWqK0vPSmKxpsmLhxE4C4aMQ0TprjnrJ2tU3h72wOTtm7HEwITcSwNJTCpndWItRSFIZXP6wEIxC1FANxpOji84O8aKIpHp1k5MDG2QZxco6IOT1zazFa8RYEkZh8nskG5C5zasaWM0xZJZV.i8.93biD6dg3.59hHXqvyE4QU6Iapo2xTzjZvE4gkz5Mokj1Up1vejrgLvp3CI3ZAHxd3ZZJ8PNFGkqrjrRuFtJ.CNtH7M7TGOvVc7K3qCR+zw8TKOiMAwaE90GQVIH68f.rWB+rWber2LXoU7wRef6NDikXaHLVAFX2J65Lfe1nrktNU0rE8RKZvsisblpsNnX8uysml1npp31bO+CiHuC.ZqQzfSD4AKsjlXgRJGJT0jAyKTpce.fFkPXGuhnoH2Je1J7oSjPPsc1WlubsIBudmxBmbdsdoK2X6yZKbvjWdjU63m26vDm1oPVZ5ianLHdic2a6cN35QiyljVu9yKMP+hpunV11IN3hyRTWVu+KZdb0pCKjZ2iaYzYvkcZm5HszkGWQX+hiaIjamCqdVIs81tt5kWczXy8yd3fitXTt96LJqbAog01ax1WmpROwNaOfZbxwod43IpkOa74WZU84a+bCJM8Am28Eu9kup6NRWePoCKbnv1cRz9vRG167KG+7IMJuu30cxt+kGkZ6wFhIJUNUFsWL5jWj1Z+h8yczqGnqUczQMyD2nctwwsjN6nl6HZlRnhYZk7mT706UYrY8KT2+zRZmddbsSZUudmjaSMpMvp5vCOpdiI5BUacVRSkiF+Zo5VmlPnb8NWTx7TkiOp4du1rp3YW97lu3xF6z0nndiKZ+pWIsSorwimtdlwcOUZakcae5qRc1dBBourZ0wW1uYsK6aU8zwkKW83xG9p7mLnvNR8UutWJyyyKTZhtFUnUp7Id9UJiabPpKyVh9xyxVWqZBwCyezwWW+RqSOTp9ESFW7rLoMdwUMyjKtTiAzyK13Eu9jxIyztEED3VWu2khZ6P62vLkjlfUJkrpSt3hbMad1kWUTPXmhUxXzexd6KkQ5HgSrJ95FWMx5kWzVfCserCX7Ox+lFMO3EUK29aqcvdUp17s33Gz20JKo.DhCbXvnPsjGnJZZoCK6Q6aMrjHXbN0dmr09ZCkg4YALcF7YaUgpNqgQeIvuP2zebPaGr.9PsoCGo4Mv2rE2ey7+uY9+9y7OO+luxfpar44ZRpWAYbkEGZr4dxczE0mrYYwtRTiM2Y2VUIUncrFroIXO9WZdD9RC9P6zfeBeqt5xiL8lAcUdB+tplT89hP5N+oBsgkak+k+A9xZ.DplBCEufVSGdX5JhkOd7MH4hGe8uXs01bSRSZepNl4jXpQ7xwtFTbhgIYrntuAIeIgU3jv.poW94XQ8fH5rvpoDkLVld0HMcSe3cacMswzR5ZWYvPsKOCHurFnaTgGhEM.TNn2C6s0HMDUoJDe30df4gO1rykMUD6PUViPHdnSoihanJzTatHNDbHI.7v9+M2DmYDR4v7Y95KlSyWmwqdZXA.Apztls0XyGyApP.YPMaRGA0wYdfZCMCYSYnVSIQ0AzXl5VTDZYUEYUJoukZWbVhlpCpPtQWSIVWWVYCfcUfEs1aPogH2mDS1nBsOr7dwXSIz2QpWm7oeJY5BE5AQzE5oqMZDsG4K+RBi1LjXiJ7SPtFUegv4FrkY+WakJ6yzur4lq1pZaR6CZTpXSRihMKVuZ6pMa4C..wMD0AbANAFwbPxaW6sfZ3Vz8HO4nPJKpnf0GFKrlB0lvdryftRQEPrmtDvkK5mgwahtAIA.uOXaf6RM0rLA0YL2ciXhn1dUQTInTTQIV7qi67Ao1patoNc.QQFLk9x.pPPLpNFDg8foPAcUDtgN.FDt80LoMAKIvpPgxf+q.1D9OSIYCDfik6YJEacuA1gJOPBP6WiHdsUk6GyGFkMpNbj4jXqiazwWeMmsY.tU6qoGSEnFQV0lWX1.qt5at4lonsBGOUTL6+wP3JIYS+671ZEPkoBGzYpDvn.ncEh6Cz.39sNa6qtlsUADARrCysWUSenHvXfU5HmSAPF431v.F8WgAtgNz8LCt9Xfz+Yg0e1biKM6oKdEil5VJPXVa4AGbOb+GnwFD1ehKD+lJd+h2Zuc8u.+GLNl8oYHsY+cnVO5ZABah5T1b0gohYq0i1T6JazF8yIoRiXigpVTSF60USwZnJDPbBXZNGzUlAiQruxIxPzcq.HKZMYcCS3qaXO3dXLUbbVXQmAw7a3XsoWa5NFSeE8ySFO9ZucifnrEEB60aF3jkEcIPZhYfz1Rx5yBmPw.2SLVCrWMklAJwBJVBbVXFnTt+Lw3KoSVRD90N6rMzFYo.mfks8x5xA4JYSIhgFjUCiTG6XQCIhtrpAXcRGQEMIfmKANnKYnn5DBcLjmFaTBACMaP.KChj3XHhturZLCCv1BKlGbW9J6v.dFE.edJnkHrNKfwIIIfXhdaveNo.FrzcuA.O8loQHlpaIvX4itwTMC7Xwnuci4QnFxhpZ9HWxPjKQx6N8J0YADrht0PaRkJLoRj9tSpEPossjME8qJSGhf4u6hV4EPuRPol9nVlPTKWl6L0prHEIVzrOxkMr1L0cW5pr.xAdT9ktbgIWl6N4ptHwiUJsOBlOLAie20mUQ580f+9rCX63WFy+CNQGJpqKNgn0mkfi4fSFIZJYPTz5BAM5g4tm19JHtfROHX.LFbzjygTvDVaG0ghFGMAVnADlAic.0+vB2DNfgW7hgN3rAiXtALht3lYjvtTpkAzjKOnoVdPSu7flY4AM6xCZtkGz7LPYVEqYWISW6FiBF.6BkPcMn0+MI9h0bqPwtJhtNktN8.B109eiCMXWHvzRi6bd356wiK.CKfYovRCiVVQt6EQWeJ.uIP0ZPM0FZJTgQPdHnPbFvf0GPKvVFrvIOmfXS2g2CUq2MkL+.GDVPT2SSrmS0Nv5Lfp+6IqNvyEH.7ZpAbp.ZvXtXygcbp1zQuNmBn7NRQfmW2a2nlqpFNgphK654i1QzvV6vJoDxTKirAaw91jlMiOkomwNl6bj+YnXd7PcSG3eJnKqfBUcfoz71NC6hC6HAV9W4h2u9KVjYPQSrgMl3liqdvSGzWWaHKXks4ge76pHm0dtGB.RnMcHm9eDVH.yCKkPGhx87p9o3bNs5T8JCMqGX7fZrYH8sr5hs+oukhxDlvS8I9yTnCiPPte0ndtE+w5xgcwerS+fs0.h7GPobCTDp+FnvGKpIqjy.E84siJ3jwKD+71.OQULn2MsQMQfE5cS6fkRQrHoXtXN5bk.uuEPNVXHsp55Z5eNooqyJANfEp96fGn0PHLwVHGuXbE8lgiB11KCTVQiYhnZORKSndqNVll.+5KCMdh341jJbRjLdfafXYdfiS517s1R9xx.7AiNLyyPV3ynUUHrKSepbFXF8ZBwPL7rzyuIP1x1r6.jOFXNhCSOrjhCB6edhChgaQbr08yVb7w.rtY4q8mh8gcyppC.VVnqNbnP51JZcDUr61LTi9EEU6UiRUvNcrF.tfNcfLT.ntapqXQw9afFwUXsBTGrbm1nqAaPXEM3IjX9TQXxw9jzASaDFNamA1sFxeqUbWoDjnSObFsA95pDBjLjMw9wD9bQFv5CC1PIad.D1MHol1svojJL1Pmw.LjMhJpHOPk1COU9TvXBqCli1E1Vzo8P+Autuf26.3fV9a.ODAvY7Ez6YaHb8sZnS+MXmbNBMXLVa57AidvJIqsFI3Z83AhqExLLYmhxaytEO+fBw9BUzjk8iUluS9d+yxXVXN61+Zpsm1UT8xPANwVWvTWdXrv62AVFTYYz0wDc612AeDYCBV0vDrQZTULENnRPktLnSBZgbmNujm8vzn9dXBO1SL6JwBjWbdUH4TskaxxPxMXEXJJqZ3WVWm76+82HwliGZOMKfjs0ZABo5.FhcOR4Fj32A7gqz4rmu+YI2ivd2YImy5tLrzsUjU.SRgQVFRHusDo5WRil.3eIdmC9bhmcP5vtbn+JjP2mSI1R+CTiwd2AvTjvS0u+LmyAeJv42m0z3KHUeQKLlp0vNTceN9L.4h7vfWbF9k6hyz0V83CPM0cUkMOXDUcd2qINGcJG.fCWAeyj8VT+YNuEUZuibdKjb3K98i4Cr+wwXd+uzVtvH5ibPTIVMRLj7HdrRf66ZwztyXsuZW1UgfKRDGoBjTHsooLpDiTgNVtK09EDuJeEpwEHVh73olRbQdxcRvudJw+NwslL8genyVWgcQd5.j+vVRr2XfGH5aYYvd2Q16KtIlA.dz27MeyyPX7x0h2hqzIKDOWgrwyjv2DIQ3AP+eQ3M5hlhP1GH5S2KTgMXtHe.ehrYDhyTHSEx0rExm59NxwWoFS99.d6uCxEeDDkSb+hi7vGoxJbbSkkG4p2GIhMOvGIBqo7KK3x9uXKyuTyw8emDGyql.bze9O+e20pXJtezsYS4ssvU121x+y2sktXOYMfyrF4+BEHaTWaHfZQc.3HqrrzhYCNGZE+Ob2o0GDbag8BKXj5I7SCf4mdrsGW6ui1BUb3MOLXsIAzwvm2gPawNQaUwtRujdC13Iyy53w1VG48wCa867Iyb6Fxr+GtgYO2oa4wOLa5zExlKYgLAMP3ykMY1LoxDzR+C4SFOc17IimJSx.lIHhxUHepzYSmmCh5qckareCzRDJ9k3afU7Iqe37j0Ucj05ySgy8quUebXO4F9ES0g9UCISUHWlboRUHU.0vS3ymHYgTfeepfdE7IRkOQhTEBpdvD.2lv6ee9iMctCq1xdM3zVXahZi2rLTE7Ld+CkXQZBmfsschchGX4.3vDfunsF0SXeBetLoSmIUtbgk0bIRlLKDeKWnva7IyjOQlBIrujaQRxi0iDcZFrc6gcu267bIYs1MJqOJvLwW6s9vWJWit74yDOS54nUus8Ut1KXesFnJZI+ZVZIHx4+1e7O93s7q04mmS9mvGpeEyK6x2cniq9uhe1ulNtkhdOlm88D9Hy+oUPuYax72yyZ5IFRoht3.xmRvCixHX.J8g2h8zGGzdZAQQtKlSYSFOWlrEJjLTJlu+6+92ELIJKWYkJUXCaaLkl+MOcgVSQ23oArldJXNMMU3I9RExGo2Mxc8t28Nmax9MtdZOiutVO7cJG7Rii2TdmIfxDCbE0vqglpgr4j.2u52W2j7kkE+D9FxlcklMOtxL3Q75Z+i.O5b+6eJe098ocM8XvGxW6jebtr89I+GYS9mv2BNlF6sQxH9uj8L4XwwTx1TUpNp7RrfeKD+GK6uEhQK8uEhC5ZBjustnpwHMi.2p+VzgxsAmUC+T6UFzZ5zKah6l9Gurln9Lm5O8aqAB4LWSK7hfxLKJNTyRMv83L7OEfGtbmn4V9MY7ver9MY7vkyLYwr2OAb7iDowM9Q97LvLd3HEZU0wTE33SLd7mAmWpuHbfb2QCZWWWSUajjlpbW+a5Mol5xCFP08y6yTfJZZF32ZxuXqlTEpneC3e8V3E8RTGuJV2ScQhkWWrn8qeEuM6RPmQxeN6a++pY1BCd+fkJ386c989GH+NG.4V2xe7zeiaLy+scYkOxY.BNxbCm+69WWI6OTghm+zmB73.0RBG+YFA72E7nzManoHpGV8+952OUf.kK1FAEoe5XSigkv290OgXXlIwOcX3mgmr4u.XW6K58f5hPJEr+T6aMrET0SWJd67gSEfcIMxJXkK1OG2s0Usnp8XO.0i+NmISfOGwYxDtS9WMzXnXWcsusqciTQ2+GyFAzspreyOqxWGelj3lsPEuE.ea2tAQ0MVXx66BSceWX566BybeWX166ByceWX9aegXIrEsL0FZ6KxwUuQU6yxFY5OL2HOf6+C.VtZ7.
      

      here's some midi files to test with:
      MidiFiles.zip

      posted in General Questions
      J
      johnmike

    Latest posts made by johnmike

    • 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