HISE Logo Forum
    • Categories
    • Register
    • Login

    Get list of midi files

    Scheduled Pinned Locked Moved Scripting
    19 Posts 3 Posters 698 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.
    • d.healeyD
      d.healey
      last edited by d.healey

      Browse for directory returns the selected directory - except in your snippet where you've decide not to return anything in your callback function ;) and then you can search that directory for files.

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

      1 Reply Last reply Reply Quote 1
      • Dan KorneffD
        Dan Korneff
        last edited by

        @d-healey Thank you so much!

        //hold file list
        var fileList = [];
        
        const var Browse = Content.getComponent("Browse");
        
        inline function onBrowseControl(component, value)
        {
            if(value) //if button clicked
            {
                //open file broswer
                FileSystem.browseForDirectory("", function(dir)
                    {
                        //push midi list into array
                        fileList.push(FileSystem.findFiles(dir, "*.mid", false));
        
                    });
            }
        	
        };
        
        Content.getComponent("Browse").setControlCallback(onBrowseControl);
        

        Dan Korneff - Producer / Mixer / Audio Nerd

        1 Reply Last reply Reply Quote 0
        • Dan KorneffD
          Dan Korneff
          last edited by

          And one last tweak. The above code puts an array of files inside of an array...
          This will just populate the array with files:

          //hold file list
          var fileList = [];
          
          const var Browse = Content.getComponent("Browse");
          
          inline function onBrowseControl(component, value)
          {
              if(value) //if button clicked
              {
                  //open file broswer
                  FileSystem.browseForDirectory("", function(dir)
                      {
                          //push midi list into array
                          local midiFiles = FileSystem.findFiles(dir, "*.mid", false);
                          
                          for(m in midiFiles)
                          {
                              fileList.push(m);
                          }
          
                      });
              }
          	
          };
          
          Content.getComponent("Browse").setControlCallback(onBrowseControl);
          

          Dan Korneff - Producer / Mixer / Audio Nerd

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

            @dustbro Then why not just:

            fileList = FileSystem.findFiles(dir, "*.mid", false);
            

            Or if you want to keep a local var (if ever you have a good reason)

            fileList = midiFiles;
            

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

            Dan KorneffD 2 Replies Last reply Reply Quote 0
            • Dan KorneffD
              Dan Korneff @ustk
              last edited by Dan Korneff

              @ustk said in Get list of midi files:

              @dustbro Then why not just:

              fileList = FileSystem.findFiles(dir, "*.mid", false);
              

              That works too!
              Next question. The array of files are Objects. Tips on converting to string so I can load in the MidiPlayer?
              The files in the array looks like:

              "File: E:\\Company\\Groove 06 - 155 bpm\\Pattern01.mid"
              

              I'm calling

              MIDIPlayer.setFile(fileList[0], 1, 1);
              

              and getting an error:

              API Call with undefined parameter 0
              

              I guess technically I just need to remove

              File: 
              

              from the file name

              Dan Korneff - Producer / Mixer / Audio Nerd

              1 Reply Last reply Reply Quote 0
              • Dan KorneffD
                Dan Korneff @ustk
                last edited by

                @ustk @d-healey Any tips on using replace() ?
                I'm trying to snip the File: part off of the file name.
                using:

                fileList = fileList.replace("File: ", "");
                

                but I'm getting the error:

                Unknown function 'replace'
                

                Dan Korneff - Producer / Mixer / Audio Nerd

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

                  replace works on strings, fileList is an array so no replace function there. You'd need to loop through your array of objects and run replace on each one.

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

                  Dan KorneffD 1 Reply Last reply Reply Quote 0
                  • Dan KorneffD
                    Dan Korneff @d.healey
                    last edited by

                    @d-healey here's my attempt:

                    //hold file list
                    var fileList = [];
                    const var formattedNames = [];
                    
                    const var Browse = Content.getComponent("Browse");
                    
                    inline function onBrowseControl(component, value)
                    {
                        if(value) //if button clicked
                        {
                            //open file broswer
                            FileSystem.browseForDirectory("", function(dir)
                                {
                                    //push midi list into array
                                    fileList = FileSystem.findFiles(dir, "*.mid", false);
                                    
                                    for (i = 0; i < fileList.length; i++)
                                    {
                                        var newName = fileList[i];
                                        newName = newName.replace("File: ", "");
                        
                                        formattedNames.push(newName);
                                    }
                                    
                                });
                        }
                    	
                    };
                    
                    Content.getComponent("Browse").setControlCallback(onBrowseControl);
                    

                    getting this error:

                    function not found
                    at
                     newName = newName.replace("File: ", "");

                    Dan Korneff - Producer / Mixer / Audio Nerd

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

                      filelist is an array of objects. So filelist[i] is an object not a string. Try Console.print(trace(filelist[i])); to see what is contained within your object.

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

                      Dan KorneffD 1 Reply Last reply Reply Quote 0
                      • Dan KorneffD
                        Dan Korneff @d.healey
                        last edited by

                        @d-healey said in Get list of midi files:

                        Console.print(trace(filelist[i]));

                        It returns

                        Interface: undefined
                        

                        Dan Korneff - Producer / Mixer / Audio Nerd

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

                          @dustbro If you're going to copy and paste things that I write you should check that I've written it correctly ;) Your variable is called fileList, not filelist.

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

                          Dan KorneffD 1 Reply Last reply Reply Quote 0
                          • Dan KorneffD
                            Dan Korneff @d.healey
                            last edited by Dan Korneff

                            @d-healey said in Get list of midi files:

                            fileList

                            giphy.gif

                            I've been sitting at the computer for 13 hours... maybe I need a break.

                            Now that I'm using variables that actually exist in my project, it returns empty:

                            Interface: 
                            

                            Also, thanks for the help. 👍

                            Dan Korneff - Producer / Mixer / Audio Nerd

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

                              What do you get with Console.print(fileList.length);?

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

                              Dan KorneffD 1 Reply Last reply Reply Quote 0
                              • Dan KorneffD
                                Dan Korneff @d.healey
                                last edited by Dan Korneff

                                @d-healey 15, which is the amount of files in my test folder

                                Dan Korneff - Producer / Mixer / Audio Nerd

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

                                  Try this in place of your loop

                                  for (f in fileList)
                                  {
                                  	Console.print(f.toString(File.FullPath));
                                  }
                                  

                                  I also notice you're using some vars, always use local in inline functions, and in on init use reg or const. 99% of the time var should not be used except in paint routines, mouse callbacks, timer callbacks, and occasionally a few other places.

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

                                  Dan KorneffD 2 Replies Last reply Reply Quote 1
                                  • Dan KorneffD
                                    Dan Korneff @d.healey
                                    last edited by

                                    @d-healey said in Get list of midi files:

                                    Try this in place of your loop

                                    Now we're talking! that returns the file path correctly

                                    Dan Korneff - Producer / Mixer / Audio Nerd

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

                                      @dustbro Yeah it's late here :) the objects in your array are all file objects so you have access to all of the File class functions, like toString()

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

                                      1 Reply Last reply Reply Quote 0
                                      • Dan KorneffD
                                        Dan Korneff @d.healey
                                        last edited by

                                        @d-healey said in Get list of midi files:

                                        99% of the time var should not be used

                                        Thanks for this advice as well.

                                        Dan Korneff - Producer / Mixer / Audio Nerd

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

                                        20

                                        Online

                                        1.8k

                                        Users

                                        12.1k

                                        Topics

                                        104.9k

                                        Posts