HISE Logo Forum
    • Categories
    • Register
    • Login
    1. HISE
    2. VirtualVirgin
    • Profile
    • Following 0
    • Followers 0
    • Topics 118
    • Posts 431
    • Groups 0

    VirtualVirgin

    @VirtualVirgin

    https://www.virtualvirgin.net/about-me

    70
    Reputation
    45
    Profile views
    431
    Posts
    0
    Followers
    0
    Following
    Joined
    Last Online
    Website www.virtualvirgin.net/
    Location New Jersey (USA)

    VirtualVirgin Unfollow Follow

    Best posts made by VirtualVirgin

    • Posting some public acclaim for David Healey

      I just wanted to make a note on how helpful David Healey is in this community, and that his tireless efforts to upgrade everyone’s knowledge are noticed and appreciated!

      Thank you, David :)

      Happy New Year!

      posted in Scripting
      VirtualVirginV
      VirtualVirgin
    • FR: Support for all MIDI message types

      Christoph,

      First off, I would like to thank you for this amazing development tool for music :)

      I am quite happy to be taking the plunge and learning as much about coding in HISE every day since watching and following the David Healey tutorial video: "How to make a synth"

      Now, my main goals with HISE involve making MIDI plugins; some to be released as free utilities, and others as a paid product.

      In my tests it seems that HISE does not receive or pass (thru) some MIDI message types:
      MIDI clock
      MTC
      MMC
      SysEx
      etc.

      Then there is Program Change, which HISE can accept and use, but not generate or pass (thru).

      My concern:
      When using HISE to make MIDI plugins, blocking these messages may deny users access to certain features that are needed for the next plugin in the chain (often a VSTi).

      Therefore, if I am to produce MIDI plugins I am apprehensive about blocking those messages, and I, myself as a MIDI plugin customer would not be happy if a plugin that I purchased were to deny the passage of those messages to the output stage.

      Personally, I do a lot of orchestral template mockups in a system where the articulation switching of VSTis is managed by expression maps (in Dorico, Nuendo, Bidule and Reaper) which are changed via incoming program change messages. Currently, I can't actually use any of my HISE produced MIDI plugins within this system, as without PC messages, it blocks the articulation switching.

      In addition, there are many VSTis that can utilize program change messages directly to change patches. Kontakt, Omnisphere and VSL for starters.

      And from my observation, it seems that many electronic producers with outboard gear setups require MTC (MIDI time code) and/or MIDI clock to sync devices.

      I also have use-cases for plugin designs involving MIDI clock, MTC and SysEx and would love to have access to them for making custom MIDI controller managers.

      Given that, I would like to add a feature request of three different levels (sorted from lowest to highest complexity):

      1. a function to pass all unused MIDI messages directly to the MIDI output (without any processing)
      2. a method of allowing HISE users to get and set MIDI messages in raw MIDI hex (so we can roll our own)
      3. a feature set in the Message class for these other MIDI message types, similar to the ones available for note on, note off and CC.

      Thanks for your time,
      Craig

      posted in Feature Requests
      VirtualVirginV
      VirtualVirgin
    • RE: Let’s Build the “League of Newbies”

      @clevername27 Thank you very much for your time!
      You have a lot of incite to provide and I found the instruction as well as conversation to be quite worthwhile. I would certainly sign up again for more!

      posted in General Questions
      VirtualVirginV
      VirtualVirgin
    • RE: HISE Meet Up

      @d-healey said in HISE Meet Up:

      @HISEnberg said in HISE Meet Up:

      I don't think you could do spectral morphing in realtime

      https://www.zynaptiq.com/morph/
      https://web.archive.org/web/20180705061655/http://www.hakenaudio.com/RealTimeMorph/

      I find the Kyma to be rather convincing for smooth morphing:

      I would love to hear this kind of thing used to interpolate between sample sets for articulations that have capabilities for continuous control of timbre:
      bow position, fluttertongue, growl, stick position on percussion etc.

      There are a few different algorithms to choose from for morphing on the Kyma, and I don't know the details, but I think these are precomputed FFTs for resynthesis.

      posted in General Questions
      VirtualVirginV
      VirtualVirgin
    • Upon opening a project/preset sometimes HISE will uncheck all of the MIDI inputs in the settings

      I am not sure what is causing this, but sometimes when I open a project/preset I am not getting any MIDI input and when I check the settings the MIDI inputs have been turned off:

      Screenshot 2024-11-08 at 6.07.55 PM.png

      Whereas I am certain I have saved it like this:

      Screenshot 2024-11-08 at 6.04.31 PM.png

      posted in Bug Reports
      VirtualVirginV
      VirtualVirgin
    • RE: clicking 'drum pad" buttons OF MY PLUG-IN in my DAW dont record midi notes

      Yes, you can send MIDI out from button clicks.
      I am working on a series of MIDI plugins at the moment.

      You need to enable MIDI out in settings:
      Screenshot 2025-01-09 at 10.51.32 AM.png

      When using UI components to generate MIDI notes, you need to use Synth.addNoteOn() and Synth.addNoteOff() on the callback to you component.

      Here I have pads (made with panels) which play chords when you use a mouse click.
      It turns the notes off when the mouse is up.

      			// mouse callbacks for the pads -- 
      			pad.setMouseCallback(function[unitSize](event)
      			{
      				var ps = this.data.pitchSet;
      				var l = ps.length;			
      				
      				if (event.clicked)
      				{
      					var velocity = Math.round(event.y / unitSize * 127);							
      					for (k = 0; k < l; k++)
      						Synth.addNoteOn(1, ps[k], velocity, 0);									
      				}
      				
      				if (event.mouseUp)
      				{				
      					for (k = 0; k < l; k++)
      						Synth.addNoteOff(1, ps[k], 0);
      				}				
      			});		
      

      To get the MIDI to output from the plugin,
      as others have said you must use Message.sendToMidiOut();

      To make sure it catches everything (and not some intermediate stage of MIDI),
      I always place these functions in a script processor and container after all of my other containers:
      Screenshot 2025-01-09 at 11.00.55 AM.png

      And place the Message.sendToMidiOut() on each of the three MIDI callbacks:

      Screenshot 2025-01-09 at 11.01.15 AM.png
      Screenshot 2025-01-09 at 11.01.20 AM.png
      Screenshot 2025-01-09 at 11.01.25 AM.png

      posted in General Questions
      VirtualVirginV
      VirtualVirgin
    • RE: Let’s Build the “League of Newbies”

      @HISEnberg said in Let’s Build the “League of Newbies”:

      @HISEnberg Done, I created the group chat. I guess anyone else who is interested can post here and we can add them in.

      Add me :)
      I'll check it out.

      posted in General Questions
      VirtualVirginV
      VirtualVirgin
    • RE: Rounding error?

      @d-healey It needs both ceil and floor to work, so I wrote an inline function to do the job:

      inline function roundFix(value)
      {
      	local remainder = Math.fmod(value, 1.0);
      	local roundedValue;
      	remainder >= 0.5 ? roundedValue = Math.ceil(value) : roundedValue = Math.floor(value);
      	return roundedValue;
      };
      
      const testRound = roundFix(4.49);
      Console.print("test round: " + testRound);
      const testRound1 = roundFix(4.5);
      Console.print("test round: " + testRound1);
      
      posted in Bug Reports
      VirtualVirginV
      VirtualVirgin
    • RE: Is there a method to rotate a path?

      @d-healey said in Is there a method to rotate a path?:

      @VirtualVirgin Instead of making a function to rotate a path, why not make a function to create a rotated path. You can pass in the data you would have used to create the initial path.

      So based on your suggestion I came up with this and it seems to work:

      inline function createRotatedPath(pathArray, angle, area)
      {
          local rad = Math.toRadians(angle);
          local cosA = Math.cos(rad);
          local sinA = Math.sin(rad);
          
          local path = Content.createPath();
          
          local rotationCenterX = area[0] + (area[2] * 0.5);
          local rotationCenterY = area[1] + (area[3] * 0.5);
          
          for (i = 0; i < pathArray.length; i++)
          {
              local x = pathArray[i][0];
              local y = pathArray[i][1];
              
              local newX = (x - rotationCenterX) * cosA - (y - rotationCenterY) * sinA + rotationCenterX;
              local newY = (x - rotationCenterX) * sinA + (y - rotationCenterY) * cosA + rotationCenterY;
              
              if (i == 0)
                  path.startNewSubPath(newX, newY);
              else
                  path.lineTo(newX, newY);
          }
          
          path.closeSubPath();
          return path;
      }
      

      The pathArray is a 2D array of x,y points
      i.e.
      [[x,y],[x,y] etc..]

      posted in Scripting
      VirtualVirginV
      VirtualVirgin
    • RE: How many times is the onControl callback supposed to be triggered on compile?

      @d-healey I'm imagining that you answered that question before I even submitted it! Lightning fast response.

      posted in Scripting
      VirtualVirginV
      VirtualVirgin

    Latest posts made by VirtualVirgin

    • RE: Problems with persistent panel data?

      @d-healey No error. I've done it dozens of times over here.

      Also, I used var because I can't use const.
      That throws errors:

      Screenshot 2025-05-10 at 7.53.34 PM.png

      I can't put the const before the if/else because then I can't reassign it.

      posted in Scripting
      VirtualVirginV
      VirtualVirgin
    • RE: Problems with persistent panel data?

      @d-healey said in Problems with persistent panel data?:

      Content.componentExists()

      Works here without any errors.

      posted in Scripting
      VirtualVirginV
      VirtualVirgin
    • Problems with persistent panel data?

      Some data I am trying to save in the panel for persistence is not reloading on 2nd compile.

      In this snippet, the first compile uses the .setValue() method to save an initialized object to a panel which has been set to
      ("saveInPreset", true)
      Then the .getValue() method is used to retrieve the values inside, which then print to the console to show that the values have been stored properly.

      When the project is compiled again, the same .getValue() method is used and returns the correct values immediately,
      but the values get wiped after a 50 ms timer (.getValue() returns "0.0").

      By the 3rd compile, all Console printouts read "0.0" for the value.

      I'm at a loss as to what is going on.
      Am I getting something totally wrong or is there a bug of some sort?

      HiseSnippet 1068.3ocsV8+ahaCE2okLMx1IsSZ+A3wOAanJnE3ZuoocqTXCs0Vz3V0jNUcxMwA7ZhcjsSuhp3+48ev1yNIPXPUug5EUUgee8SduO98xXovmpTBIxw6sySnHmuzcxbtdV+YDFGM5LjSW2IbVRBUiCnwBtRKIZFeJNgvoQ3.hlfSnRESoobeJloToTE5z4IDkhFfbb1+mMgxoZEj84u+wSIQDvzUhPnqDLe5uwhY5URG+lekEEMjDPeKKtj0cdyHeAuuHRjBvde2VnDh+sjozKHFy1yE8KD0Ljy2518vi76D7pfCOr6I87I8nmDRBCaeTPmN8N9j1GcBoyw8ns5hb9rAALsPNQSz.3cpbpHX9jYhOvyRvULE6lHp4PazDHyYhGJhBLuhFon9yXQAiKpmJDDkwqpt6mUc+Z2yYArkxWUk+JqB7JOJW.c1ac3s+ZvqcY30pD71BjbJAoJYP5ktS7krD8JMF77Eti3ZpLj.8oxPIyVzdKp31W.Vv0GDStkNTBGV5Q8dsZ0DC+qw264cGQhATqGa3KvYVHt92T36TptuHNQvgC0qszrZMZ38fW0kmw+.tvCRPfUTYqahgzYR1JONPQg.pH2QGwGKovIvJsLkZrxqpETPTGvmx3zC7kTnxZnYxKu4un9551fYBhUXeRTzM.IqdXJ2WyD72sLQPTutdCup.bWO6WQhRo0AoFMX3QJ9vYvskWieW6lG17nqalKOjEA0sLU4hLtX+g4olhRj9yrwqF903Td.MDPcPy+iUQ.voACsgyZspFjrqW2rDhTyHQCtm3qMQq13LA0V2rXF+oRXL49MMwXwB3eKLEPnPWE5aJQD8fDIasVLVADZ3RKffuCZLFVypx2zhxWiFEwAZFZQhsa.MGnPsHuEoA7mItaKqBO3uEdzHE06A71IQOJsyRNdFf7hbd+SPw9+vvdv9l8bTN81nXtHCKqJksM2cwEXAK3WHzzK44vXg2FpBC2pNSAWJhhL4YKpyQvi6XcdZ7MTYS7cF7uzPX305SDce7IhkGX6m0+KYnfOhyzWlP4O1XbTNowL8LGUfoZ6ryWTL6zTlQr.ybykkcjEyk2xg9iQlq4EQBBJjHX4olYdGbNidGrELapbU2ynpaglj01bpJ7d9wj26A6bLoadwOJOGzHyJbyUAvRHQPZDQu9lIy96bEPyYs0AlQ9bESOu798ms0UerP7ktiYZ+YaGi6sELBcfOEXLeI+KbGDFB2vWAvJtC+yOMazQ+tH074XmSzRloweQZ7D3Ci7oP14.avb4vYOCMN6bqBNwDJOvd3efmbksKHGFksKThhI9Rw68yH+lOi3ysR.LwsexUU2yMmws2jxGCeUy688WOTa33g6piGsqN1YWcr6t5Xuc0wWsqNd7S6n4iN+oTsHN6ZCBc93A1QTNNC3DfAZYqn+UZmK2Q
      

      If the initial "setValue()" object is replaced with just "1". The value persists through compiles.

      HiseSnippet 986.3ocsV00aiTCE0SRFDYfUhUhe.d6SIPUTRZZZKqPrzzTHBZaDYoBIDZk6L2IwzYrGM1SgnU4I9Cy+.354iLS1ltaIpLODEe88iiO95i8zXoKnTxXhkyqWFADqO0d1RgdwnELtfL4Lh0Q1yD7nHPS8fPoPoiYZtXNMhIf.pGSynQPrhqzfvEnbkJATz9jSWFwTJviXYU+6LIypYCR52e+MmxBXnyklHjqkbW3G4gbco0ou5G3AAmy7fWyCq38fWMwUJFICjIHvqa2kDwbukMGtjYbqlM46YpEDquv9v9G3Nv6Hu98O7jgtrgvI9Le+dG3MXvviOo2AmvFb7Pn6gDqOZrGWKimoYZPQrZbpza4rEx+PjUfq4J9MAfYPOxLrxYlOWF3YVhFqjQK3AdSKXTEAyxzR9sdF+941Wv83qsWxyeV5DzxHpRfV01Dd02.d8pButUf2VfjUEH0HCRO2dlaLORWNiAOeh8DgFh8Y39TUnj4Ko1eU2djD8Pn6DxtENOFGrNhVC61ceJ9S6W53bGKlhnVO0zwfi49zVunH14fdjLLRJvAs1asa60tsyacZtdL8qoEQv77RMU068oX4LEqLhNJ.SnhcGLQLMFvQnW53Dv3kSyTPgYcrXNW.cbiAjYMsYwWcyuCt5VoIyjjTiiXAA2fMYs7SDtZtT7qqKDl0eqUamlHb2r5WyBRfV8LIB+vevUfRF.chh4arXoJbqEae+J5deIBQC+Uln4EIpc6zLYpRGLfnTbgvj5zbUNX0r3L315PjLnMcV4.AJv4szsSkOH4mRQOAvcU9t+Gfn+uvyHM67jfslN2iHWkgkRZrmoClVfEpTboTCWIxgwJm6Mku+VmyP3wxf.Sc1xz4H3gCrkHI7FHde5cF7u1Q7H7l5B1OrtPUYK2r8+JNJESDb8UQf3gDyH4MMFMjbTgtpSUPdVgBhglIbOi5wZZmjh4px+jedxY38FEYBSJVH7RDM2rFrNCtCuKHSapo8Yf5VbSJ027VUbc9Xp6eh9YYp3xh+TUMvXK038EDQoXoWR.Suo9r4Vr7IvMmMDEMBeBEWur5x7cEsa73Dse+2o7Xg6ysmx0tK1NdqsE7h6F+ei27q.el8Xee7jeIXaXe9u7duu6oAJ+jLw7zkKX5Xto43xjvY3SHbADIBriwb.xploUOab2h9lYfvKcv+fe4S1qnAxLYuhIIgL2X4abyNfXtv8iSsfXRj93jl1WXFS68tGKHjP79+235tYptWf820.OXWCbvtF3g6ZfC20.OZWC73Obflmm8sIZYX1wIB4hoiSkwrrFKXX2XZmK4eAZo8bC
      
      posted in Scripting
      VirtualVirginV
      VirtualVirgin
    • RE: The big bug tier list

      Link Preview Image
      Viewport viewPostionX and viewPositionY Value Errors · Issue #742 · christophhart/HISE

      Steps to reproduce: Load the snippet- HiseSnippet 1123.3ocsVs0TabCEVK3kIrsoSSZ+An5mLTCr1EJgllo.FSqmxEOXJSX5zgHqU1VCqk1YWYHdxjeA8w9d+M1G56omydwdM1PR7jtOsma57oi9z4nlgZtHJRGRrbNeXffX841sFpL8p0iIUjFGPrJaegTbafNzPuA9ooNRZjZ0Ko6GpYdbVjQDRiTxf....

      favicon

      GitHub (github.com)

      posted in Bug Reports
      VirtualVirginV
      VirtualVirgin
    • RE: Total Beginners Guide to HISE

      @suttonaudio https://www.youtube.com/@DHealey !!!

      posted in Newbie League
      VirtualVirginV
      VirtualVirgin
    • RE: Viewport problems

      @Lindon Doesn't seem to be. I've just come across some more issues today with the Viewport as well, that when attaching it to a Broadcaster it is putting out odd values for the viewPositionX and viewPositionY in an unpredictable manner. If I had more experience coding I would try to do something about it myself, but in the meantime I'll have to add another bug report on it.

      posted in General Questions
      VirtualVirginV
      VirtualVirgin
    • What is the purpose of the control callback on a Viewport?

      I can't get it to react to anything:

      HiseSnippet 806.3ocsUssaSCDDc2z3Jh4hnH9.r5SoPUkSHosADhRyEHBRaDoTwaUaVutYUs20xdcKQn9MwuF+Avr1NINMUosQB+fkma6b7LmY19gRJKJRFhvlmLNfgvOwXvXgZTyQDt.0sEB+LidjHEKzJU0giCHQQLGDFu1mzJvkJhRd9yGNj3QDT1LUHzoRNk8UtOWMSa+C9B2yqCwgcB2Om20NnKUJZJ8jw.dVyvFEPnWPNmcDQ6VACzmIQiP3WYPo0Zv12s5d1Uavp6TaX0J1jp1MZrGiT2lNrAiT0cH0FgWusCWICGnHJVDbnGJcFOXj7JQZBNkGwG5wzBUPCfLmpF0bD2yo+jhSDBgK1eVoZszR0KM5wc3S0Oqj87DCVyhHeQCWXYPpxC.R3bPpXJj1vX.MjGnlYQimGazU.cPWBzaxCkTeQE9M1noD7Pn1wmbAqSHHLMhx6ZausE7Zq2YZZBMnHkE.b0ob1UAxPk06slDLwwYh1xadRNe1b65vYTWeD4CcmHlRGanzqIwyaHzsKm29Mrk..tviKXVtwBphKEVKw+xToefT.HaaqKIdwrsL+kYIvoHoGamfPt.fYhAq2to0qsTg5e2TOgbc8zbHEGIUriEkSN.yqMstoIW2a0VFf7Xg2pYM8ObYAVVD6OjElG9ZGg187bn0uebHZZeJmiRQWAWcb.KStizyQyMzeuHiCk0n0buLDBtpRXduHi4wlRAPbG81i77.Tx+Q98Cnu2sEQQlbhvgCILfEp35+KbK1kv9iTtcIiVrnKTxfDey5rPo3gj+ehvF3pPZGO4CzhCQv3qzI1inlelVusKy.zjlaPROrHh3pw42F9.FzsW5f98EhaXzmqnitcLV3VvHT0+efwr0iO0nsqKiplAvhFc9wptK7NR+2jwJt37dDUHW2jOJ1e.bMBkAYWHXdQ59cAMENU1VKqq.CXBmDg+BOYFqnkwYFqLwHxmPCkmQSI95EvOJQCfIQxETkfaJAYqJKRy8g6CNiRm+nVHvpqZfuYUCr1pFX8UMvcW0.2aUCb+6NP800eLVI8SGaPnd8amrVBiaKH.CLgsh9GvEEW9M
      

      The Console prints "value: 0.0" onInit, but nothing when clicking/scrolling the Viewport.

      posted in Scripting
      VirtualVirginV
      VirtualVirgin
    • RE: .get("childComponents") does not work or am I misunderstanding something?

      @d-healey Thanks :) The components are being created and referenced in an inline function though.

      posted in Scripting
      VirtualVirginV
      VirtualVirgin
    • RE: .get("childComponents") does not work or am I misunderstanding something?

      @d-healey Thanks :) I guess I will have to store the component references in a panel then as I need to use them during a callback.

      posted in Scripting
      VirtualVirginV
      VirtualVirgin
    • .get("childComponents") does not work or am I misunderstanding something?

      Screenshot 2025-05-04 at 5.09.23 PM.png

      Child components can be seen in the JSON of Panel1:

      Screenshot 2025-05-04 at 5.09.30 PM.png

      What am I doing wrong? Is there some other method that is supposed to be used to get the child components?

      posted in Scripting
      VirtualVirginV
      VirtualVirgin