Print array index
-
I'm trying to get familiar with using an index to show/hide controls, but it's not clicking in my brain yet... Also my first time using radiogroups.
As a test, I have a simple instrument with 2 samplers. The user interface has buttons (in radiogroup) to select each sampler, and a second set of buttons (in separate radiogroup) to show/hide controls of the samplers.All buttons have been put into associated arrays, I've created a Callback function for the buttons, and I'm using the onControl section to show/hide content.
What I'm attempting to do is use the index of my SamplerSelectButtonArray to show/hide knobs in the GainSliderArray or PanSliderArray.
Any thoughts are appreciated.Content.makeFrontInterface(500, 300); const var Sampler = Content.getComponent("Sampler"); const var Sampler2 = Content.getComponent("Sampler2"); const var Gain = Content.getComponent("Gain"); const var Pan = Content.getComponent("Pan"); const var SamplerGain = Content.getComponent("SamplerGain"); const var SamplerPan = Content.getComponent("SamplerPan"); const var Sampler2Gain = Content.getComponent("Sampler2Gain"); const var Sampler2Pan = Content.getComponent("Sampler2Pan"); //create arrays const var SamplerSelectButtonArray = [ Content.getComponent("Sampler"), Content.getComponent("Sampler2") ]; const var ControlSelectButtonArray = [ Content.getComponent("Gain"), Content.getComponent("Pan") ]; const var GainSliderArray = [ Content.getComponent("SamplerGain"), Content.getComponent("Sampler2Gain") ]; const var PanSliderArray = [ Content.getComponent("SamplerPan"), Content.getComponent("Sampler2Pan") ]; inline function buttonCallback(component, value) { if(value) { local index = SamplerSelectButtonArray.indexOf(component); var y = ControlSelectButtonArray.indexOf(component); Console.print(index); Console.print(y); } } for(a in SamplerSelectButtonArray) a.setControlCallback(buttonCallback); for(a in ControlSelectButtonArray) a.setControlCallback(buttonCallback); function onNoteOn() { } function onNoteOff() { } function onController() { } function onTimer() { } function onControl(number, value) { if(number == Gain) { GainSliderArray.showControl(index); } else if (number == Pan) { PanSliderArray.showControl(index); } }
-
@dustbro
This line
var y = ControlSelectButtonArray.indexOf(component);
You should uselocal
rather thanvar
.This line
GainSliderArray.showControl(index);
Where is index coming from? -
@d-healey said in Print array index:
This line GainSliderArray.showControl(index); Where is index coming from?
I thought:
local index = SamplerSelectButtonArray.indexOf(component);
Is that only available in my buttonCallback function?
-
@dustbro Ya, that's why it's local :) post a HISE snippet, I think I will be able to help you more then.
-
HiseSnippet 1609.3oc6ZE0aaaCDVJIrK1qtXcnOrWFfPwFfKVWpsSZ6FJFpSbZ5BVSiWbZ2vJ1JXjocHpLo.EsW7JJv90rm2Og9Sp+C1NRIYQ4X6Hk5zs0Y8PPHOdG+3cGO9QlzTvcIAAbgkcgCG5SrruLp0Pl73FGioLqc21xdUjjDHcpYs0PebP.osks8xOTI0tvJV5u2b+svdXlKIoKKqmxotjGQ6QkI81r92Q871A2lbHsmwn2n9ttbVCtGuOfjkQUr7wtu.2k7XrZXKgrrQOnMUxEsjX.NV1qrEu8vVGy+UV33eJMfdjGQ0npUKvPgcuC2qsBwpdsZbL0qcy3Ubfkk8kZlr9WNb8eMzdz1zQ8m3G9Hs.mDML8G1KMK3U0DdUxN7rMf2Jgv6pnVtBpuLQhBaeHZWljH5fgPfIrBGq0R+wpnFbXDL4Z8vufri.ZLRix2tRka5rdkJ23dkJVpHDHfv8.rvoEtmuGQ37MNwJ2kHav64yYPixWOR90U5cJspcVpUaL8ToTSUGkvwFeS7zGNHaxnZlShwXlr1yZJSFxT7GYYpqM84tVFl7Zwydoh25VtBBjK5fEB7vfIFXaQ7Htxs5Kkb1lpgA1W+8rREcx32YjYby4jkfjkrYoe9dm43L8DpIUv8ljm3s1IDFKeq8.5X5ExhWAvVdz1DQpn+bLAXN4BRu6Xt4KNkCAb0Wr9Ccrbt4NluYFQdiYJjx7nLhSm9LWIkybNRuioA1y6H375xtwX7lf6zqOA.2KCsHsS43dTMeYx73wcwdNTVaxIfCeZUlVSOf86jLE2XrUjJ9MLp.4j1Qe1VHoEXi.tGYMeAE72ZEMGbZwCiE8pREekpNaohc3hxXXMM0kSja.uVfJvpA7HmXZeZrwML5zVg4ynihgb1i4Rx9rx2n3KKVn3qNkjNcljnnY.VcSRphdmXFpUl0u2QDQbdRz3.VNooQglNMJSVdtgaSLFHmsKiJ22mvlF4Jqn8V.MqUi.ELTolj0UhHYE5bsn.WpBnnXokFwlbesxf5EiUu135GgjyP+KgzLtizEYmU8PHnHQNfbX4OspkPFEwyApMLwkQI08NeV3JHyZ+mOaLZgTaxv3I6tMVhUzsiRIfzDehPRUYf1aSF.2iIj7cAz1jfWH495blnxHfSNCYMmjLkWu9vQMdMut.2lxenf22erHTFruQZUxDT2c9MAQ4cIF2Ivv3+92NQiaUOaFOL4bJ1t9ujeaO0rWCmyOYNGOs9.yKlkMSmJq1vxOyvxVe+4wxiksmX6W+Cld88OO1N8tfSL8AFlt4Xl9zW.EtFLuceOrL8ciU.NR.TnO0kPUWzjEPkCMS+tPtvbVg6UQMoR2imLdWZB3EJNbQi2nmenD5Ac5.mqm.1UP67iW7u0fIT9zPn7wnVR3Nj8nrtwUwT3Iol1b3Ag7y7CB0TP7331sn+lwvdc8s5CtKQ5d+y55oZyd79rTyUDvOf3CWMFh9DSgGbftTy3Z8l6qyUNT.7l.Ogof8YDvsKMWiMD7ffNvxQaq.SQM6K5p7UI8b.Y.QDjtuG2uGD5YLhmh9is5f9mDPTgZp6dXofdh4n0yRkCw5v8mipswZo+FrO7iNeg5W+5F51gpTM+pTK+prd9UYi7qxsyuJ2I+pb2boRXh1dX+I91keP1X0BpCkpIdFibKZWCSq5wbW8njOMVMdbz+y8xmu6N2Y4rA2y3wYKDiwVTUz4ArAPwJnmvCa1lzA22SNpWSPtGmw8OlyntoqL.6z61kHLg9DWOaJkPgojdtV8Cf6EhCLJs8Y0eDbocrHcAub4JplcWwrBWeBJDtNph8NuePWX4+2SWXVttXFsNvrKj+KONeYjtTuihNx+TP8.deIPyH9ndDvGnEvAxkXxJXIESiv1UheMfVDVaci+B9hDVMlBgRX0XgVtwlBVaQ+t9Fv1KSXpSNzrf8.xIdlozA.SKEjfCzrBzA0dpCgVQ44f9ZgGPBqvDhmoRmZOpaSN3Lg8QphNn6kCtmF2288Ixmyvasf74BxmKHetf74BxmKHetf74BxmKHeNuIe9tXQ2C6J3O2M7uUkZouptG.AL8+faEP6oZ6TM9OOkJX0CN264ttpcUeIDtlrF0xsFqmaM1H2Zb6bqwcxsF2M2Z7UyPCEIiM6K48BqwZY82.KOFiSB
-
Almost got it figured out....
-
ugh... I'm so close, but my code is crashing hise :(
I can't post a snippit cause the xml crashes on open... but here's the code from the interface file:
Does anything look whack enough to bring down HISE?Content.makeFrontInterface(500, 300); const var Sampler = Content.getComponent("Sampler"); const var Sampler2 = Content.getComponent("Sampler2"); const var Gain = Content.getComponent("Gain"); const var Pan = Content.getComponent("Pan"); const var SamplerGain = Content.getComponent("SamplerGain"); const var SamplerPan = Content.getComponent("SamplerPan"); const var Sampler2Gain = Content.getComponent("Sampler2Gain"); const var Sampler2Pan = Content.getComponent("Sampler2Pan"); //create arrays const var SamplerSelectButtonArray = [ Content.getComponent("Sampler"), Content.getComponent("Sampler2") ]; const var ControlSelectButtonArray = [ Content.getComponent("Gain"), Content.getComponent("Pan") ]; const var GainSliderArray = [ Content.getComponent("SamplerGain"), Content.getComponent("Sampler2Gain") ]; const var PanSliderArray = [ Content.getComponent("SamplerPan"), Content.getComponent("Sampler2Pan") ]; const var empty = [] // Gain page index inline function showPageGain(pageIndex) { for(k in GainSliderArray[0]) { k.showControl(pageIndex == 0); } for(k in GainSliderArray[1]) { k.showControl(pageIndex == 1); } for(k in empty) { k.showControl(pageIndex == 2); } } // Pan page index inline function showPagePan(pageIndex) { for(k in PanSliderArray[0]) { k.showControl(pageIndex == 0); } for(k in PanSliderArray[1]) { k.showControl(pageIndex == 1); } for(k in empty) { k.showControl(pageIndex == 2); } } inline function buttonCallback(component, value) { if(value) { local x = SamplerSelectButtonArray.indexOf(component); local y = ControlSelectButtonArray.indexOf(component); if(x == true) { showPageGain(y);} else {showPageGain(2); } if(y == true) { showPagePan(y);} else {showPagePan(2); } } } for(a in SamplerSelectButtonArray) a.setControlCallback(buttonCallback); for(b in ControlSelectButtonArray) b.setControlCallback(buttonCallback); function onNoteOn() { } function onNoteOff() { } function onController() { } function onTimer() { } function onControl(number, value) { }
-
looks like this is causing it:
if(x == true) { showPageGain(y);} else {showPageGain(2); } if(y == true) { showPagePan(y);} else {showPagePan(2); }
-
Which HISE version are you using? I remember fixing a crash a few weeks ago that happened when you try to iterate over an object that isn't iteratable (eg. a module reference obtained by
Content.getComponent()
et al.), which is exactly what you trying to do with:for(k in GainSliderArray[0]) { k.showControl(pageIndex == 0); }
This is not how the
for(... in ...)
loop works. You want to iterate over the array, not the first element of it, so you need to remove the array subscription from the iterated object:for(k in GainSliderArray) { k.showControl(pageIndex == 0); }
-
I've gotten much closer to the goal.... just one thing left. Switching between Sampler1 and Sampler2 doesn't update my display until I select the Gain/Pan button. Any suggestions?
HiseSnippet 1808.3oc6Z8+aSaDE2tslQxZPvD+v9kIYg1jR0JsIlBrIDhzlRYUiRiZJnIMwPGNWROUm6rNeoqYnJs+G1+H6OA9Sh+C1d2Y63yoNo1PJaikHDDe26Kededu676tPKNyEGDv3FlkNbnO1vbYq1CohiZdDhPM1caCyqZIvABaGisF5iBBvcLLMW7IxYMKsjg5y6dzVHOD0EmLjgwKXDW7SI8IhjQa03GIdd6f5fOjzWS5MZrqKi1j4wF.HYQqZF9H2iQ8vOCIEaAKCSqG2gHX71BD.GCyk1h0YX6iX+JMT9WPBHu1CKentQavPgCuCyqiDwxQMZdDwqSq3HNvvv7JsRh+ECi+aZsGoCYz3I7v0USXmngNeXtvzfWcc3UK+vyTCdKEBuaX01kS7EIyHw1masKUf4cQPJPGVgxZrvStlUSFHAUrVezw3c3vCizn5cqUaU66Tq1JOnR4JkgDAjtOAwsai566g41OzNV4dXQSVeeFEdn5shl+VR8NmVNWjZNiomrjZh5HmbL4aglr3vbYipo5DMYxV6o4xDQl.ejGW6LYe6jCm6D68JkWecWNFpEsQbNZXP5DKxy60CDB3Yvh+bkx1S3yEj1W88TSm2CUCIlBqlhPlrRuL6J91XOrqXKEEsoj+.ZR8YJb0ri6JJWlOKIC0KPDclP5TNyKKl3ClDtvb4LI29AD7RtstDks8Hcv7Tk.yvpfPdXlEAYFFNW9ggyGi3nNjsubCiYa4T1IiK8fv4RNJv88Ep8.dYd0MeRs95gu+2G54ylP6fOsRYB0iPw1cGPcEDF0N.ZmpELuTvpRA2UJGDruIzKcY7pGCJm4x2UhfxaRPzwqIsXzFcIFz9gOzV0JjTlyB+mLbfyzcPtbS8y4lJkOK7s2p1axCa.xcwjQ55tYOWLU6+gPESsnYbJIrmllxtafSOT0Md0wpPoq2.bB4P5VMdjw3g0WO.qpzIHncc6S0.ur7Gf5D6QXMUhZ+tI9UFRPvFv7vq4yIvxzSWQaM2n3E9ijNQR5Lo0rHvgVKPtPWQYiBszQZXGewr13rBiJqTiI8rIkRSlQRspCveTRA6Efk7X8aqqGn4XZ3nkWOSgyo0SPVwZJ7GFpYEjPI3EDi4HHkKlJTLJUHugnZq4rivDvGGfPIQRr8Ll.uOs5JkeS4RkO6byzsaVSEYPnTMqYkm+lOE0pRGz+0XdLCFIGbLzzmy0ZxmyU+X3tgDhlfL5tThXeeLcRm90HhEgyAe0HPAhJTmB9ZQmBNb4mAANraIqnElFJDCPyTc0B4P0xwp5DqaxEajG8uhk55PJresrf7dAbY3VrJUqXo0C43lXJdWyDKakz3y6mEtlkdGfue1XTf3jMLd9taiDH4cgDUN.kH9XtfHq9L2FeBwEGdyHkr1FGbrf4qpWhV0AjbNpXNMwk2pwvQO7VVCNpCg8DNaf+XYnbXesxpDGzvc14fn5tDiaGnY7e+Gxz3FMxmwCKNmfsa7KE21Sr58T4ZlkAsGJ+xpvWNIdWDyE0M3R4qVNs85EVHlCTMV4rxL+QNfkUNKtSavdiYvyeUeW2ZOVmAdHQ5agTBtnIfcrSccexqziFPDC0qktTtZx7B2aX0hHbOJa7tPF3EVoeYi2nK5sh0i61EZgKArKYsyOc4eqt5P4qBgxWX0Vvwn9DZu3sjj3IYCpYvUu6m6qduEG6wPcZS9MMwdaisF.zEO8n+YCkq1rOa.Mkuh.9AXeLR.Yer9jGbfZeiw05cORUqbHG5IBXB8I1mhAZWnGiM4rfftP3nrUf9TsFv6I4pjQN.eBlGjdrmMnOj5oTnKO45Q4ased.VlpIt6gDbxo5Rq7RsCQpz82X4rwZo+bx9ve08ake86apdNTk5EWEmhqxcJtJaTbUtawU4dEWk6WHUBKz1C4m4uRzmku1SA0gMnwdZRtEomlokinupdTwmBqZ+LT+m62X5i26cVLev8B9YvJEiw1DY14wzSfMqfQBeYy13tnAdhQipCx8XTl+QLJwM8NCvJ8d8vbcnmY7roP.aLkLxMab.1CiBz1Z6qa7T3ToHd5M7JDUTO+TwzRWeoUHbska1a+oQ6BK9+91ElF0E28pM3ct3e444ksTa0aKaG4eJnd.af.ZyH9U8VP+.sgdfbw5cErfrSivmqEez91XZG0C+E7IZx5wsPHmrd7jFtwlBhsnuqNNq4hXp7MGptf8flS7zKoCfNsjPBdglQfJo1W9RnkjLGLVazI3vcXBwyDamZOhaKFPlv5H4lNVOn.8dpc30OkZ9bJr07lOm2747lOm2747lOm2747lOm2747lOm0Me9wHn6ib4rW4F9COIC8qpFAP.U8ek3RV6Ie1td7u0jLY0Gdu2qbckqptMjtxVCmBqwcJrFaTXMtag03dEVi6WXM9tongrIiMGHX8C2i0v3uoArm2C
Content.makeFrontInterface(500, 300); const var Sampler = Content.getComponent("Sampler"); const var Sampler2 = Content.getComponent("Sampler2"); const var Gain = Content.getComponent("Gain"); const var Pan = Content.getComponent("Pan"); const var SamplerGain = Content.getComponent("SamplerGain"); const var SamplerPan = Content.getComponent("SamplerPan"); const var Sampler2Gain = Content.getComponent("Sampler2Gain"); const var Sampler2Pan = Content.getComponent("Sampler2Pan"); //create arrays const var allbuttons = [ Content.getComponent("Sampler"), Content.getComponent("Sampler2"), Content.getComponent("Gain"), Content.getComponent("Pan") ]; const var SamplerSelectButtonArray = [ Content.getComponent("Sampler"), Content.getComponent("Sampler2") ]; const var ControlSelectButtonArray = [ Content.getComponent("Gain"), Content.getComponent("Pan") ]; const var Samp1GainSliderArray = [ Content.getComponent("SamplerGain") ]; const var Samp2GainSliderArray = [ Content.getComponent("Sampler2Gain") ]; const var Samp1PanSliderArray = [ Content.getComponent("SamplerPan") ]; const var Samp2PanSliderArray = [ Content.getComponent("Sampler2Pan") ]; const var empty = [] // Gain page index inline function showPageGain(pageIndex) { for(k in Samp1GainSliderArray) { k.showControl(pageIndex == 0); } for(k in Samp2GainSliderArray) { k.showControl(pageIndex == 1); } } // Pan page index inline function showPagePan(pageIndex) { for(k in Samp1PanSliderArray) { k.showControl(pageIndex == 0); } for(k in Samp2PanSliderArray) { k.showControl(pageIndex == 1); } } inline function buttonCallback(component, value) { if(value) { //set variable x var x = SamplerSelectButtonArray.indexOf(component); Console.print(x); } } for(a in allbuttons) a.setControlCallback(buttonCallback); inline function onGainControl(component, value) { if(value) { showPageGain(x);} else if(1-value) { showPageGain(2); } }; Content.getComponent("Gain").setControlCallback(onGainControl); inline function onPanControl(component, value) { if(value) { showPagePan(x);} else if(1-value) { showPagePan(2); } }; Content.getComponent("Pan").setControlCallback(onPanControl);
-
@christoph-hart The build is May3 2018. I'll update to the latest today.
-
@dustbro The latest is in the develop branch but there might be bugs.
-
Finally figured it out!
Content.makeFrontInterface(500, 300); const var Sampler = Content.getComponent("Sampler"); const var Sampler2 = Content.getComponent("Sampler2"); const var Gain = Content.getComponent("Gain"); const var Pan = Content.getComponent("Pan"); const var SamplerGain = Content.getComponent("SamplerGain"); const var SamplerPan = Content.getComponent("SamplerPan"); const var Sampler2Gain = Content.getComponent("Sampler2Gain"); const var Sampler2Pan = Content.getComponent("Sampler2Pan"); //create arrays const var SamplerSelectButtonArray = [ Content.getComponent("Sampler"), Content.getComponent("Sampler2") ]; const var ControlSelectButtonArray = [ Content.getComponent("Gain"), Content.getComponent("Pan") ]; const var Samp1GainSliderArray = [ Content.getComponent("SamplerGain") ]; const var Samp2GainSliderArray = [ Content.getComponent("Sampler2Gain") ]; const var Samp1PanSliderArray = [ Content.getComponent("SamplerPan") ]; const var Samp2PanSliderArray = [ Content.getComponent("Sampler2Pan") ]; const var empty = [] // Gain page index inline function showPageGain(pageIndex) { for(k in Samp1GainSliderArray) { k.showControl(pageIndex == 0); } for(k in Samp2GainSliderArray) { k.showControl(pageIndex == 1); } } // Pan page index inline function showPagePan(pageIndex) { for(k in Samp1PanSliderArray) { k.showControl(pageIndex == 0); } for(k in Samp2PanSliderArray) { k.showControl(pageIndex == 1); } } inline function ControlsCallback(component, value) { if(value) { //set variable y var y = ControlSelectButtonArray.indexOf(component); if (y == 0) { showPageGain(x);} else (showPageGain(3)); if (y == 1) { showPagePan(x); } else (showPagePan(3)); } } for(a in ControlSelectButtonArray) a.setControlCallback(ControlsCallback); inline function SamplerCallback(component, value) { if(value) { //set variable x var x = SamplerSelectButtonArray.indexOf(component); if (y == 0) { showPageGain(x); } else (showPageGain(3)); if (y == 1) { showPagePan(x); } else (showPagePan(3)); } } for(a in SamplerSelectButtonArray) a.setControlCallback(SamplerCallback);
-
@d-healey Overall functionality of the newest version is quite more stable than what I was using. Keeping my eyes open for bugs as you suggested.
-
Good to know ;)