HISE Logo Forum
    • Categories
    • Register
    • Login

    Filter/display sampleMap names by _prefix

    Scheduled Pinned Locked Moved Scripting
    24 Posts 4 Posters 1.5k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • ten7kurT
      ten7kur
      last edited by

      Hi all,

      Im trying to FILTER the SampleMap names on the GUI front[in the Viewport], to display only the ones with a specific PREFIX in their names and also remove that prefix from showing on the GUI front.

      I've named my sampleMaps [inside SampleMaps directory in my Project] as BD_1.xml, BD_2.xml, SD_1.xml, SD_2.xml , etc..

      Im want the sampleMap list[viewport] to display "1", "2" etc as a result

      I've tried using things like:

      const var sampleMapListFILTER = sampleMapList.contains(function(filt) 
          {
      	return filt.BD == " ";
          });
      SamplemapList.set("items", sampleMapListFILTER.join("\n"));
      
      sampleMapListFILT.indexOf(sampleMapList, "BD");
      
      if(Array.from("sampleMapList"))
      
      var FIND = sampleMapList.contains('BD');
      

      I can't seem to be able to put the sampleMap list into another array. Im guessing its a String?

      New to Javascript, stuck on this for 3rd day, kinda running out of ideas....
      Someone please enlighten me on where I'm going wrong!?

      HiseSnippet 2791.3oc6ZslaajbDdFIOdWxXsY2E9G4OAnMQ.LIhVJNjRZeXXDYJJaqDqGPT1aBTDLFR1jrWOb5Iyzij0ZHf8.jiPxcHWf.jCR90dB1aPRUcOu4CQQaY37fFVyzUWU20Tc0eU+MjG5w6R884dZ5EN9BWpl9cLZegiX31CsXNZ61RSunQyiN3aauyQMzZdgqkuOsmlt9xOA6Wuvszje9oeSSKaKmtzDQZZufy5ReFaDSjH8vs9cLa6Ga0idLaTJsWeqc6xc1layC.eYYiZZtVcek0.59VnZKYnoe6c5wDbu1BKA0WS+VM48tn8P94NJ8eAym0wlhML0ZCCjR7i418POFkps8PlcuCidl80zzMNLIBrrJBbWi8X8XwxShDeprCRhEoiG5KMK2yLs6Ua9cO8Tt2sTt2mYztqGyUjzC5a+LiccDTu9VvRPZ2Roq1R+zxFayAMbDUGY8J5i8fFwVTtQsZqRpWqVkGrRwUJBKD9BxYVdj1VibsoirbeFCj7PRzPX0q2KXzyc4dhxkxnTIbbv+iCU9AxCFBY1U0ATQnnH68Jk0Beoz8hm5PsRrLrqxnYqsFZhkmm0Efp+11GreUeWaF3bYFlRpmu0VKizGu6yNtJyoG80GzubldVkTpYqXidDN7U66wGMsgk0urRIlu7Z4VG878pT4M45chCg5w3M3efnrO2lV00i4fwWAbc.oOOvoG4d2iTRo5kDpsOkLCK1+fiUVUE9DYkxWlRbFCE6bDDByHsJns.1D3WtefSWAi6TtOyVTgH8XOpHvygfRp1rE4gOTFzdvkpfRljip9Tv6XB5HeHOI6b7cblS4R+QGUjXkhLGalCkDMiDtSTFGlD5wsK2kOxk6.oiqBOH1AzJqTDBFD3STthM2pWbxR1k1SjlbZkGTXkhWNYOMbd11x1tCfEUdLO.czT929bA8.mxUJ9lhEJdYQR9t52eh8ENX3VgI0MBS5MKCK6DLpC0KJHDoHfWjEPxX5.RowK6p1hmRQtytNLwAtTmoASoEhKf.VgdEnpPBW84gvUzXDCMFfL8yMxDu0jNe5hGZOe2VVBKXHWJEFXwqSQJ7wQUl5NFlUqE9QKtR0cLpkHMcwpUL1b8jdxVvZEi5or5pJZ0L.BUuf54CKYvRfwlaTCtbiUFBcAXI3ccYDYIqvBI+y6LqBIahER1HpPBhOPdBUPDCY9DD1i3yGQOeH0iRJSYB3FBExd6A0.ImwrHLmt1A8nDtGYGmA..fbOLBnuRQDspGjR.vSw6zQnluQc6IgRZGzozpQ8ZI.OKtozYKoZbZjv1iMBGycSFAtPvGE27H1n71+zmNlGH7rXCFJhsZmdCnQlQT3MpJV9Ac7EXUw2HGGRROJz9GFpQUXGrPUMIO98i2c+VopLO.wsBwEKWB6rTzZgxRzFWtOSBhHwpIXDKt.382EfmIlV2O+YAh19ZN0YKVibkxijW+Jsr9TrrwUZYi3hvju0CpvP.TaxqnWnPE8gDKAmX4nNiP5onKfNNf6w.cdH4jSkCRetW4dfIxzsJpEtD8p5F3Orbu34qsLAmJmMGXiuOwBlOrHGrJ5I6pOyCmtPeUZEVRfbAOfLz5LJAbNr.Hp7HrgEwWVCekhwA0rEOS4NyekSyqtzI3Y8ohtCktc3jbQbWRmVLzRnLi.6p+dpGmzwBvIHkCfY9UTko7Qc3c3u9dUfwtfMuqkc7vAA5D2OrPL34ExeJFnDThMkH+53F3yIT2t.3Q9gAeU7VEAAgv5auTw6BwIXYih356IQi5o4hjpiEbko5y9nBloNqvrWbpufKNjxXVzHDvg3PgkAlff.rYh6YC4I4TvS0Kv4nbkSShoIyAFmtuuLqVAeiBkXv7NeGsqHdJPEg4HJddZpUU0X1hSNGxanmAH9n+dtkC3tvBbYDfGy2kGGf.mGXURfOnkqGEhrqR.mox3IGv3gkRfBKvAcOGpjDkf.+sj7dzkl2kw5W0xX8bKip+gKHHFBDt4J7C4C6av302P9we3u.0eFY47i+vecUH7AG5.JCp5n01fvKWEQBJjn9tP8oIq+dVdmQsmjMGOj6csLncfK0aVdEp+oOHohA4Dx0zEIWC2CpHBkDIIA0wHMZtnrFMuJZiopel0vDFO2uYKYkPf7FpYE4NwwPpB5LINZPtWLGsYXz3zztTpe3eBOoPF+ax7zLuVJOAVcXdbHqNYRSH0NTbZpcRdjQ6DtLoDUiYvuyLG35ZqMWVo78qQItFyFEMJkZVTCMUfWegYZ1gY71oiSzXLbBb8.O3VzoKv6Oo1oj3XoTfoTP6DA0kBfyDFIngTv1+g8hkrtTxwGHkjjLimxB6OUN7SeZ5b35ueRhCSNl.AY4JQAUZ9jHIOk9SSTdJpDRVd1CPNByoUFn5bsH2tRHIpmY0gZK409QFxnPDeVfBXDQVc81.MQj24mFSVMhi63zy.Rd7dA1VhrL+P5rgcfLJyRQCog4.mr+hbDdm.iv4cF+LiCYvgAlxTZlcJqM2SYHE2UL1oee3XDIy2sLd7u+p4yldn9kGG8ZFDdTqQPtX3db43UvHp06fWKvmXTeiMWr2KvgdTIhC66o3693qL+55ol4.HJ3E025095MyM+OZDjSMtCD9ncD0kZIfkHou2Ho+iN5Id7.2Hqy7zJWVO1CPufHVt9NvgBm8VjKRrsG22uO77JGT+b8dXf2.L3lQ3Q3w87GS79AifUbGG.VQkE8beJ9VpXc2yBPSdcN0kyWsisjurJXCkrsYt10y0tQt1qmq8F4ZuYt1eYR63xDXB0maD2D333dAYyIgYne6az2my6e7hLuAoBQSYaFFJ1wANJGGjnhOsn8sBrEQRMyMo6wc3tC4Nrtikr.q8CF.aUy5MSyKejP.YunvMROH1TfKJtczL0X+L3zBVdQaQtFOpyJ59KLTt.AA.He3fJW6C.T4Y48eR3VHBrm2SbyGstigbGMAwpeKlsi3AB.qLBhx.PwTEzSikUWKrUsv2ZJ0oWML.9ElQ8XF9F2gdLC6QqazP.yb38pyLrL0AwgBq1ZC3o14VS8ghGn+fmz3lzEGY00i+xtpC.gN5GKk.Z5HeY2EL1CaSLiN5iA5kZi.nsW1salQYLapu.1zXArY8EvlMV.a1bAr4KW.a9pYZCVU4QAB9HEDAH3vcBOI5NIYU0hOfKjs6R8DL7KKRuE8L3fGpcUE.Lc+WI3txS.GRqRSu305K3AyG0uK3EWDcif9Z7GFfwgxWziu14rdhgffa+2C+FfFRwWpEJ4OGJw0NX.y4PKOHLHnd6GFMhFg.epbtfIPGzVRoTS+OYzr0ZMaU0rn5pUG0M0UWZnt7RSY87vF9AcLStsdw8B7Ycaxecbw+hsasV6VlpK0UWZntr96h5y5KmBaJ4WYwMxuxf2EkczWZB9K9k2cC6uyaMqanefFucLQV3eEMty8uhlLDOhT6erUZJGQR+aakgrQxbMAdFQc9wakijQxiRNFFIcDSuH4YbLtEIcEQrHQRBqhDYYnTn18OFohDs+fhQQgH3ow9F6+n46arGFmCsfm7TZ1jMHdNTRRRiSwjS5Qo9ITociQj48v1uaVf1kmO2U6Fh4j9xo4MkduPLooDeehOPQzkhjb2sh4JEI5WsUZdRKTrvb9iEukTq9OtBjK++7EHWHRgeHtNOEFkuWc04fqmg9RXs0X1dFXYwH9dF5+K3SBgOUQyPJepNmGZo5KERJMIk9ZxH8s1K++LS+uQlo5Kq8uA.4AFN.
      
      1 Reply Last reply Reply Quote 0
      • d.healeyD
        d.healey
        last edited by

        If you just want a list of numbers that goes from 1 to the number of sample maps why not just use array.length in a loop and forget about string manipulation?

        Libre Wave - Freedom respecting instruments and effects
        My Patreon - HISE tutorials
        YouTube Channel - Public HISE tutorials

        ten7kurT 1 Reply Last reply Reply Quote 0
        • ten7kurT
          ten7kur @d.healey
          last edited by ten7kur

          @d-healey said in Filter/display sampleMap names by _prefix:

          array.length

          No sorry, I should have mentioned/given a better example in terms of the naming. I don't want a list of numbers.
          I need the list to display: kick1name,kick2name,etc..
          instead of: BD_kick1name, BD_kick2name, I still need to remove the prefix [BD]

          You mentioned array.length . So the sampleMap List return IS an array?
          I can't seem to grasp how to access/edit the sample map list return

          1 Reply Last reply Reply Quote 0
          • ustkU
            ustk
            last edited by ustk

            @ten7kur You can either use String.replace(var substringToLookFor, var replacement) or String.substring(int startIndex, int endIndex) since the samplemap list is an array of strings

            Can't help pressing F5 in the forum...

            ten7kurT 1 Reply Last reply Reply Quote 0
            • ten7kurT
              ten7kur @ustk
              last edited by ten7kur

              @ustk said in Filter/display sampleMap names by _prefix:

              @ten7kur You can either use String.replace(var substringToLookFor, var replacement) or String.substring(int startIndex, int endIndex) since the samplemap list is an array of strings

              So?....

              sampleMapList.replace(sampleMapList "BD_", sampleMapList " ");
              SamplemapList.set("items", sampleMapList.join("\n"));
              

              Im puzzled on the 'var's

              1 Reply Last reply Reply Quote 0
              • ustkU
                ustk
                last edited by

                @ten7kur said in Filter/display sampleMap names by _prefix:

                So?....

                I am not sure it will work if you directly edit the items in the samplemapList, the risk is that it won't be able to locate the samplemaps if the name doesn't correspond to the reality anymore...
                If you just want to display the formatted names, fill a second array "formattedSamplemaps" with the applied filter from the original samplemapList

                Can't help pressing F5 in the forum...

                ten7kurT 1 Reply Last reply Reply Quote 0
                • ten7kurT
                  ten7kur @ustk
                  last edited by

                  @ustk said in Filter/display sampleMap names by _prefix:

                  formattedSamplemaps

                  I've done this but can't compile successfully:

                  //! =================== [ Samplemap List ] ================== !
                  const var SamplemapList = Content.addViewport("SamplemapList", 0, 0);
                  
                  
                  const var Sampler = Synth.getSampler("Sampler");
                  const var sampleMapList = Sampler.getSampleMapList();
                  
                  var formattedSamplemaps = [];
                  
                  //String.replace(var substringToLookFor, var replacement)
                  sampleMapList.replace(sampleMapList "BD_", formattedSamplemaps " ");
                  
                  
                  //
                  SamplemapList.set("items", formattedSamplemaps.join("\n"));
                  
                  inline function onViewportControl(component, value)
                  {
                      Sampler.loadSampleMap(sampleMapList[value]);	
                  };
                  
                  SamplemapList.setControlCallback(onViewportControl);
                  
                  
                  

                  Could you please show me an example?

                  1 Reply Last reply Reply Quote 0
                  • ustkU
                    ustk
                    last edited by

                    Actually, it's a bit more subtle if you want to make operation in an array, you should do this in FOR loop that iterates each member of the array.
                    I'll try to find the time to write something today

                    Can't help pressing F5 in the forum...

                    1 Reply Last reply Reply Quote 0
                    • ustkU
                      ustk
                      last edited by

                      @ten7kur That's you ;)

                      //! =================== [ Samplemap List ] ================== !
                      const var SamplemapList = Content.addViewport("SamplemapList", 0, 0);
                      
                      // Allow the viewport to list the items
                      SamplemapList.set("useList", true);
                      
                      const var Sampler = Synth.getSampler("Sampler");
                      const var sampleMapList = Sampler.getSampleMapList();
                      
                      
                      // Populate the formatted list in a new array
                      const var formattedSamplemaps = [];
                      
                      for (i = 0; i < sampleMapList.length; i++){
                          
                          var newName = sampleMapList[i];
                          newName = newName.replace("BD_", "");
                          
                          formattedSamplemaps.push(newName);
                      }
                      
                      // Update the viewport
                      SamplemapList.set("items", formattedSamplemaps.join("\n"));
                      

                      Can't help pressing F5 in the forum...

                      ten7kurT 1 Reply Last reply Reply Quote 0
                      • ten7kurT
                        ten7kur @ustk
                        last edited by

                        @ustk
                        hmm...doesnt seem to work....
                        Although I can see/partly-understand the logic

                        1 Reply Last reply Reply Quote 0
                        • d.healeyD
                          d.healey
                          last edited by

                          I don't know the solution at present as I haven't looked too much at your code, but I will when I have some free time if somebody else doesn't help you solve it.

                          However I noticed some things

                          const var sampleMapListFILTER

                          sampleMapListFILT.indexOf(sampleMapList, "BD");

                          The second one should be FILTER not FILT.

                          In a later post I see this

                          const var SamplemapList = Content.addViewport("SamplemapList", 0, 0);

                          const var sampleMapList = Sampler.getSampleMapList();

                          Those names are going to cause confusion, luckily HISEscript is case sensitive so the code will work, but it's bad practice. For the first one try something like vpSampleMaps (vp = viewport).

                          Also stick to one format, sampleMapListFILTER is weird - why all caps at the end? and SamplemapList - why does it start with a capital when your other variable names don't?

                          Libre Wave - Freedom respecting instruments and effects
                          My Patreon - HISE tutorials
                          YouTube Channel - Public HISE tutorials

                          ten7kurT 1 Reply Last reply Reply Quote 0
                          • ten7kurT
                            ten7kur @d.healey
                            last edited by ten7kur

                            @d-healey said in Filter/display sampleMap names by _prefix:

                            ar sampleMapListFILTE

                            Yes, I agree! :) 👍
                            Some of the code was commented out. I was playing with it before....

                            @ustk 's example looks like it should definitely work , it does ADD text, but does not remove BD_

                            ten7kurT 1 Reply Last reply Reply Quote 0
                            • ten7kurT
                              ten7kur @ten7kur
                              last edited by ten7kur

                              @ten7kur
                              No sorry, It does work! Brilliant!!!! Big big thanks!

                              How could I also escape directories?
                              I have sampleMaps inside folders inside my SampleMaps folder in my Project.

                              ustkU 1 Reply Last reply Reply Quote 0
                              • ustkU
                                ustk @ten7kur
                                last edited by

                                @ten7kur Strange, it effectively removes the "BD_" part here...
                                I am not sure it's a good idea to make subfolders for the samplemaps...

                                Can't help pressing F5 in the forum...

                                ten7kurT 1 Reply Last reply Reply Quote 0
                                • ten7kurT
                                  ten7kur @ustk
                                  last edited by ten7kur

                                  @ustk
                                  It does work!
                                  But how could I remove the other sounds "SD_", "HH_" from display all together. Just display the BD_ filter.

                                  OK. Fair enough on sampleMap subfolders

                                  1 Reply Last reply Reply Quote 0
                                  • ustkU
                                    ustk
                                    last edited by ustk

                                    @ten7kur there are two ways:

                                    • Replace newName = newName.replace("BD_", ""); with newName = newName.substring(3, 100); if you always have 3 characters to remove at the beginning.

                                    • Or use this instead of the loop in my first example:

                                    // String part you don't need
                                    const var charsToRemove = ["BD_", "HH_", "SD_"];
                                    
                                    
                                    for (i = 0; i < sampleMapList.length; i++){
                                        
                                        var newName = sampleMapList[i];
                                        
                                        for (j = 0; j < charsToRemove.length; j++){
                                            
                                            newName = newName.replace(charsToRemove[j], "");
                                        }
                                        
                                        formattedSamplemaps.push(newName);
                                    }
                                    

                                    The latter allows you to fill the "forbidden" array with any characters you want to remove

                                    Can't help pressing F5 in the forum...

                                    ten7kurT 1 Reply Last reply Reply Quote 1
                                    • ten7kurT
                                      ten7kur @ustk
                                      last edited by

                                      @ustk
                                      👍 👍 👍
                                      Wouldn't have figured it out my self! Not with my current Javascript knowhow...

                                      ten7kurT 1 Reply Last reply Reply Quote 0
                                      • ten7kurT
                                        ten7kur @ten7kur
                                        last edited by

                                        @ten7kur

                                        Looking at this further, the filtration of BD_, SD_,etc..works. However, once I click on an item in the list, it does not change it in the sampler. (The sampler name is correct)
                                        Im using this code:

                                        inline function onViewportControl(component, value)
                                        {
                                            Sampler.loadSampleMap(formattedSamplemaps[value]);	
                                        };
                                        
                                        SamplemapList.setControlCallback(onViewportControl);
                                        
                                        ten7kurT 1 Reply Last reply Reply Quote 0
                                        • ten7kurT
                                          ten7kur @ten7kur
                                          last edited by

                                          @ten7kur

                                          How could I also hide specific sample maps. So only show "BD_", or only "SD_".
                                          How would I 'categorize' them?

                                          1 Reply Last reply Reply Quote 0
                                          • ustkU
                                            ustk
                                            last edited by

                                            @ten7kur If you think about it, you are trying to load a sample map with a wrong name...
                                            hint: DoesformattedSamplemaps contains the real .xml samplemap names? ;)

                                            For your second question, it will be a bit complicated...
                                            Ok, for loading a samplemap, you need to call its name
                                            But, here, for doing so, you are using a value and look at the table the real name that corresponds to this value in order to load the SM (hidden hint for question one ;) )

                                            In YOUR case (because there are different way to do it), you'll need to split the samplemapList list into several subSamplemapList depending on characters they contain in their name

                                            Then you can format these names to remove what you don't like into, let say, FormattedSubSamplemapList

                                            Then you can load them in different viewports
                                            The value of these viewports will correspond to the different subSamplemapLists you can use to load the right SM

                                            Can't help pressing F5 in the forum...

                                            ten7kurT 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            37

                                            Online

                                            1.7k

                                            Users

                                            11.7k

                                            Topics

                                            102.1k

                                            Posts