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.
    • 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

                                  20

                                  Online

                                  1.9k

                                  Users

                                  12.4k

                                  Topics

                                  108.1k

                                  Posts