HISE Logo Forum
    • Categories
    • Register
    • Login

    Copy & Save '.mid file' to 'folder' || Help.

    Scheduled Pinned Locked Moved Solved Scripting
    22 Posts 3 Posters 85 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 @Chazrox
      last edited by

      @Chazrox

      In what way is it not working?

      // Why the empty if statement?
      if (original == undefined)
      {        
      }
      
      // Each of these can be one line
      local filename;
      filename = original.toString(original.Filename);
      
      local appDataDir;
      appDataDir = FileSystem.getFolder(FileSystem.AppData); 
      
      local newFile;
      newFile = appDataDir.getChildFile(filename);
      
      // Why are you copying then overwriting it with the original?
      original.copy(newFile);
      original.move(appDataDir);
      

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

      ChazroxC 1 Reply Last reply Reply Quote 0
      • ChazroxC
        Chazrox @d.healey
        last edited by

        @d-healey

        Why the empty if statement?

        I had something there but deleted it. I just removed it.

        Why are you copying then overwriting it with the original?

        I dont know what Im doing lol. I was just trying things because it wasnt working.

        @d-healey said in Copy & Save '.mid file' to 'folder' || Example?:

        In what way is it not working?

        When I drop the .mid file on my panel, the rest of the script executes but this part of it doesnt. I dont see any files in AppData or any other directory that I test.

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

          @Chazrox said in Copy & Save '.mid file' to 'folder' || Example?:

          When I drop the .mid file on my panel, the rest of the script executes but this part of it doesnt. I dont see any files in AppData or any other directory that I test.

          Can you show me where you are calling your function?

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

          ChazroxC 1 Reply Last reply Reply Quote 0
          • ChazroxC
            Chazrox @d.healey
            last edited by Chazrox

            @d-healey complete mess at the moment but have a look.

            inline function onpnlMIDIFilesFileDrop_B(obj)
            {
                // Maintain hover state for paint()
                local prevHover;
                prevHover = this.data.hover ? 1 : 0;
            
                this.data.hover = (obj.hover && !obj.drop) ? 1 : 0;
            
                if ((this.data.hover ? 1 : 0) != prevHover)
                    this.repaint();
            
                // Hover hint
                if (obj.hover && !obj.drop)
                {
                    this.data.text    = "Drop to load!";
                    this.data.dropped = false;
                    this.changed();
                    return;
                }
            
                
                if (!obj.drop || obj.fileName == undefined)
                    return;
            
                // Parse basename (no path, no extension)
                local full;
                full = obj.fileName;
            
                local slash;
                slash = Math.max(full.lastIndexOf("/"), full.lastIndexOf("\\"));
            
                local dot;
                dot = full.lastIndexOf(".");
                if (dot < 0) dot = full.length;
            
                local base;
                base = full.substring(slash + 1, dot);
            
                this.data.filename = base;   // paint()
                this.data.fileName = base;   // sync
            
                // Hide the slider while bounds/values are inconsistent
                RangeSlider.set("visible", 0);
            
                // Load into MIDIPlayer1 (track 1)
                MIDIPlayer1.setFile(full, true, true);
                if (MIDIPlayer1.setTrack != undefined) MIDIPlayer1.setTrack(1);
            
                // Start polling until the events are actually available
                midiRangeTimer.stopTimer();
                midiRangeTimer.startTimer(50);
            
                // -----------------------------------------------------------
                // COPY DROPPED FILE INTO AppData 
                // -----------------------------------------------------------
                local original;
                original = FileSystem.fromAbsolutePath(full);
            
                if (original == !undefined)
                {
                    local filename;
                    filename = original.toString(original.Filename);
            
                    local appDataDir;
                    appDataDir = FileSystem.getFolder(FileSystem.Downloads);
            
                    local newFile;
                    newFile = appDataDir.getChildFile(filename);
            
                    original.copy(newFile);
                    //original.move(appDataDir);
            
                    Console.print("Saved copy to AppData: " + newFile.toString(newFile.FullPath));
                }
            
                // Your existing flow
                // Save As "FAVORITE" Midi File in AppDataFolder
                // SaveFavoriteMidiFiles();
            
                // setAnalysisWindowFull();
                disableAllChords();
                // groupMidiNotesByTimeInWindow(analyzeStartMs, analyzeEndMs);
                // RangeSlider.setValue({ min: RangeSlider.get("min"), max: RangeSlider.get("max")});
                disableAllChords();
                // addChordsFromCurrentWindow();
            
                // UI flags
                this.data.text    = "Loaded";
                this.data.dropped = true;
                this.data.hover   = false;
                this.changed();
                this.repaint();
            
                knbSmartStrength.changed();
                pnlCustomMidiPanel.sendRepaintMessage();
                pnlCustomMidiRipView.sendRepaintMessage();
            }
            
            d.healeyD 1 Reply Last reply Reply Quote 0
            • d.healeyD
              d.healey @Chazrox
              last edited by

              @Chazrox I'd start with some Console.prints to see where the processing is getting up to. Is the filename you're storing what you expect it to be, is original a file object - instead of == undefined, use if (isDefined(original) && original.isFile()) to be certain.

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

              ChazroxC 1 Reply Last reply Reply Quote 0
              • ChazroxC
                Chazrox @d.healey
                last edited by

                @d-healey ok. I'll check all of that now.

                1 Reply Last reply Reply Quote 0
                • ChazroxC
                  Chazrox
                  last edited by Chazrox

                  This is where im at now, still not working completely. All of the functions work in this code block except for the part where I want the dropped file saved to the AppData folder. Can anyone help with this please? 🙏

                  Scroll down a little bit...

                  //! onPnlMIDIFilesFileDrop ---------------------------------------------------------------
                  inline function onpnlMIDIFilesFileDrop_B(obj)
                  {
                      // HOVER STATE
                      prevHover = this.data.hover ? 1 : 0;
                  
                      this.data.hover = (obj.hover && !obj.drop) ? 1 : 0;
                  
                      if ((this.data.hover ? 1 : 0) != prevHover)
                      {
                      	this.repaint();
                      }
                  
                      // HOVER CHECK
                      if (obj.hover && !obj.drop)
                      {
                          this.data.text    = "Drop to load!";
                          this.data.dropped = false;
                          this.changed();
                          return;
                      }
                     
                      if (!obj.drop || obj.fileName == undefined)
                      {
                      	return;	
                      }
                  
                      // PARSE BASE NAME
                      local full = obj.fileName;   
                      local slash = Math.max(full.lastIndexOf("/"), full.lastIndexOf("\\"));   
                      local dot = full.lastIndexOf(".");
                      
                      if (dot < 0) 
                      {
                      	dot = full.length;
                      }
                      
                      local base = full.substring(slash + 1, dot);
                  
                      this.data.filename = base;   // paint()
                      this.data.fileName = base;   // sync
                  	
                  	Console.print("BASE__" + base);
                      // HIDE RANGE SLIDER WHILE NO EVENTS
                      RangeSlider.set("visible", 0);
                  
                      // LOAD MIDI PLAYER TRACK 1
                      MIDIPlayer1.setFile(full, true, true);
                      if (MIDIPlayer1.setTrack != undefined) MIDIPlayer1.setTrack(1);
                  		
                  	// START POLLING EVENTS
                  	midiRangeTimer.stopTimer();
                  	midiRangeTimer.startTimer(50);
                      // -----------------------------------------------------------
                      // COPY DROPPED FILE INTO AppData 
                      // -----------------------------------------------------------
                     
                  	local original = FileSystem.fromAbsolutePath(full);
                  	local filename =  original.toString(this.data.Filename);
                      if (isDefined(original) && original.isFile())
                      {
                                
                  		Console.print(filename.toString());
                         	Console.print("ORIGINAL__" + original);
                          
                          local appDataDir = FileSystem.getFolder(FileSystem.Downloads);
                          local newFile = appDataDir.getChildFile(filename);
                  
                          original.copy(newFile);
                         // newFile.move(appDataDir);
                  		Console.print("NEWNEWNEW" + newFile);
                      }
                  	
                      Console.print("Saved copy to AppData: " + newFile.toString(newFile.FullPath));
                  	
                  		
                     
                      // Save As "FAVORITE" Midi File in AppDataFolder
                      // SaveFavoriteMidiFiles();
                  
                      // setAnalysisWindowFull();
                      disableAllChords();
                      // groupMidiNotesByTimeInWindow(analyzeStartMs, analyzeEndMs);
                      // RangeSlider.setValue({ min: RangeSlider.get("min"), max: RangeSlider.get("max")});
                      disableAllChords();
                      // addChordsFromCurrentWindow();
                  
                      // UI flags
                      this.data.text    = "Loaded";
                      this.data.dropped = true;
                      this.data.hover   = false;
                      this.changed();
                      this.repaint();
                  
                      knbSmartStrength.changed();
                      pnlCustomMidiPanel.sendRepaintMessage();
                      pnlCustomMidiRipView.sendRepaintMessage();
                  }
                  

                  none of my .prints return any results in that section either.

                  LindonL 1 Reply Last reply Reply Quote 0
                  • LindonL
                    Lindon @Chazrox
                    last edited by

                    @Chazrox said in Copy & Save '.mid file' to 'folder' || Help.:
                    [snip]

                    Ok lets start with your code...

                    
                    
                        // PARSE BASE NAME
                        local full = obj.fileName;   
                    }
                    

                    and later:

                    local original = FileSystem.fromAbsolutePath(full);
                    

                    So you are taking the filename from the obj and (later)asking for the actual file using .fromAbsolutePath()

                    ..but absolute path wants just that - an absolute path not the file name....so something like C:\documents\myfolder\myfilename.mid

                    so this:

                    local original = FileSystem.fromAbsolutePath(full);
                    

                    is probably failing - I think. so this:

                    if (isDefined(original) && original.isFile())
                        {
                    
                        etc. etc...
                    

                    is going to return false - and not execute....you need to do a LOT more Console.print debugging....

                    like this:

                    //! onPnlMIDIFilesFileDrop ---------------------------------------------------------------
                    inline function onpnlMIDIFilesFileDrop_B(obj)
                    {
                        // HOVER STATE
                        prevHover = this.data.hover ? 1 : 0;
                    
                        this.data.hover = (obj.hover && !obj.drop) ? 1 : 0;
                    
                        if ((this.data.hover ? 1 : 0) != prevHover)
                        {
                        	this.repaint();
                        }
                    
                        // HOVER CHECK
                        if (obj.hover && !obj.drop)
                        {
                            this.data.text    = "Drop to load!";
                            this.data.dropped = false;
                            this.changed();
                            return;
                        }
                       
                        if (!obj.drop || obj.fileName == undefined)
                        {
                        	return;	
                        }
                    
                        // PARSE BASE NAME
                        local full = obj.fileName;   
                        local slash = Math.max(full.lastIndexOf("/"), full.lastIndexOf("\\"));   
                        local dot = full.lastIndexOf(".");
                    
                    //============
                         Console.print("full contains:" + full);
                    //=============
                        
                        if (dot < 0) 
                        {
                        	dot = full.length;
                        }
                        
                        local base = full.substring(slash + 1, dot);
                    
                        this.data.filename = base;   // paint()
                        this.data.fileName = base;   // sync
                    	
                    	Console.print("BASE__" + base);
                        // HIDE RANGE SLIDER WHILE NO EVENTS
                        RangeSlider.set("visible", 0);
                    
                        // LOAD MIDI PLAYER TRACK 1
                        MIDIPlayer1.setFile(full, true, true);
                        if (MIDIPlayer1.setTrack != undefined) MIDIPlayer1.setTrack(1);
                    		
                    	// START POLLING EVENTS
                    	midiRangeTimer.stopTimer();
                    	midiRangeTimer.startTimer(50);
                        // -----------------------------------------------------------
                        // COPY DROPPED FILE INTO AppData 
                        // -----------------------------------------------------------
                       
                    	local original = FileSystem.fromAbsolutePath(full);
                    //===========
                          Console.print("Original contains:" + original);
                          Console.print("Original is defined ==:" + isDefined(original));
                           Console.print("Original is a file ==:" + original.isFile());
                    //===========
                    	local filename =  original.toString(this.data.Filename);
                        if (isDefined(original) && original.isFile())
                        {
                                  
                    		Console.print(filename.toString());
                           	Console.print("ORIGINAL__" + original);
                            
                            local appDataDir = FileSystem.getFolder(FileSystem.Downloads);
                            local newFile = appDataDir.getChildFile(filename);
                    
                            original.copy(newFile);
                           // newFile.move(appDataDir);
                    		Console.print("NEWNEWNEW" + newFile);
                        }
                    	
                        Console.print("Saved copy to AppData: " + newFile.toString(newFile.FullPath));
                    	
                    		
                       
                        // Save As "FAVORITE" Midi File in AppDataFolder
                        // SaveFavoriteMidiFiles();
                    
                        // setAnalysisWindowFull();
                        disableAllChords();
                        // groupMidiNotesByTimeInWindow(analyzeStartMs, analyzeEndMs);
                        // RangeSlider.setValue({ min: RangeSlider.get("min"), max: RangeSlider.get("max")});
                        disableAllChords();
                        // addChordsFromCurrentWindow();
                    
                        // UI flags
                        this.data.text    = "Loaded";
                        this.data.dropped = true;
                        this.data.hover   = false;
                        this.changed();
                        this.repaint();
                    
                        knbSmartStrength.changed();
                        pnlCustomMidiPanel.sendRepaintMessage();
                        pnlCustomMidiRipView.sendRepaintMessage();
                    }
                    

                    HISE Development for hire.
                    www.channelrobot.com

                    LindonL ChazroxC 3 Replies Last reply Reply Quote 1
                    • LindonL
                      Lindon @Lindon
                      last edited by

                      @Lindon said in Copy & Save '.mid file' to 'folder' || Help.:

                      local filename = original.toString(this.data.Filename);

                      also whilst we are here, Im not sure you can say this:

                      
                      	local filename =  original.toString(this.data.Filename);
                      

                      what I think you mean is this:

                      
                      	local filename =  original.toString(original.Filename);
                      

                      But its not going to work anyway until you get a file into original, not a text string...

                      HISE Development for hire.
                      www.channelrobot.com

                      ChazroxC 2 Replies Last reply Reply Quote 2
                      • ChazroxC
                        Chazrox @Lindon
                        last edited by Chazrox

                        @Lindon bro Thanks!

                        Im gonna check this out right now and report back. 🙏
                        I really appreciate the time brotha!

                        These are a bunch of new api's for me so im sure I made alot of mistakes and asking chat gpt to help sometimes make things worse. lol

                        1 Reply Last reply Reply Quote 0
                        • ChazroxC
                          Chazrox @Lindon
                          last edited by

                          @Lindon said in Copy & Save '.mid file' to 'folder' || Help.:

                          you need to do a LOT more Console.print debugging....

                          I really should. 🙏

                          1 Reply Last reply Reply Quote 0
                          • ChazroxC
                            Chazrox @Lindon
                            last edited by Chazrox

                            @Lindon

                            I was setting my B panels callback to my A panel....thats why none of my prints were hitting. When I was dropping on panel B, Panel A script was running which is already doing what it needs to do fine.

                            uhggh.. lol.
                            its one letter sometimes messing your whole day up. haha.

                            const var pnlMIDIFiles_B = Content.getComponent("pnlMIDIFiles_B");
                            pnlMIDIFiles_B.setFileDropCallback("All Callbacks", "*.mid", onpnlMIDIFilesFileDrop_B);
                            
                            

                            Your prints you added are extensive and im going to follow that from now on! Thank You sir! Im getting alot of info from these prints which I should help big time. Again 🙏

                            Screenshot 2025-08-31 at 4.22.36 AM.png

                            1 Reply Last reply Reply Quote 0
                            • ChazroxC
                              Chazrox @Lindon
                              last edited by Chazrox

                              @Lindon @d-healey I GOT IT. 🙏 🙏 🙏

                              After going through all the debugs I figured it out. Thank you guys so much. This was the last function I needed for my plugin which is just save a history of dropped files...and aside from some visual tweaks.....IM DONE!! Im on to the next step. Now i'll be buggin you guys about code-signing soon. haha. 🤛 Thanks so much!

                              1 Reply Last reply Reply Quote 1
                              • ChazroxC Chazrox has marked this topic as solved
                              • ChazroxC
                                Chazrox
                                last edited by

                                I'll be sharing a cleaned up snippet version and make an example of this for anybody that might be looking for it. Thanks again guys! 🙏

                                1 Reply Last reply Reply Quote 0
                                • ChazroxC
                                  Chazrox
                                  last edited by Chazrox

                                  This post is deleted!
                                  1 Reply Last reply Reply Quote 0
                                  • ChazroxC
                                    Chazrox
                                    last edited by

                                    Keyzie Midi Drop And Save Working.gif

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

                                    24

                                    Online

                                    1.9k

                                    Users

                                    12.4k

                                    Topics

                                    108.1k

                                    Posts