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

Best posts made by trillbilly
-
RE: AU Compiles but not visible
-
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" --timestampBuild 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).
-
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!
-
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.
-
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);
-
RE: Notarisation for dummies
@orange Ive gotten to waiting for the email. Ill post update after.
UPDATE: Success. Thanks again!
-
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!
-
RE: Dropdown for Floating Tile
@d-healey Perfect, appreciate it man!
@MikeB Im already on it!
-
RE: HISE Build - "This application is not supported on this Mac"
@d-healey Then my job here is done.
Latest posts made by trillbilly
-
RE: PitchShift Node has Noise
@xxx or maybe a smoothed_parameter can help?
-
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.
-
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.
-
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?
-
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.
-
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.
-
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 usageBranded 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-usersReseller Community & Tools
Connect with resellers directly inside the platform
Manage deals, discounts, and commissions
Built-in invite + accept system with simple communicationAnalytics & Insights
Track redemptions, sales, reseller activity
Helps you understand where your products are movingWhy 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 professionalSoundSync 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?
-
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.
-
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?
-
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.