Expansion - Access AdditionalSourcecode file
-
Off the top of my head...
var myObj = Engine.loadFromJSON("somefile"); Console.print(myObj.NumberData);
-
@Lindon Thanks! :)
-
-
@DanH You can use
if (!isDefined(myObj))
to check if it's there or not. -
@d-healey ok trying. I'm not sure where to put "reg mrdata = cx.loadDataFile("maxrandomdata.json");" as if it goes before the if statement then I get an error, and if it goes in the else statement it gets ignored... I was trying:
if (cx.loadDataFile("maxrandomdata.json") == undefined)
before you wrote that... Where I'm at now is below:
if (!isDefined(mrdata)) { maxrandom = 35; } else { reg mrdata = cx.loadDataFile("maxrandomdata.json"); maxrandom = mrdata.maxrandomnumber; }
-
@DanH Make a minimal snippet, we need to see some context.
-
var myObj = Engine.loadFromJSON("somefile"); if (myObj) { Console.print(myObj.NumberData); }else{ myObj = {NumberData : 444}; }
-
@d-healey there's some general expansion stuff at the top, head down to the end for this bit
HiseSnippet 1477.3ocsW8uaaaCDVJIZXVaCaEaO.D9elLPhqy5O1.JJVhcbZLVicPbZ2JxJJnonrYiDofDcsMJ567dC1tSRVR1xIKyXUHHvj7tie22c73wKhTLdbrJxvr1UKB4Fles0vER8jNSnBoQuSLL+Vq.57HpzUEn4wZi1KBowwbWCSyceAJjYs8LR99qesM0mJY7hoLLdsRv3uTDHzEydwQ+lv2+TpK+JQPIoe7Q8XJYGkuZJ.ncsZYDRY2PGy6SQw1wxv7K55JzpngZJ.FCy8ZqbWLbhZlLU9WKhEi743fCMFBFJc5SU9tHhwYM5LQ36dwRGO1.rxEEzvtozvOXctvUjOeAc7cIKPJznLeXtypva2Uf2gkgWqRvaCPxrDj1KEROvZHKRDpKVAwyWY0Sp4QdTf1KCkTYM14c0r5n.Ij5lAza3mFACx0v4osZsOA9WimYaCTerl7AZDgOO7LHf6yiHOmzUNVH4MYQbvm5NOjJiEJY15NUTLc4XPwBqzbLWmq4KEw5D0JsdLWeruuZF2MWLzmicttjPmJ74sof6sOwlbe9JoahGGvcEfOrEp2UxhVDp4tuE.98R4MQJXVLRLW+1TuuzrMCmFOwo9oG24pAW9l5H83ohb3Dg7t4wF1YPshw3nzPtRHORK.prQSbwL7WBd4FbH2myfjW.gKyX.KzQEDpjv.m5UjDwYkIwfoScglGDWe+0Q16UBoS8+TVuA5hO7gqsLjTq6S0Sin9NoBP5ED5yCf8mnmvKLGIdlPylXaKj9P5Iwapjow4UxJHB8lHkuCaoqrO339S4Mr+ncMeEi5WX2qTuTQcAJHWXjD5AdyU74I4s0rqAv524jYzLP4Ih.tD8XhVQh3.AjLOaZTDB7bimnYrhLiSjbtKJMaBUNFByZb.EB1Ag5EjXcjPN1tlvyoBxd9Zb50sdaC6R4rq4G0qmEwqs54sNofKmrVei.O8SPD3dmIjXyThtC02eDT3141iEXvMhOlje0Rk5A4ZlaMIeFDTFoFolmlaTZBmoRWtGjHf3tRNQYAgemaZLAHi3.lVDeRpIVUlFqefOYLj4fAyWjEpAMJGlqkqSZ5Eadk5gU3+RUVx+ArCBujMvkpoj2GCNiqhGK+QLqBJ.fqIaBeDG8DQLA9K.SelFLBnfwjQv9eClx4AmzOfzi.6bRZVTDbPWOgpIm0aXWBihlD7d2rLZeN45QbFcZbRx4pa5AjYSDrI3tgROahBDODNZqKkJl+CvCbXya5CIUm.dAVF2ode9r9.HAt.cp5Mv75hXXUir76iar764KxsGPzO5IUKR+o03zLeZUVzlTYe49w76IHv7YYBFP2DKg7u4za9tj6gGVrMMgLuzQOC8rkkdRmBJhI0TjQw6Qv4Sxfvn6cPP2JNpLAbXNFB8MCgpUZmRPDODVXT6UHR6UXP6aIDd3idVYK7oR026qz7Av4Er5sMr95K44sw0xp7jzzxFVF6DM5tTzIkSKe2AJHzd1p87Yc687UtkTVZg0RBpj8jB8fPt71ZT0HqZL1eXFp.Q0IcG9cYcG1AKz0VM2P.sA98VUJ.aj.+Rcnejwq5gYRKMJX+htFf4Ng+AnC9zVPqYcBO9FsJLQ1rqCflx+OBg44a+QdGsHe.gcDbe.vfl33jNHLLcrxZJxt8fKeAo8wCGZe9f9CNX3a5e0Y1869pKGb1fK6CupnRGyPu5J2o9T8pMviuZIaA.Uqz0L1mHfU8hxup4+st5uuP7AVWfM2rYLtyFvHD69bfwr2B8MVc87fHWA.2y5z+3yyCeLtTMUC2bcNEZAByEfRBCgmCx3vtKkPUDL+XG7rP53V3XjAFxktIC9a3KawCwwlYKd3xEMBnrH06XomfvWa8kIy.XRl7PyZVmiiIGt7vhkUqlsLBfG98NFCc+CfimaVmeZKz4QagNOdKz4IagNOcKz4m2Bc9k6TG7M2GOUqBRON.SbQ2jhVllckTHyJIKz3e.x75wPB
Thank you!
-
As far as I'm aware this is no longer required, but the docs haven't been updated.
expHandler.setAllowedExpansionTypes([expHandler.FileBased, expHandler.Intermediate, expHandler.Encrypted]);
The only variable you should ever be declaring inside inline functions is
local
.
https://docs.hise.audio/scripting/scripting-in-hise/hise-script-coding-standards.html#variablesDon't do this:
if (cx.loadDataFile("NewNumber.json") == undefined)
It's inefficient because you'll have to read from disk more than once. Instead load it once and store it in a local variable, or if you are going to be using the data in other parts of your script you could use a reg variable in your on init callback or at the top of your namespace.
-
@d-healey said in Expansion - Access AdditionalSourcecode file:
Don't do this:
if (cx.loadDataFile("NewNumber.json") == undefined)
It's inefficient because you'll have to read from disk more than once. Instead load it once and store it in a local variable, or if you are going to be using the data in other parts of your script you could use a reg variable in your on init callback or at the top of your namespace.
Thanks :)
But if the file doesn't exist then I get the error which prevents the rest of the script from running. That's the wall that I'm hitting. Unless I misunderstand?
To put this into context I've supplied an Expansion which doesn't have this file inside and I'd rather not update all the users if there's a way to get around it!
I'm using this elsewhere which works fine (no errors) - was hoping the same would apply in my expansion callback:
if(Engine.loadFromJSON("..//AnaData.js") == undefined)
-
@DanH as I said:
var myObj = Engine.loadFromJSON("somefile"); if (myObj) { Console.print(myObj.NumberData); }else{ myObj = {NumberData : 444}; }
-
@Lindon Thanks, but that will look in the appData folder for the file, whereas I'm in an active expansion.... Or am I getting confused?
-
@DanH You're not confused, but you could just take Lindon's code and adjust it to load from an expansion (and don't use
var
) :)local e = expHandler.getCurrentExpansion(); local data = e.loadDAtaFile("NewNumber.json"); if (isDefined(data)) { // Do the thing } else { // Do the other thing }
-
@DanH my takeaway from this is that Engine.loadFromJSON can handle a file not being there but currentexpansion.loadDataFile cannot, and produces an error...
-
@d-healey yup, but I can't get past .loadDataFile if there's no data file
HISE doesn't seem to like it (unlike Engine.loadFromJSON)
-
@DanH Which line gives the error and what is the error?
-
@d-healey
Error:Interface:! Cant find data file {EXP::TEST}NewNumber.json
Line:
local data = e.loadDAtaFile("NewNumber.json");
-
@DanH I see the problem. I've got to go out now but I'll take a look in the HISE source when I get back in a few hours and see if there is an easy fix.
-
@d-healey ok thanks!
-
This is how
Engine.loadFromJSON
handles a missing file.And this is how
loadDataFile
handles it:So it reports an error but does it actually stop the rest of your script running? In other words, if you put
Console.print("HELLO WORLD");
on the next line does anything print to the console?