Get Sample Filename from Sampler using custom Sample Maps.
-
@d-healey What about samplemaps contains multiple samples, like RRs?
I guess maybe I didnt explain my case very clearly.
I have CustomSampleImport. I have internal samplemaps that include RRs. I also have the ability to load a custom sample via a button. I want to be able to display the name of either 1. the samplemap loaded or 2. the custom sample name that is loaded.
I hope I cleared myself up.
Thanks for all the input and help.
-
@trillbilly said in Get Sample Filename from Sampler using custom Sample Maps.:
What about samplemaps contains multiple samples, like RRs?
The line I gave will get all samples in the current sample map. But start with 1 sample before you get more complicated.
@trillbilly said in Get Sample Filename from Sampler using custom Sample Maps.:
I want to be able to display the name of either 1. the samplemap loaded or 2. the custom sample name that is loaded.
These are completely separate things. How do you load the factory sample map?
-
@d-healey Yes, 2 different things but was hoping to share a label to display the name of the loaded item. Instead of displaying samplemap name, I would be ok with displaying the sample name. Do you think there is an easier solution?
Samplemaps are loaded via a viewport.
-
@trillbilly said in Get Sample Filename from Sampler using custom Sample Maps.:
Samplemaps are loaded via a viewport.
Presumably you already have the name of the sample map in the viewport? So you can just assign that to the label when the viewport item is selected.
@trillbilly said in Get Sample Filename from Sampler using custom Sample Maps.:
was hoping to share a label to display the name of the loaded item
Not a problem
-
@d-healey Here is how I am getting the samplemaps into the viewport.
const var Sampler1 = Synth.getSampler("Sampler1"); //sampler const var SampleViewer1 = Content.getComponent("SampleViewer1"); //viewport const var list = Sampler.getSampleMapList(); //samplemaps SampleViewer1.set("useList", true); SampleViewer1.set("items", list.join("\n")); inline function onSampleViewer1Control(component, value) { Sampler1.loadSampleMap(list[value]); }; Content.getComponent("SampleViewer1").setControlCallback(onSampleViewer1Control);
If I do this, the compile works but does not pass the name to the label.
const var Sampler1 = Synth.getSampler("Sampler1"); //sampler const var SampleViewer1 = Content.getComponent("SampleViewer1"); //viewport const var list = Sampler.getSampleMapList(); //samplemaps const var SampleName1 = Content.getComponent("SampleName1"); //label SampleViewer1.set("useList", true); SampleViewer1.set("items", list.join("\n")); inline function onSampleViewer1Control(component, value) { Sampler1.loadSampleMap(list[value]); SampleName1.setValue(value); }; Content.getComponent("SampleViewer1").setControlCallback(onSampleViewer1Control);
-
@trillbilly What is
value
? -
@d-healey Ive got it working with this minor change. Does this look better?
inline function onSampleViewer1Control(component, value) { Sampler1.loadSampleMap(list[value]); SampleName1.setValue(list[value]); }; Content.getComponent("SampleViewer1").setControlCallback(onSampleViewer1Control);
This works when using the viewport to change sample. Now the issue is if I use my randomize samplemap button, which does change the sample selected in the viewport, it doesnt update the label.
I'll dive into the button code and see if I cant figure that out as well.
-
@trillbilly said in Get Sample Filename from Sampler using custom Sample Maps.:
Does this look better?
Looking good
-
@d-healey Great. I think I figured out the random button issue too. Does this look solid or am I being hacky somewhere?
const sampleMapsRAN = Sampler.getSampleMapList(); inline function onShuffleSamplebtn1Control(component, value) { if (value) { local index = Math.randInt(0, sampleMapsRAN.length); local sampleMap = sampleMapsRAN[index]; Sampler1.loadSampleMap(sampleMap); SampleViewer1.setValue(index); SampleName1.setValue(list[index]); } };
-
@trillbilly Looks good, you could also remove the nest by returning early (doesn't change the logic, just improves readability).
if (!value) return; local index = Math.randInt(0, sampleMapsRAN.length); local sampleMap = sampleMapsRAN[index]; Sampler1.loadSampleMap(sampleMap); SampleViewer1.setValue(index); SampleName1.setValue(list[index]);
-
@d-healey Got it, thank you. Now to figure out how to get the label to change with the sample import. Iv tried adding the bit of code you gave me to the SampleLoadSave.js but this did not work either. Here is what I used and where i added.
inline function loadSample(file) { local s = [Sampler1.parseSampleFile(file)]; local selection = [Sampler1.createSelection(".*")]; SampleName1.get(selection); s[0]['LoKey'] = 60; s[0]['HiKey'] = 60; s[0]['Root'] = 60; Sampler1.loadSampleMapFromJSON(s); }
This compiles but 1. does not change the label and 2. does not allow sample to change. So i think im pretty far off or in the wrong location.
-
@trillbilly said in Get Sample Filename from Sampler using custom Sample Maps.:
local s = [Sampler1.parseSampleFile(file)];
local selection = [Sampler1.createSelection(".*")];What are the square brackets for?
SampleName1.get(selection);
What's this?
-
@d-healey The square bracket for
local s = [Sampler1.parseSampleFile(file)];
was in the CustomSampleImport demo already so I figured this is how it was supposed to be.SampleName1.get(selection);
is my attempt to read the array and pull the custom sample file name. -
@trillbilly said in Get Sample Filename from Sampler using custom Sample Maps.:
is my attempt to read the array and pull the custom sample file name.
I already gave you the code to get an array of all the samples in the current sample map. All you need to do is loop through the array (or if there's only ever one sample just use the first element) and retrieve the Filename property which you can then process further with the string commands. And at the link I posted before (read every post at that link) you'll see how to retrieve properties - https://forum.hise.audio/topic/64/fun-with-regex/8?_=1708021905238
-
@d-healey I know, I can feel you've basically given me the answer and yet its like I'm blind, deaf & dumb. However, of those may be true. I'm looking right over it. I'll go back and figure it out. I need to take a HISE break to work on another HISE project. The cycle...
-
@d-healey Im able to get the filename to print with this
const selection = Sampler1.createSelection(".*"); for (s in selection) { //Console.print(s.get(Sampler1.FileName)); s.set(Sampler1.Filename, s.get(Sampler1.Filename)); SampleName1.setValue(s[value]); }
I dont see any REGEX property ID for filename, or am looking (once gain) right over the post you're intending me to see.
Anymore help/direction is appreciated.
-
-
@d-healey if I remember correctly this is not working for custom samplemaps. That's what my original post was all about. If it works by now that would be cool tho.
-
@d-healey If this is the correct way, what about my script is incorrect? I have also tried
SampleName1.setValue(s.get(Sampler1.Filename));
But neither snippet has worked. They have both compiled, but not changed the label.
@oskarsh This is what I was afraid of. How else could you view the name of the currently loaded sample if its a custom samplemap?
-
@trillbilly I don't see in your script where you are setting the text property of the label