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

                              22

                              Online

                              1.9k

                              Users

                              12.4k

                              Topics

                              108.1k

                              Posts