A/B comparison

  • This has been asked for a few times. Here is one solution I have found, although I haven't tried it in a real world project so there may be some unintended effects.

    Originally I was thinking of exporting the state of the controls to a string and storing them in a panel but unfortunately HISE prevents us from getting a reference to the main interface from within the main interface script so that won't work.

    The method I'm using instead is to export as a preset XML outside of the usual preset system (I think).

    HiseSnippet 1083.3ocsV07aaaCEmJwpqVatXEnm1IhbRFI00tesglEjZ67AL5RhwbWv.JBJnknrIBEo.EcVLJx+J6xNtq6OncY22+AaORIYI24kEWfoKRuu3626GIeOMTICnooRExo9ammPQNeg6n4B8z9SILAZvAHm66RFqooZTu4IjzTZHxwYyiMVcpWCYe9y86Q3DQ.sTEBctjEP+NVLSWpc3qeCiyOhDReKKth2O+0CBjh9RtbFfjMcaiRHAWRlPOkXbaCWjy8NLjokpQZB.FjSsdxv4ilJ+IQl+myRYi4TiPGzHXgxTejjGZPr4aT+oLd3vhJNEAqxvx5eyr5+QtmvBYKzWxCeo0.tLhp7gyF2F757IBOmJvqVF7dn6n.EKQWZwfsO2cfPSUQDXKnJrx7EswOuoaeI3gP2JlbI8HEHrHB+W1t8N3Wztcyca30vyt82JjFQU8Ib9XXiH0WqlQyLqnSvL3KX+JUiuhnvi0ht8v6ge2Ef5HoB6y.o16hY3uE+T301a2rg2GZ3ggGqyuicA3QAhlP08kwIRAH3uUuYZsTr01LS5pFQqTieBsRxKvkuTXslqt4td2XfHSvYBJNZlHPyjB7xd4Gj8dG.7bnp.nYRSVxXQXeqZ7d6g6zLSYNzMObY.giYgWC32tnsXhP50mEUrpM2E+jmbLUi0SoXhRQlisdfkQVU.SM1VgfDA7RwlLgpng3f7ZpLW.dSkbZqDECHFHmELhEnFH.rLd+E7nBtjJUztbddklB6ywCA0TfW6tUS7qti91aKfJMY4lhz4cSE17Toldlvuo2G7p6ci2GaIJZUlxyCmpVkUS6.0sDluXV7XppXOy3mYqZ4sfLeZZ3kG2oIrOLXh.JxRNOMe+LunVvlYGwZeg4n34lD3aWjNUH2Olt5lVRr6fiH7TZU98e28dKbOmhg5Etcub6i6c2ZeDjksJNJECDL8YIzb4xFLcVQCFTNbMsZxQJ3p11n4A4MZFwYgTEhAKxm49FgbbGjcOHu48u+KI+w9neXvADMoXYfUDxRBUoYlhw4.5Uvnfr9W0cOfldoVl.IZwsdXoWNoYMArIstalPaz0HGWmG.4bt4iuB9PSuVapstHEIjIOVImkjUqojqnCDYbtoQHZsxUmrb8aqJW8VqbU6+jLsYZRQl9U6Tx+QWeX1iLbFmnWdfjYJbtA31xRc9Mc2EoL87pSoWioTsW4TpUdH5NB2G5NjoCltZ7twJvKbb5+a7lOyug6gQQz.cIXq4dzO9oNfeMfx2KmoYhImPf4.lCBmNKdD7KPAT.IBAkmZNSrg4hZlbairgYFQEgVg+BdxM1wH6jarSgQTLIPIee93IyeUbeqF.SB6OWU28DiLdw8ZCtige048AAFh3w.xWcDOcsi3YqcDOesi3EqcDubsi3qW6H9laIBy+U1clVFmcs.TL7Pa+TGmCED3Tk8DH5ugyQVSL

  • Actually it seems there is a problem with this method too, it only write the value the first time the state is exported. @Christoph-Hart is this intentional?

  • @d-healey Very good starting point.
    In A/B comparsion, There is an A to B copy button (so the user don't have to start a new preset from scratch, just continue from the A) and undo, redo options.


  • This solution is not working properly? Anyone didn't implement it yet?

  • Now that we have the ability to read/write JSON files I think that would probably be the direction to go in with this.

  • @d-healey hmm, but that would mean writing to the JSON file every time the user changed a UI element no?

    Given this is all transitory data - cant you just keep it all in an array? Or am I missing something obvious?

  • @Lindon You'd only need to read/write the JSON when the A or B button is pressed. I'm sure there was some reason why we couldn't just store it in an array but right now I can't remember what that is... perhaps it is doable!

  • @d-healey - maybe - but my thinking went like this:

    on init

    • read all the GUI element values - store them in Array_A and Array_B

    on ui change

    • store its value in Array_A (if A button = true) or store it in Array_B (if B button = true)

    on button A

    • set everyone to Array_A values and issue .changed()

    on Button B

    • set everyone to Array_B values and issue .changed()

    Or (as I say) I may be missing the point here...

  • @Lindon

    on ui change
    store its value in Array_A (if A button = true) or store it in Array_B (if B button = true)

    This might add some unnecessary overhead and extra code. Why not just store all values in array A once when button B is pressed? I'm also thinking we could avoid using an array and use a base64string using MidiProcessor.exportState() although I don't know if this function can be used from within the MIDI processor that is being exported/restored.

  • @d-healey sure that'd work too...