Get data from external script processor
-
I need to use data from the "ReadNotes" script processors onNoteOn & onNoteOff callbacks, I need it in my main interface script
see pictureThat works great in Hise, but as soon as I compile the plugin (Export as Midi FX Plugin) it stops working.
I wish this setting also could be applied to Midi FX Plugins, (but for script processors), is it possible to achieve that?
Or is there a pre processor setting I need to get it to work? -
@ulrik said in Get data from external script processor:
I need to use data from the "ReadNotes" script processors onNoteOn & onNoteOff callbacks
There's probably another way to approach this. What exactly are you needing to do? And can you make a minimal snippet we can play around with?
-
@d-healey so this is a small test, all information is written inside the project
So pressing any key (the blue key in the gif), will generate a c3 note on, and a delayed note off (the red key in the gif)
The delayed note off is taken from the external script processor (because it will be accurate)
I have tried using the Content.callAfterDelay() function and it will also work, but not as precise as this approach.However, if I export this project as Midi FX plugin, the external script processor will not log the onNoteOn and onNoteOff callbacks
EDITED changed to a cleaner snippet using the Global Routing Manager
I almost thought this would work if compiled as a Midi FX plugin, but...even the Global Routing Manager fails meHiseSnippet 1650.3oc6XstSabDEdWfsJdSZUSUTU+4HT+goxxY8Ev1oJJfu.AQHPwDR6OphFu6r1iX1Y1t6XRrhPppuF8snOA8QnOJ4Mn8Lyt1dswjRnIUhnrRHxbtLy249gbXjvkDGKhLLsOdTHwv7NVcGwkCZM.S4F611v7yrNlDKMZNJDGGS7LLMWdGEOybqXn+dyiZhYXtKYJICiSDTWxSnAT4TpGt4dTFaarG4XZPFoqt4ttBdKASLDvwxVNFgX2Sw8IOEqDaIKiGiiGXX9cVUHdkqWGud0JUbq2ntaMWbchaod0bJi88pTm30yq55Uw.p63QkhntRrjDaXtRSg2ntCDujm7.mPio8XD0gRFcgWNg71BlmxDUTMZMfx7NbrCJ1.tzCm5tVNwccOq8odzIzm519RMCzTMx5.MWZV3s7LvqTV34jAdK.RlYfzJIP5tVccingxobT341V6xkjHeLDmxBkDYMV5OVwpk.jfKKFfOkrcDbXhF42vwo.phiyZeus88uetGl8C0mI5gYnHwPIk2GEf4PrKBkx1FhswRTT.5gnN79TNoXehbGsNGknx9IZjGt8Dgcwf0K3fFQAJoaoNmeUAe04Dw2+Bx36qDxN8JJFSjGg48I4ACnT4ZJ8S0bArrobF.Pj+PtqjB.f7JvCvwrC34OkLZM6WamauN+TyC15n1ECgPsbOxnXEqBHE5Jf7wrXBbSm+1tLe+qvsA1wrW2XKJhzmFC2TKLi0CJTxOEjEPxngjr13kKru+Dos4PgVLTzQPiwiBaIN58ZBt3woFJ+rHHTvgC4WculJWct4SHT4DZyAAlROANxC8vK9Ymad+ybt.IjMW.EQvr0ryAvIWZ1CD1.gRZWLUR3Izg.ziP4U5.+NQj3htPGGYO1PB5ASnIhTQ9Hh2Z.wUcdkS5m1fN29baa6I3RvepPRfT.cDaenlBxVKR6yEQjNmo7Do9wb14XBW3sofEiz8QKh87R0tTAzFNI+T2QWJkKQDthuueaBCOh30bj9N20KO0q.prSpnKLUYLVfvh5Qd5vfdpxnwIiov5baz71BjAdELl2sWTmvtvmTk8DIXLkjpWcN1poAKlSph445mo.5LLDEmHHzwa11nVWdazrc4cSRlyHnfuKmJOHjvurd+FoU.v+5Y61FKwpduoz.4BIQRpBBlsImAS9R5DmypMI9ToHTKaZYCLhUlN5Ho261LAV0E7XJ.UJzTdEq8ZZ7prSSGM4vex17kTO4foD9sMGPn8GLcN6u9CalBrDTXasWZYnQu9imxdGqpkqWs1FMpT2wfJIAiYbaqpqWtQ8p0qTJC8xIZznZiMpUtw5FRnMR1A1ZOxR+ro0qsQnUg264JPt5CPkpVzofhVaZbHjeefqDeVZZCvV2eSy+IhWBpAjZnO9XZxInur9bqgwRQvNQ3vAT23YzrMwGOjI2JLjfiT6g.bUogZlMYPSO3pNBbwBfgSwMZn+pW2oVCmZkzRcrneeFYegGYlaVMAGlny4DlBJZZOKlbBwER5xfkIuFvbaFV1UNhM2McXmwAg4oCIuQxouR4wz6v8x71aXeNr.0El0CaYH7FBO4rqdnVPKkATHMy7d0LcdLUNJ6Bbu21G4pBw6ZcHU5NXwXboEfQnb6CAFS2h6ys536CQ0o.bEqs+wOLqrk84u0kry88rNhf0yMhUkx.YRz6iMvCuxafat7GhEnW4F8BzShIKbA5e2z5FzltWxxMYtqSTyZur48u8sJx9tuaWym1T3SM4+nnI+j5cYDEVkyBx36BMWcIoyzU4flKoxVRN6nNq7.cIbO8g+F9RYVRc1LkYowLyZheQhIdaqtPWG8vDsA905ynmCqbg1g.CQTAnRyDFlcRxe89eRRxFeGCalEGJhm4h6RBnGCKEGmknZGpHxunWXKK8VvxSKj0adz1fQtPc5hkCizodaEHFxkyjp8VmvU5ilIb2.ZnLyP3biwXWZPHizgeFgAcM0X7qrRW1eL0YxkWdeAWDNPvotYCzGQfZv9vT2rXegFzVRI7WKLkx817HBifylz9sa9DHYCGo9aEtl9hRuyKjrv302Xk.Wjp.DcycPvxeZPv+0AA+e7FAX2HwKbSVyRkmdKMEvt45+W5yYsu5Lpjgd0qrwx.nK2Kbcm8ptfhkutJV45pX0qqhqecUbiqqh0ttJV+eWQ0PnsFJEAIklFF6eXG8dqllc3pM40UDF+Cfjg1Ee
-
-
@ulrik said in Get data from external script processor:
EDITED changed to a cleaner snippet using the Global Routing Manager
Can you show me the original version without the routing manager, since that doesn't work in the fx plugin?
I can see in your snippet that your UI script is undeferred, which definitely points to another solution because as soon as I defer it the script no longer functions and a UI script should always be deferred in my experience.
-
@d-healey said in Get data from external script processor:
a UI script should always be deferred in my experience.
Not if you're ONLY doing actual realtime MIDI processing in your interface's callback. There is a legitimate use case for this but in most cases it isn't.
-
@d-healey here's the old snippet, the TriggerBtn in the external script processor is connected to the TriggerBtn in the Main script
I also made both the note on and note off messages delayed
HiseSnippet 1850.3oc6YE0aaaCDVJIZn1sqXcnXXORXrGbFRckcbRrWQWSbhcWPZZxhy51PQw.sDsMQnI0jnSqQQ.F1ur89dY+T1+fsiTRVTtNcodsCnCUHA17ti7Nd7i28ojiCEdjnHQnkcwSmDPrrugS2Ib4vcGhobq82yx9SbNkDIQOGICoCFPBsZMI.GEQ7srsW9gJqrKrhk94OePKLCy8HYhrrdhf5QdDcDUlI83sOfxXcv9jSoiLrt9166I36JXhwPDsriqU.16L7.xiwJyVxw5avQCsr+Rm0I90Zz.uQ80W2qQyFda4gaP7p1aK2Z399q2f32yu9F0wV1eTaepTD1UhkjHK6UZI7mzcn347XG7DZDsGinFT0pK34XwcDLe0VTI0Z2gTl+woopHKXQONKwsbbh61NGR8oSkal.UJPYyvLAZuT9va4bgWUyvy0H7lSHYaDRqDGR2xoqWHMPloQEOW2YetjD1GCmSlgRrsVK86q3rq.rfKqLBeFoSHLX5LJuoq6Zn0ccW8dEKNfI5gYnidb2i5zoK59nm9r6UjxYTNA0eL2SREbjfeZLvokjqV2PAqrmXTffCdXMz4X1XxpEeYwBz9nxIKUEFgOPNb0hE.4E5KBQkovxmW6cpdODE802G4Bedm6.Fqst.S3AAEOy9mRgvBTbP6er0Q6bxdUBfiF4AjIQk4UNiLYMDuhDRXqg5iYQjU0Fm5qPxHw4j1LxHHbKS0JunH7yEPBHMOMfH2McKUtT19szpUhTpz65cwLVO.NWdNYDU17UxbjW.IcNlcDuLDk5bzb1B5MPIAuTV3qBsKcw52+JrZ86OyxUjC2.ifaiDT5rTq.baEpMbPKHYO+bwAsJoRY28tEt+LOHsSQfC6Ivg9n6+pO.lXlcwLAZ7oVHAyRfJs4C.6UIcvn35HYVBtPmnPO.UVMG3yXShp3Akhj8.jH5qlJSDh4vgDweUPXI2W3l7n2Pv4OjTL.4OVHIvAkNudHbYCJZUgNfKBIsOWkIjgi0HqhI3SJriQ5RsUv99Iyt5ZnMci+sgq9NVgXS3J886uGggmP7aMQul66Wl5uFplahoy8.MMVfiEkSd73Q8HgkWMExjDVWTDM6dAvIWgMyalG0vp45xj6ALkkJuNiZUah4qIsjBW6Fy5IJCgRg4qu5b40WMK+6EClMLTv2mSkGEP3WVSAqja.v29t82CKwphxIx.6BHgRpJDr2ibNzRLtDcAm8HQmIEAP2soWaftvxjdJwEk6vDXIkO3TJDpTnZ8JNGzx5ElsYmLcvuw194Te4vLA+51CIzACyZ.+Ke61IAVbTTz4fjqgV8Fj198FN0q0n9Va1b8FtVTIYTphq6TeiZMaTuw5UMjWKdFMq2bysp0bCKITwwrStNirzyrcdYQDpD3uuWEjk9JT05UbWSIaOZT.fuOxShOOA1.p0Ugz5ej34vz.QM0C+FZ7np01ROd2wQRwnGFhCFR8hxMy8H8wiYxcBBH3PEAEPqBFpU1hAEkgk5DHEK.EtU1ro9oQC2sZ5tUUsUmJFLfQNT3SxsxpV6PqdNmvTghV12EQdBwC.cFwxTuAJ6vvxtxIrYVoiamdHLqb.7FJy7RsT4s49F9dyhWnvfSwPWKFCcyDLTqwRofqQO2vIqAzkghfm7nHqebVTDHIBNo1mebHAp3FeLSiNTnZUhCmjbQ4U4k.LhD9igrPdZRJxjIJf6143ln3evinxIljMeqwc5pFh2x4Xpza37iwklSLBU.dWDiILN+Xm186C.sr.bEmN+v6F5klt+ZWxaJbamSHXcqrHU0EP7am2VH3J+1B1K+tfr+JuWS1e5YxbI6WZImXNbYUDL3xALShKajiT6ZHfehhwQlLEiqxkLt6m0meViLKYXPxbVyBR2F66CVUZ5KfTZd1BE0GQ.Chs0j+88tDJZoz6CFGMr7KKcltSxkybQUJELPwY5BEwGiHvanhlne4WOKpE0e.ioqrC+.GJksKP+OG6jdeweIWKLGakr784hMy.gl+kpMfiy3qOzK7+E8BOQLVwF+PrLjpfOvE2tPOHORBaL0cD6kTn43wtoPltDtudveAOIJqlhwTJqlpzbKdy3s30c5BcT08b0avOSOF88.zD8PBzqUc.UM2wP9Ft+wa+Ftwb0OE3TGEHhxsvcIinmBWEiLEpX+FR9YMUaS46Bzdmqp+7AcfM4bmSWrbbnF5syHwXtLGT60RDn5+aHB7dPAkbbUJjFicoiBXj17yILnptNF+TmjWSKUZNr7xGJ3hfgBN0y7f9DR5eVZiXetancjR387xjb6sOgvHXSP6Wr8i.vFNT8VdKXtn5aLus4dd84NwgKRcAD89aifk+Pif+sMB9uvGivdghexKlFnBmdMsDXey0+iWJ3bnZLppklZn4Y4HnJ2O44keodkIVaQm35K5DqunSbiEchatnSbqEchM9mmnpIzNikhQwWMsrN731Zd011s4X.kquQX823BBYSB
-
@ulrik said in Get data from external script processor:
The delayed note off is taken from the external script processor (because it will be accurate)
What do you mean by external script processor? Are you referring to the ReadNotes script?
-
@d-healey said in Get data from external script processor:
@ulrik said in Get data from external script processor:
The delayed note off is taken from the external script processor (because it will be accurate)
What do you mean by external script processor? Are you referring to the ReadNotes script?
Yes
-
So I can see a different route for this. Keep only GUI related stuff to the Interface script, any delaying of events can be done in another script processor, and updating the keyboard colours can be done with a timer (or multiple timers).
If you add
Synth.deferCallbacks(true);
at the top of your UI script it will force you to separate GUI stuff from real-time MIDI stuff. -
@d-healey said in Get data from external script processor:
So I can see a different route for this. Keep only GUI related stuff to the Interface script, any delaying of events can be done in another script processor, and updating the keyboard colours can be done with a timer (or multiple timers).
If you add
Synth.deferCallbacks(true);
at the top of your UI script it will force you to separate GUI stuff from real-time MIDI stuff.Well that isn't the issue, the issue is that I can't get data from the "ReadNotes" script when I compile it as Midi FX plugin, it will not work
-
@ulrik said in Get data from external script processor:
I can't get data
What do you mean? If you're trying to pass information from the ReadNotes script to the UI script then I think you are doing it wrong :) The scripts should be able to function separately.
-
@d-healey My question was, how do I pass data from the "ReadNotes" script to the main script,
well that is indeed working but, it's not working if I export the project as Midi FX plugin.Let me ask this instead:
Is it possible to get data from the ReadNotes" script to the main script, if I export the project as a Midi FX plugin?
The "ReadNotes" script is not meant to function separately, the script is there for the reason to pass data to the main script. -
@ulrik said in Get data from external script processor:
Is it possible to get data from the ReadNotes" script to the main script, if I export the project as a Midi FX plugin?
Not sure, I haven't worked with MIDI FX. Are you relying on a global variable to pass this data back? If so that might be the cause of the issue.
@ulrik said in Get data from external script processor:
The "ReadNotes" script is not meant to function separately, the script is there for the reason to pass data to the main script.
I understand this is your design, but separating UI logic from realtime processing is usually the way to go. Unless there is some reason why that can't be done I would recommend exploring it, although of course it might require too much disruption to implement it in your current project.
-
@ulrik Another try to get data
I have a sliderpack in the ReadNotes script, and in the main script
They are connected via sliderPackData, and it works in Hise.but as soon as I compile and export to Midi FX plugin, the connection is broken.
@Christoph-Hart is it possible to make sub containers, with script processor to work in a Midi FX Plugin, is it not meant to work or is it a bug?
If it's not meant to work, is it possible to make changes to the Hise code so it will work?this is the snippet
HiseSnippet 1990.3oc6Y8taabbD+NJcFgmSJZBLJ5mZ2RzOPUPvbjhRhzoFljRTNBxxlUTwI8CEoqtaH4Beb2K2sTVrAFHnuQ8MnOB8QIuAsyt2e3QJRaYV6hZCe.FR6ry+1Ylc1eiU+PgKDEIBMLsuXV.XX9oVClwkiObLkwMN4HCyOy5BHRRdAIxOHxn6r.ZTD3YXZt0iTrXVbaC82O+vtTeJ2ElSxv3YBlK7X1DlbN09sOk46eL0CtfMIG2MZehqfenvWLEcmsrbLBntOmNBdBUwVAKiulFM1v7OXsK3UuYS5dM1cW2lsZ5dfKsI3V6xCbpSG5saSv6RuF60fZXdmddLoHbfjJgHCys6J7lMXr3E7XC7LVD6RePsnlw.zxwjOV36oNhJpFGNl460OMNEYfJs+7n1VwQs6YcFyikQedz6Wp2fLWh7APyBK5dasf6UKu64jy8VgKYlyk1N1k9bqAtgr.47cT9ycsNgKgvgTLOk2Uh40nvu0x5PAxAWVcB84vwg3hLIJuuiSExtNN67U11e4WVLDFBg.lxIRAQNFvRDlGDpRaDFmT5bf58DAdzJQhz5mDj5L1XpFqpx3f7.httq5HPNPqk9nVx78x4zEZ7Xg0KG3Gfxl5ynzGJlDH33hxkRYPIRhLXQ7QTIEEISgKZxxpCWpfU0mvKDJQJmHpRWLtOiCjgS4tRlfSzZH.y57QP4mCypPth5OE1w9GsKdZu+b2m147ipFf0DxSgYQ43f7PRIwvgkH2G+IuTExPpeDfl3k11gvHh6zPzUc9paXQAePr6nN4gB+xLtGbs1frgjxYGfry1yTlqiLgOxu6AJcuicwhK365cqn2BOlEiM+qSYHmn6lDdpFAxiXQA9zYGR88uTERW1YURXywa0QXoBPRiPJmONKcZ20lSOsqJaVDq9dvReDc.lfA2KEzPOxCt4GFbVJNtTRQhWcpPBApOFZP2oXO9Hje0gBYJt2zbNQSnSaXVrrRF7mwrDU0EauIuTkgueFMQnJFGBd6nR2NW6j7oOPuTECsykeUQ8mxKqSomgWBvFgUYi3hPn2UpHgLbppPoncQegKZalW1cHpmWhz0pP12I9eMcz2aKFyBWs+vgGAXdB75NSqyS7Jy7pPp6jv5JKdS8ELsnLxSlN4RHr7NURJfSbqWZSV9rLb3s4v7lYQ7pyZLYRoluhSkUWZa0SOqdmzKTbsYxeSVwH1dcwd1Vqumc9mTbiKlywnfeBmIeZ.vW2CMFI2.ve6aNQc8Q0nOgFxW.DJYJWv7H3J7Y1319EsNBhdtTDfuXlcsAeVWl7NUbi9i8ETIiO5BF5pL7EfssNsqw04e5dV1h+oe6Wv7jimS3u2dLvFMd9i5+zepchiE6E1VmlbMz3xQoOo+oVMp2rwA62Z2lNFLILIci6Z0Xu5sZ1n4t0xQudrDsZzZ+Cp2ZOCIbsLO5.cDovewz5GsIjRn89VkSV59jZMp5TQQKoOzSckzqRJavs0sX06+XwKPwPRszK+ZV7pZ0OPu9voQRwjGERCFybiVPxifgzo9xNAA.MTA5A2UUFp2rqO1zCU04XHVfa3Tc+V5ulMcNnkyA0zbcgXzHe3LgGrflUvETMi4fuxUzz9lH3YfKVzkyWxrFt4w9T4.4L+kzT+doIgkoiEugx4VodJ8dbub1de6WppAypgtabMzWjTCM+MScEjsU56DqqNB+dc0QFmzNFCQmIho7bz+qsijPv.1eCxi3TSC9goJLHgpPY7Uog9HPwN3E5qRvNEg4+S38CArOdBFpaBXBgpI7lhgxEwuoP4lrA1fXAPSJfQ7HlbVde5sFntaqK94V8YR2wq1GKrBeDai7tvGSfB+YV8FNDqVm6faac728tA2ady+IqY9k6YkgzS0hBICguMFiI3VOFi4VuKlBY6++dJDqW8THY4jEbErG87tJpGWMKfQzzYSlVvZs.+QHO4vvOG4eEBB8o1BX5wd.kKkuKCxTs5MuAK5dUkTfmto3wssJoFF5lpd4lRygnrHiSXJ.S2TASnWqboUqXrCnZypNqZllDzptHXTIzg6cNLhgRENOznmj41LhyZPhl2ih0ZGb9PbJf0iRK1WeE.B2.c5rBc9AEhuXfdnWgl+19rq1uUWZ9inl7zni9GEr1qV8pe76ieum7sgy5XlCmp8a.NUKyDLpVl13urD3y67SKga8NeWgXBY3VuyuIgkUfE0xzLcik.tdCDpeDO5GD3QOWLUMV8YTYHSUco.zf3.cgjwpxvzjr1IsBb.v8zK923Wxl0RqfTaVKcy7GweQ7Q7tVCvm803d0GvekdM4awodHOBP7tpDTsWAn2+0aePuwCceANbbTfHZAEO.lvt.uqFkmnZL1P3GzyLmm9g37qqbqe9gGiGxUJy.pbZntza4wHMdMfwq8ACX72CZnrv7BES8wArIA9PO9UfO11W6iegUx+eKoTWrV9LAWDLVvYt4SzmC3cvQifv799JOPcjR0iCYTtW6yAeflun8229wXwFMou9FEKp8F+WvYk4qesUr6RTW.Iu+9PvVe7gf+aeH3+E1XB0MT78twyhnpS+DME7by0+UYKZclZMoV5zGyykSvtbeuq6hp5FBVeSEb2MUvFapf6soBt+lJ3AapfMe8BpdDpyToXR7USCiy52SC71zrGmhU45aDF+G.Jkbwq.
-
@ulrik Ok I investigated how to visually display the delayed note ons and note offs without actually reading them from an external script processor (since it's not possible to do that when compiling to a Midi FX plugin).
So I used theContent.callAfterDelay()
function applied to 16 separate panel components and got it to work, you can see the effect here, when I rotate the polygons (delaying the note on and offs), the keys will be painted according to the delay.
Thank you David for pressing me to deal with the task in another way, finally it worked
-
@ulrik Nice! You always make such cool GUIs!
-
@d-healey Thank you David!
-
@ulrik Interesting and inspiring GUI! Very cool.
-
@orange Thank you!