HISE Logo Forum
    • Categories
    • Register
    • Login
    1. HISE
    2. trillbilly
    • Profile
    • Following 0
    • Followers 0
    • Topics 103
    • Posts 634
    • Groups 0

    trillbilly

    @trillbilly

    61
    Reputation
    81
    Profile views
    634
    Posts
    0
    Followers
    0
    Following
    Joined
    Last Online

    trillbilly Unfollow Follow

    Best posts made by trillbilly

    • RE: AU Compiles but not visible

      @d-healey You were right, it was the bundle identifier.

      posted in General Questions
      trillbillyT
      trillbilly
    • RE: Apple altool vs notarytool

      For anyone doing it it manually, here is the code.

      Thanks @d-healey as always!

      Codesigning Plugin
      codesign --remove-signature "MacHD/User/Desktop/PluginName.vst3"
      codesign --remove-signature "MacHD/User/Desktop/PluginName.component"
      codesign -s "Developer ID Application: YOURTEAMID" "MacHD/User/Desktop/PluginName.vst3" --timestamp
      codesign -s "Developer ID Application: YOURTEAMID" "MacHD/User/Desktop/PluginName.component" --timestamp

      Build Installer

      Sign Installer
      productsign --sign "Developer ID Installer: YOURTEAMID" "MacHD/User/Desktop/PluginName.pkg" "MacHD/User/Desktop/Signed/PluginName.pkg"

      Notarize Installer
      xcrun notarytool submit --apple-id "YOURAPPLEID" --password "App-Specific-Password" --team-id "YOURTEAMID" "MacHD/User/Desktop/Signed/PluginName.pkg"

      Wait For Upload To Complete

      Staple Installer
      xcrun stapler staple "MacHD/User/Desktop/Signed/PluginName.pkg"

      Check Status (Accepted)
      spctl --assess -vvv --type install "MacHD/User/Desktop/Signed/PluginName.pkg"

      FYI: Just a tip coming from the altool manual notarizing. I used to have to enter my TEAMID including my name like "My Name (GD78YHD87G)" but with the notarytool, it seems you just need the actual TEAMID Number, not the name as well.

      Also, I dont think this way sends the Notarization Email Confirmation. I did a fairly small upload a while ago and have yet to receive it. I've had it take hours before, but for a much larger file. Typically it sent the email within 10 or so minutes with altool. (it does not send the email. Once the upload is complete, youre good to go).

      posted in General Questions
      trillbillyT
      trillbilly
    • RE: Notarisation for dummies

      All hail @orange

      posted in General Questions
      trillbillyT
      trillbilly
    • RE: Preset Crashes DAW

      @Lindon @d-healey @Dan-Korneff @Matt_SF @DanH I did another rebuild and managed to get things saving correctly (so it seems). I messed with a few settings and properties so Im not 100% sure what it was but it's working so thats that. I appreciate all the help and input fellers!

      posted in General Questions
      trillbillyT
      trillbilly
    • RE: Making a Simple Rompler?

      @daniel89ep Ya, @d-healey videos are great. I think this is with a Sound Generator but essentially you do the same with the Sampler.

      https://www.youtube.com/watch?v=2C4psWqleRs

      posted in General Questions
      trillbillyT
      trillbilly
    • RE: Sample Editor Functions + UI Control

      I dug the forum again and found a little trick about naming the Sampler for instances of 2 const var calls.

      Im horrible with scripting and new to this so excuse the shitty code, but hey, it did the job! Here is the code if anybody wants to try it out. It allows you to control the editing functions of the sampler (Loop Enable, Reverse, Loop Start/Stop, etc).

      HISE SNIPPET:

      HiseSnippet 2171.3oc4Z0sbaabEFPRPIj1owIStn2jYvvoWPkQVgT1wtM+TSQJoLbhjLCorSlwMSxRfkjvFbWLKVpeZGOSeD56Pauu8MvOB8t9Z365ktm8G.rfBjBRwIwSKuQd28bN624Cm8bNXg6wnd33XJyxtxwmGgsruoyfyI7IclfBHVc20xtpyQ3Sc6P8wVsOOBEGi8srsW8KEqaWYMK4uW9f1nPDwCmMkk0ioAd3CBlFvylsWquJHLbejO93foFRe2Vc8njNzP5L.Kq5zvJB48LzX7QHgXq3XYu9d9AbJa.GwwwV1q0l5e9fIzSIJ4ebPbvvPrXPSqAfgTSuOMzWfXwrVclDD52Kwmisrrc5kw.qpXfOv4v.+fz4yXhaIWvMSCS9vdk7va0bvqoI7ZX.uBfjsAjVSAo2yYfGKHhmsh.O2voKgiYiPd4eznj0Zk+dUmNTPBBeqonmg2mACR0ndysazXS262nwFeV0pe7GOXmC6cvd8ca5t+iNpywce3QCpVEdjDycOAwbGflFEhYMc+BWY7wViwb8b0qkrXMsoTCAScasdt.qv3teEgNrZ.ILffcGMi3wCnDWJQIiTDAdYzv5dzoQTBf7MgcObFdip+optvuQTV8X2.RJd1xigABe.NDKMW8Za8Q01XCovJUD+BodnP2P.7QHVLFHg5wBOnt1Lao96dD+M.WHQq3shufHRTpAk6G4FpE+4UeN35IrMX4NINPB6HUr1FBSpcxNnvvgPPd8hXfExj.FWNOBB7FOKBhjwgau8u6N2+dklHAcWNMlQ.WjDOfRiVdvnPhKMTrhfAQWWFjYxfnKmAQ4XvT.lwfrRPdopsHxadGeAj2Rh+Dq+lczmFgWsyuZkVFucogbeqnh2x3Mo.ugybRLd04NoZKi8L88EF0gfhm9tsmw4TR0EPhpUuzCt+xPgM0QeRG4pyhJeaYzXNuWvi.QJDws1oPk+w0RbYQXj9eeHJJtfh74pxKaPQN5BE5ikCml2HwoVVXEM8j1s.L+AAw75JC.OhFRGROykP43O00a5PPGBzwmKcjaxhW.fwJ4VVQBgHBPlMR9nnV.GOMt1lFfbqmRCfG5+AfZUX5HITR3pL3nmYg0cEaxRC8RiCBoH+T1ndFTdhT1a276.fbYUAUN3xJCZfGgiYfWgG9PRcInp97ptyuznQEtl1XhN9JZYQ+7rkoXcxroCwLSJQHHzja9NmcVbmylM16oXGCAojtj.9CivjE0tuklRgtrqnQEHJW1i8uR2i8fv.eLyJ.Zk9cbLZLyRBay2uwpDl3FNo0Uyaf+8e8EOnLFnhit.y7p+udP42eYF1R3.2RafNhidsomIMwMcxBnl2FubwfPkNRZg20oO9DLj2TOW4YxbF4gDL7zl+iwH2zIKS4UvWxQnoo5Kv.Op6tHNR7Rb5HMH5KBy3Ah.a6cwm.uQr5U5p3rKN9YbZD7F1omtgf+RFLdV111s04oC9yOtEGeFWZ.i27RvMkXKLCVWvF7hg5MPwjEX90KQnblwew3hLdUmjdMs7wiPyB4OtfmUk1iTg+KviZ8z7djR3BL+ke3vXGNxXGrtaKYcGK62xoMh7TZNqeCt9VGTVeen5.OfL93.HkmJt2bpllahkkA2wZoC4TwWuqSOFFJOzlQOMFXigiStbkJqCh+eD5HPU1r+yW8WdU9Y2VKr7mLvdkudEGQWQ0DocGfNQeht1m5xYyvalrxdmEgHwP1+3chASMapPhQnv3LQj2KCqX0EUghufFhpDJ4iMUHaZnvE3vvZMajpzN99EuG8whB6Eu1tPyf7Er19nSnLfhDWWk4ZZj0EbaebaJCbtbdvQylpXBA3aJmRM9aB74S5COfovBOQ1KXistyb+17JNOL82I2CQyV6.c3lxM5cXyh9SpVJj0mdZOjuOD4UV8FfQLuIsQr1zYDegm9D0BIrlhkLVs5ysNUP.voL6+lsk0Dbv3Ihyb1qYak6bxaU5xKYmP9gyLyM9D8A8JIxaEkzaPWeQRmjNzrfl7gfCNVOuVb+b3oRoqTsH770sztdx44enUh6mLymmlPDLoqvlkCyURfvxx7un5hK.uV+dMXVWJbIS5aVu7LyjtETzJIY5xS7ewqG8VNGR8mEh34usVwUTqW.REk6JREWCJbRketokm+JbWqbWg6xug4xB22yoW.2aRw3ckBvKzjwO03Ueg3uiydiFAucbFXWyY+uco298qcn7gJn79NC3P1roPNIcfu9aTjdL30v2nHpzeiBnDq7k4B9iFh8hVsmA7EK+r+iVxsZmoPtub6kF48wQXD+PwmYIcw2tU+9eIiNKZdsd4CjAKGyfW3CnByERN2a3icXz33Qf6HsUr4R8lwFK3prYRy0YLmn10DDgfCEudlsHw7ihEMhxC7NDwYA45IQtKMNFIeduhiZby4Fu8biuybiu6bi+j4Feu4Fe+rwouZsHxHoiq4eIyJk6kLAqzCA9sgjsCFmtCpYLihS4ZIdL97TeCzrzHJapgkFf4h15hMlpfOGz5+T8Ep9YM81O9rwud9fZURv3f.UUoSfSvvLBL99vqjIq4jLa9rIGRIznITRfW9yKP7+3wXlI1Kzg1gygiqYy7As5C8YhhMNv+aZcP.A5gJeZfqDWz7J+wEK740u1QAWWQJP2+2nJ5p+eeUzkQcyciAuY+b9lNxr9tx2U+WHn1mNSj9No.nCTkb.zYfG1rV4Jh5upwMDiE.Z.l3KG7J3mdwlIEVEK1LYQKuDSA9l9eKeOb6UwpOjfn4vPnjcnYHcLz+g.RPwveVP4TjGi98dpKOSf02VNCfRh7+8FUbNTL1sYxMl43zXqFVSgZUeumm3fvsAFtXc19ZnyctF5b2qgNex0Pm6cMz49WCc9sKUGQaB6LiSmpRRBSzaOUfk8doAVqZ8eY0VljD
      

      SCRIPT:

      Content.makeFrontInterface(1200, 700);
      
      //SAMPLER 1 FUNCTIONS
      
      const var Sampler1 = Synth.getSampler("Sampler1");
      
      //Sampler 1 - Sample Start Knob
      inline function onSampleStartControl(component, value)
      {
          for(s in Sampler1.createSelection(".*"))
          {
              local l = parseInt(s.get(Sampler.SampleEnd));
              s.set(Sampler.SampleStart, value * l);
          }
      };
      
      Content.getComponent("SampleStart").setControlCallback(onSampleStartControl);
      
      //Sampler 1 - Sample End Knob
      inline function onSampleEndControl(component, value)
      {
          for(s in Sampler1.createSelection(".*"))
          {
              local l = parseInt(s.get(Sampler.SampleEnd));
              s.set(Sampler.SampleEnd, value * 229376);
          }
      };
      
      Content.getComponent("SampleEnd").setControlCallback(onSampleEndControl);
      
      //Sampler 1 - Loop Start Knob
      inline function onLoopStartControl(component, value)
      {
      	for(a in Sampler1.createSelection(".*"))
          {
              local r = parseInt(a.get(Sampler.SampleEnd));
              a.set(Sampler.LoopStart, value * r);
          }
      };
      
      Content.getComponent("LoopStart").setControlCallback(onLoopStartControl);
      
      //Sampler 1 - Loop End Knob
      inline function onLoopEndControl(component, value)
      {
          for(s in Sampler1.createSelection(".*"))
          {
              local l = parseInt(s.get(Sampler.SampleEnd));
              s.set(Sampler.LoopEnd, value * l);
          }
      };
      
      Content.getComponent("LoopEnd").setControlCallback(onLoopEndControl);
      
      //Sampler 1 - Loop XFade Knob
      inline function onLoopXFadeControl(component, value)
      {
          for(s in Sampler1.createSelection(".*"))
          {
              local l = parseInt(s.get(Sampler.SampleEnd));
              s.set(Sampler.LoopXFade, value * l);
          }
      };
      
      Content.getComponent("LoopXFade").setControlCallback(onLoopXFadeControl);
      
      //Sampler 1 - Loop Enabled Button
      
      inline function onLoopButtonControl(component, value)
      {
      	for(s in Sampler1.createSelection(".*"))
          {
              local l = parseInt(s.get(Sampler.SampleEnd));
              s.set(Sampler1.LoopEnabled, value * l);
          }
      };
      
      Content.getComponent("LoopButton").setControlCallback(onLoopButtonControl);
      
      
      //Call "wrong" Sampler for SampleMaps
      const var Sampler11 = Synth.getChildSynth("Sampler1");
      
      //samplemaps
      const var sampleMaps = Sampler.getSampleMapList();
      
      //combobox note: cmb = name of combobox
      const var Samplescmb = Content.getComponent("Samplescmb");
      Samplescmb.set("items", sampleMaps.join("\n"));
      
      //Note: Sampler = name of Sampler
      inline function onSamplescmbControl(component, value)
      {
      	Sampler1.loadSampleMap(sampleMaps[value-1]);
      };
      
      Content.getComponent("Samplescmb").setControlCallback(onSamplescmbControl);
      
      
      
      posted in General Questions
      trillbillyT
      trillbilly
    • RE: Notarisation for dummies

      @orange Ive gotten to waiting for the email. Ill post update after.

      UPDATE: Success. Thanks again!

      posted in General Questions
      trillbillyT
      trillbilly
    • RE: Export Error - JUCE VST3 Wrapper

      @orange it looked a little different as I had downloaded the newest SDK. It had some extra folders but everything else looked the same.

      @d-healey Thanks for the Password. Now that I am able to use the included sdk.zip contents, it has completed an export of VST3.

      The help is much appreciated!

      posted in General Questions
      trillbillyT
      trillbilly
    • RE: Dropdown for Floating Tile

      @d-healey Perfect, appreciate it man!

      @MikeB Im already on it!

      posted in General Questions
      trillbillyT
      trillbilly
    • RE: HISE Build - "This application is not supported on this Mac"

      @d-healey Then my job here is done.

      posted in General Questions
      trillbillyT
      trillbilly

    Latest posts made by trillbilly

    • RE: PitchShift Node has Noise

      @xxx or maybe a smoothed_parameter can help?

      posted in General Questions
      trillbillyT
      trillbilly
    • RE: SoundSync: Reseller, Security & Serial Management Platform

      @d-healey I'd never heard of them til I seen your post. It sounds promising.

      @bendurso Integrating with HISE is definitely a priority. What types of features would you be interested in?

      @Lindon I hear you brother. I think some of these things could be issues to smaller/startup developers. I'm not looking to create a marketplace in terms of just onboarding developers and selling their products for 2 main reasons. 1. Talk about a saturated market. 2. I just sold a business like this last year to further pursue other things.

      @tobbentm Moonbase looks great. Yes, I've 10+ years working for and with resellers so I've got a good idea of the ins and outs of that market + a collection of contacts. I have a few thoughts on keeping things in order across the board. I would definitely love to chat. I'll send you a DM and go from there.

      posted in General Questions
      trillbillyT
      trillbilly
    • RE: SoundSync: Reseller, Security & Serial Management Platform

      @Lindon I dont think anyone can solve the pirating problem 100%.

      Security, Marketing assets, affiliates, resellers, promotions, installers, code signing, serial management and distribution, email marketing (campaigns, subscriber management, etc), HISE integrations.

      Im working towards a complete audio plugin/product backbone that allows developers (new and old) to quickly and reliably manage the entire backend of the business (and some development tools).

      Like i said, its in the beginning stages and nothing glamorous at the moment but I can make you a demo profile if youd like to check it out.

      posted in General Questions
      trillbillyT
      trillbilly
    • RE: SoundSync: Reseller, Security & Serial Management Platform

      @Lindon Ya for sure.

      Do you have any suggestions on what you feel is a secure way to handle this, yet, painless for the end-user?

      posted in General Questions
      trillbillyT
      trillbilly
    • RE: SoundSync: Reseller, Security & Serial Management Platform

      @Lindon Right now it verifies by email + serial. Each serial has 3 linked product downloads. If the limit is met, further downloads are blocked and the user must request a download reset from the developer.

      I will be adding various other ways to go about this process.

      posted in General Questions
      trillbillyT
      trillbilly
    • RE: SoundSync: Reseller, Security & Serial Management Platform

      @Lindon Right now the serial registration works via custom branded CNAME web links. No HISE direct connect...yet.

      I think its possible to connect HISE and communicate with the serial server directly, among other things that may help speed things up as far as compiling various OS, code signing, installers, etc.

      Im really just at the tip of the iceberg with the app itself.

      posted in General Questions
      trillbillyT
      trillbilly
    • SoundSync: Reseller, Security & Serial Management Platform

      Hey HISE Gang,

      I’ve been working on a project over the past months that I think could be useful for a lot of us building plugins in HISE (and beyond). It’s called SoundSync, and the idea is simple: make it easier for small developers to securely distribute plugins, manage serials, and work with resellers, all while keeping things branded.

      Here’s a quick breakdown of what it does:

      🔒 Security & Serial Management
      Generate and track serials
      Enforce redemption & download limits
      CSV import/export for bulk handling
      Analytics for activations, redemptions, and usage

      🌐 Branded Redemption Pages & URLs
      Each developer gets a customizable redemption page
      Support for custom CNAMEs (so customers see your brand, not ours)
      Smooth redemption flow for end-users

      🤝 Reseller Community & Tools
      Connect with resellers directly inside the platform
      Manage deals, discounts, and commissions
      Built-in invite + accept system with simple communication

      📊 Analytics & Insights
      Track redemptions, sales, reseller activity
      Helps you understand where your products are moving

      Why this matters
      As small developers, we often cobble together different tools to:

      Manage serials securely
      Keep resellers in sync
      Give customers a redemption flow that feels professional

      SoundSync is meant to put all of that in one place, while still letting you own your brand.

      Current Status
      Core features are live (serial management, reseller linking, branded redemption pages).
      Still improving the UX and adding community-requested features.

      I’d love to get feedback from the HISE community to see if this actually solves problems you’ve run into.

      How you can help
      Try out a demo redemption flow – I’ll share a test link if anyone’s curious.
      Give feedback – What’s missing? What feels clunky? What would make this more useful for HISE workflows?
      Suggest features – Especially around how resellers and developers connect.

      If you'd like a demo account, just contact me and I'll make you one.

      Thanks for reading. I’d love to hear your thoughts! Does this sound like something you’d use? If so, what would make it valuable for your workflow?

      posted in General Questions security branding website serials redemptions
      trillbillyT
      trillbilly
    • RE: Waveform Playhead Unresponsive

      So I didn't know that the playhead would only be visible if the sampleIndex is set to -1. Cool.

      This is only working if I do not draw the playhead in LAF. Once laf in introduced, the playhead becomes unresponsive again.

      posted in Scripting
      trillbillyT
      trillbilly
    • Waveform Playhead Unresponsive

      Hey Gang,

      Im using LAF to customize the playhead. Since using it, the playhead is visible, but is unresponsive and does not play along the audio.

      Ive made a minimal snippet with a sampler.

      HiseSnippet 1710.3ocyX8taaaCDWJIpnwqqXsnCXeXefKXevYyw0NIsoXaE0N1wcYM+wvNKa.EAELRT1bglTfhJIdEEaOR6QXOA6IXOD8MX6HkTjriWZhQR67GZz8Gd7Gu63cGaaovkDFJjV1yu2v.hk8cb5Njq52nOlxs1rok8cc1FGpHRTLq0GFfCCIdV11y9bMC64myx76sOacLCycIYrrr1WPcIaQGPUYbaW6ETFqE1irGcPNsWs1ltBdCASDA3YVmJVAX2iv8H6f0pMiik8s1vipDxtJrhDB5rtvaX29hS3w5uOMjdHinIpZ0ELTLaqF8oLu1om0PKKam1Ym7YiO4OvYapG8L9YdfOwH.ksh79.6YtHHU8J.I6bPZtXHcOmttRZfJShFOejylbHf3iAWcdnDqq0LycKmFBPCtp7.7QjVRf3rUT7wUpTBA+yheagBO7g+D9XhuPN.0BBIE.2enBcLVhR42EOHfQjUQOEkZydDUCwf.AGHJtv3Jtf1tY1wvF6ma4tRB3o1R3hYaIDGUm60hPXEigCZokVB0ThOAcHD56IEQbOjLBLrVRgDqUVR5Q04jsh3tJpfWbAOXM60OZvgbLk0QufEJg7SE2qDRb3urXgWW.gLvBC.B3TFCfA1XfKr2L5wDDX+g58FUrR4xUWrLxGyXFFJAJPDR0FDAmXjf4Av5vHHNFlZ2.vtE0FN0LsSWwW7zmhfCCwmxIdKhdFZhZ8MwrSHiQl1tmB1M.8UH7KW9fXt8JGpiC56JEqbZqjefWzHS6N1B1ohmVBVS0CJgR9.80veVAnWsrNC3MZ29k0qh48HWAu5MjK4FyirblGYjLwSRuhDfU8uJogsA8mf+BE6v5U1GtxUmw.vVI42hYQ7y4KMGumKwdT3Vj91ZwWpOk9tUOzCqOJUNH4jo0dB+zZWcE+07eRIiWqj4bePdGjFwwwJ3CPdIT0xOJUAMbGWgTGVh+Z2.ETpODaBbh.8eBeGdLnZRVFFAxFj6Fut7dNvTgI4Y5OgxZ7HLqITjMtrSKrKTBF7XPVsAsRhJRZfPXFBqGDvFh1pdK8UY3VcVj0MsdVXgwqmo85mqXUxwAraJDQB9NBEYWdQMNmuvaJfFWju+DkoqKJELXulnXcKR4Esvhbv6QjkfrFVD4LEgdHi1X5VWtFStwkoyonfuImp1MfjP2RW3yK96y2FyJoNutgVBBAUUl1YeZR6r5QdTQpi1hB159Ni62sLGm7iRX8ia1DqvoFF1CXeCHREUe7raRNFF0Htu47NMIgGoDAFcShs.6o.FmdFD98WVaXFw90Ng5o5CSRXumskUeBsWeklxCjFj5P1DLZAmyLFgiAWtoPptgcH3jgaxIy2XOq04m..l8P3EwvpQGHQO4Uh.HYXjo.zc54Pwxg4mLa7oTl6+NYnRtjg2Qn9RB264zlpb6OY7NyDvKDhuowaxLeeryF99DWUFXmyo0OegC3csCkOOFJ22oqBp0Ofx6kjuXvStrmqgQuCtzid2VRXBrWW5ulSs+r15Qf+RNJ2+nlYqpO.lVaj8JA4cHAvHeP3O2ZtcsNcdNLdWv3q5sOyjrrmDlA.bE4ErKm.9cU9yXCoHLzGNNFaElWT6HYOsuJiSGxwDY3n71IZ.D64bBKTe40VWlIjni0T2swJI8z7Za1kJ6gMwa38HF5piQu7XzqLF8piQ+nwne7XzqkQa6LU0z2FGzFCGwbZtNMIKCjEyYzRJ4TcBOU4Ve.d8TkK70Su+JcN0PbjG3MeJF6R0QgM3GCW2.NZLden6kONhoR4N5U+sEbQPeAm5NZxMjr1qGQlG6S7.UWof6VYbdPsNDFAGl614WVSOpLVN5c1qju3p+X2IFu9LmX3hz0qPePhaWKs4l8R0l6ZAiSeqsabWzcSZlgfcTp9eXL7NNlRtHcGx2mvqiHRAc6R633.sk5BshcI4aNMitgWLcEMsFDcgmLYH9G3WhvpocxzBqlJzxM0Tv4I4ay7z1yFOVpYZLFzijkOEMDZ3qgDz8wJzD7F.cL.UiIfAT5HDlAe+NP6sDufLLEaeOMg32LR1Wa3TIIDZIICBjB5rAhq6751c18G1nwdup0ta0biNuYMTGvKEhVmvXOLF.gl+uXBXQ8nbzxncfIMPKgZrRY3wcVMiBXTWH3nCgvC3Bhy6RPglwFbOM4e82y+9IHL.6JEuxM9gQ5PwsMbff.2blm2YaMMZBu+Y.zF8UttiZpysvkm1EtxztvUm1E9nocgOdZW3ZS6Bex6dg5obpGoDChq8aYsc6MhueYuwY2ul05eA2oA35
      

      Here is the LAF I used:

      //Waveform Fill
      const var WaveformSampler1 = Content.getComponent("WaveformSampler1");
      
      const var Samplaf = Content.createLocalLookAndFeel();
      
      // --- Draw background ruler ---
      Samplaf.registerFunction("drawThumbnailRuler", function(g, obj)
      {
         var a = obj.area;
      
         // live playback (0..1). fallback to position for older builds
         var p = (obj.playbackPosition !== undefined) ? obj.playbackPosition : obj.position;
      
         var x = p * a[2];
      
         g.setColour(0xFFFFFFFF);
         g.drawLine(x, a[1], x, a[1] + a[3], 4.0);
      });
      
      Samplaf.registerFunction("drawThumbnailRange", function(g, obj)
      {
         var a = obj.area;
         var p = (obj.playbackPosition !== undefined) ? obj.playbackPosition : obj.position;
         var x = p * a[2];
      
         g.setColour(0xFFFFFFFF);
         g.drawLine(x, a[1], x, a[1] + a[3], 2.0);
      });
      
      
      // --- Draw waveform path ---
      Samplaf.registerFunction("drawThumbnailPath", function(g, obj) 
      {
         g.fillAll(0x00000000);
      
         var a = obj.area;
         g.setGradientFill([0xFFfc1bda, a[0], a[1],
                            0xFF13f7f8, a[2], a[3]]);
         g.drawPath(obj.path, a, 1.5);
         g.fillPath(obj.path, a);
      });
      
      // --- Optimisation options ---
      Samplaf.registerFunction("getThumbnailRenderOptions", function(opts)
      {
         opts.manualDownSampleFactor = 4.0;
         return opts;
      });
      
      // Apply LAF to all waveform components
      WaveformSampler1.setLocalLookAndFeel(Samplaf);
      

      Where am I going wrong here?

      posted in Scripting laf playhead waveform
      trillbillyT
      trillbilly
    • RE: Macro Mod LFO retrigger on onNote?

      @ulrik said in Macro Mod LFO retrigger on onNote?:

      LFO.setAttribute(LFO.IgnoreNoteOn, true);

      Thats the one. Appreciate it brother.

      posted in General Questions
      trillbillyT
      trillbilly