Constant file ID
-
I'll have to check the sorting issue. I've been using the FileSystem API pretty seamlessly so far.
@arminh said in Constant file ID:
The second problem is that when the user adds the files in a different order the preset wasn't be able to point proper file because for example preset expect that sample will be at combobox value 10 but if we add some samples ealier on this value we will have completly different file.
Yup, this is why I said you can't save the combobox in the preset. The combobox should just be a visual selector, unrelated to the preset restoring. You need to use another type of component to restore the values and just load the combobox with the updated information. Don't use the combobox values to restore the presets.
-
@Lunacy-Audio but no matter where i put array data it always have random position.
For example, we have audio files list (no matter if sorting works or not :D ):
- 1.wav - cmb value = 1
- 2.wav - cmb value = 2
- 10.wav - cmb value = 3
but if we add sample 3 it will looks like
- 1.wav - cmb value = 1
- 2.wav - cmb value = 2
- 3.wav - cmb value = 3
- 10.wav - cmb value = 4
and that's the problem.
-
Think about it like this:
- The user uploads two files called "MyAudio1.wav" and ""MyAudio2.wav".
- You save the file names in the external JSON with an object like the one below. You'll need a different ID for each.
{ { "name": "MyAudio1.wav", "id": 1 }, { "name": "MyAudio2.wav", "id": 2 }, }
- In HISE, you set the value of a hidden slider (saved in preset) to
1
, indicating the current file is "MyAudio1.wav" - Update the visible combobox items to include the new audio files
- When the user changes the combobox selection, retrieve the actual text of the selection using
ScriptComboBox.getItemText()
and find the matching ID based in the external JSON on that text. - Save the new ID in the slider.
In this case, the combobox is purely a visual component, unrelated to the preset restoring. When the preset is restored, it will look at the hidden slider value and find the right audio file to load based on the external JSON.
-
This post is deleted! -
@Lunacy-Audio i thought about creating json but this requires additional actions from the user. Not all of us are so technical :D
-
The user never has to do anything. You make the JSON file in the HISEScript either using the new File API or
Engine.dumpAsJSON(var object, String fileName)
-
The important thing is that you never change the IDs after you've registered them. This is how you avoid breaking any previous presets.
-
@Lunacy-Audio you know how to push data to current file? because when i trying do this by writeObject i getting brand new file.
-
Yup,
Engine.dumpAsJSON(myNewFile, "../myNewFile.xml");
works great but will overwrite the file if it's already there.You just need to import the file first with
Engine.loadFromJSON("../myNewFile.xml");
and then append any changes before resaving it. -
@Lunacy-Audio ok thanks, i made a little progress
I can finally create xml with data but in file it has only last file from FileSystem array
for (f in files) { var id = parseInt(Math.random()*10000); var p = f.toString(OnlyExtension); var obj = { path: p, id: id, }; Engine.dumpAsJSON(obj, "../files.xml"); };
This overwrites the files instead of adding a new entry.
-
Right, take another look at that code. You only want to dump the JSON after the for loop is finished. At the moment, it's writing a new file with the object every single iteration. You need something more like this. Also be wary, the random ID is a bit deadly because there's always a change you'll get duplicate IDs.
var obj = {}; for (f in files) { var id = parseInt(Math.random()*10000); var p = f.toString(OnlyExtension); obj[id] = p; }; Engine.dumpAsJSON(obj, "../files.xml");
-
@Lunacy-Audio i wan't just test it with this random id, in normal project i'll use letters and numbers to be sure that repeat chance will be really low
-
@Lunacy-Audio unfortunately i still have one object in xml :(
-
This post is deleted! -
@Lunacy-Audio obj outside for should be array :) and then in for loop we push obj to this arr, now i'm curios what's happen when i add new file and what's happen with id
ID chaning everytime.
The worst thing is that the order of the objects is also disturbed.
-
This post is deleted! -
Oops yeah there was a typo in my code. Was accidentally redeclaring the obj.
Yeah, the ID will change every time if you're randomizing it. You need to check whether or not the file already exists in the external JSON and if it does, ignore it and make sure you don't use that ID again. That snippet above is just a really basic example, but you'll need to do some more checks in order to find out which ID to use next and which files have already been stored, etc.
-
Why don‘t you just sort the array of filenames alphabetically? I think the API call has even a parameter for that.
-
Ah nevermind, it hasn‘t. I‘ll add this.
-
I think this method still dosnt make sense because id and file path will be different for every user. :v