HISE Logo Forum
    • Categories
    • Register
    • Login

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

    Scheduled Pinned Locked Moved Solved Scripting
    22 Posts 3 Posters 86 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 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

                                23

                                Online

                                1.9k

                                Users

                                12.4k

                                Topics

                                108.1k

                                Posts