HISE Logo Forum
    • Categories
    • Register
    • Login

    Is it possible to insert a looping video in a UI?

    Scheduled Pinned Locked Moved General Questions
    29 Posts 5 Posters 1.1k 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.
    • ulrikU
      ulrik @ulrik
      last edited by

      @ulrik tried to set it up as an animation with a very small sprite, 19 frames 50x50, and it works

      spriteanimation.gif

      here's the project:
      project

      Hise Develop branch
      MacOs 15.3.1, Xcode 16.2
      http://musikboden.se

      L 1 Reply Last reply Reply Quote 1
      • StraticahS
        Straticah @LozPetts
        last edited by

        @LozPetts i see, you dont need the whole loop, you can loop this using davinci smooth cut to around 2 seconds. Other way is to separate dark and reflections ij photoshop and play them at different filmstrip speeds so it looks like an infinite loop.

        building user interfaces in HISE :)
        web: www.vst-design.com

        1 Reply Last reply Reply Quote 0
        • L
          LozPetts @ulrik
          last edited by

          @ulrik Thank you! Thank works beautifully - I had a few issues but I've got it going smoothly and it looks killer. Thank you to you all.

          RE memory usage, I cropped the dead space from the video when I converted it to a film strip, according to the image pool table it looks like it's using around 100mb RAM, much better than expected.

          @d-healey Once again thanks for your help - is there a way we can update the documentation to reflect the fix above? Or can only Christopher do that?

          d.healeyD ulrikU 2 Replies Last reply Reply Quote 1
          • d.healeyD
            d.healey @LozPetts
            last edited by

            @LozPetts said in Is it possible to insert a looping video in a UI?:

            it looks like it's using around 100mb RAM

            How are you checking that?

            @LozPetts said in Is it possible to insert a looping video in a UI?:

            is there a way we can update the documentation

            Link Preview Image
            HISE | Docs

            favicon

            (docs.hise.dev)

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

            L 1 Reply Last reply Reply Quote 0
            • L
              LozPetts @d.healey
              last edited by

              @d-healey I saw in another thread you advised someone to check the pool to see how much memory the bitmaps were using (if I understood correctly at least!). Created a popup window, Image pool table, although looking at it now it might not be showing the full size as hise sees it.

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

                @LozPetts Perfect!

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

                1 Reply Last reply Reply Quote 1
                • ulrikU
                  ulrik @LozPetts
                  last edited by

                  @LozPetts What software do you use to create the sprites?
                  I've searched for a simple application for Mac OS but I only found some online sites who had that service but the sprite sheet was always horizontal and I had problems using the "offset x" instead of y, I couldn't get it to work (probably some stupid writing error from my side)

                  So I tried another approach with png sequences and loaded all pngs into the panel, and used the

                  g.drawImage(images[index], [0, 0, this.getWidth(), this.getHeight()], 0, 0);
                  

                  switching pngs instead of using the offset function.

                  Here's an example using 360 png files size 1920 x 1080, weight of 71mb
                  I scaled the display inside Hise to half the size.

                  It works quite well I think

                  spriteanimation.gif

                  But I would prefer to make sprite sheets so if you have any tip of software for Mac OS, let me know.

                  Hise Develop branch
                  MacOs 15.3.1, Xcode 16.2
                  http://musikboden.se

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

                    @ulrik said in Is it possible to insert a looping video in a UI?:

                    But I would prefer to make sprite sheets so if you have any tip of software for Mac OS, let me know.

                    Link Preview Image
                    Strip Generator | Blog | Wavesfactory

                    Free app that creates vertical and horizontal strips from a collection of JPG - PNG images.

                    favicon

                    (www.wavesfactory.com)

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

                    ulrikU 1 Reply Last reply Reply Quote 1
                    • ulrikU
                      ulrik @d.healey
                      last edited by

                      @d-healey I had forgotten this one, thanks David!

                      Hise Develop branch
                      MacOs 15.3.1, Xcode 16.2
                      http://musikboden.se

                      L 1 Reply Last reply Reply Quote 0
                      • L
                        LozPetts @ulrik
                        last edited by

                        @ulrik That one didn't work properly for me so I use this:

                        Link Preview Image
                        CSS Sprite Generator - CSS Portal

                        Welcome to CSS Sprite Generator, the fastest way for you to make CSS sprites.

                        favicon

                        (www.cssportal.com)

                        What I did to get this working was:

                        • Trim the empty space from the video edges.
                        • Convert the video to GIF - https://ezgif.com/video-to-gif
                        • Extract the frames from the GIF as PNG files - https://ezgif.com/split
                        • Convert all the PNGs into a filmstrip with the above CSS Sprite Generator
                        • attach filmstrip to Panel in HISE.
                        /** Looping Video Panel */
                        inline function createHeadSprite(name, x, y)
                        {
                            local widget = Content.addPanel(name, x, y);
                            
                            Content.setPropertiesFromJSON(name, {
                              "width": WIDTH OF SINGLE PNG,
                              "height": HEIGHT OF SINGLE PNG,
                              "saveInPreset": true,
                              "allowCallbacks": "Clicks, Hover & Dragging"
                            });
                            
                            // Asset Strip
                            widget.loadImage("{PROJECT_FOLDER}FILMSTRIP.png", "filmstrip");
                            
                            widget.setPaintRoutine(function(g)
                            {
                                // Calculate the index (the filmstrip has 100 slices, each ???px high
                                var index = parseInt(this.getValue()*197.0);
                                
                                g.drawImage("filmstrip", [0, 0, this.getWidth(), this.getHeight()], 0, index * ???);
                            });
                            
                            // This is the sensitivity of the rotation
                            widget.data.sensitivity = 300;
                            
                            // Save the down value as reference for all drag deltas
                            widget.data.downValue = 0.0;
                            
                            widget.setMouseCallback(function(event)
                            {
                                if(event.clicked)
                                {
                                    // Store the current value for reference when dragging
                                    this.data.downValue = this.getValue();
                                }
                                
                                if(event.drag)
                                {
                                    // Use both axis to allow diagonal drag behaviour
                                    var delta = event.dragX + -1.0 * event.dragY;
                                    
                                    // normalize the delta using the given sensitivity
                                    var deltaNormalized = delta / this.data.sensitivity;
                                    
                                    // Calculate the new value and truncate it to 0...1
                                    var newValue = this.data.downValue + deltaNormalized;
                                    newValue = newValue - Math.floor(newValue);
                                    
                                    // Update the panel
                                    this.setValue(newValue);
                                    this.changed();
                                    this.repaint();
                                }
                            });
                            
                            return widget;
                        };
                        
                        const sprite = createHeadSprite("LOOPPANEL", X, Y);
                        
                        //	timer for animation (FPS)
                        reg count = 0;
                        sprite.setTimerCallback(function()
                        {
                        	count = (count+1) % 24;
                        	this.setValue(count * 1/24);
                        	this.changed();
                        });
                        //Speed
                        sprite.startTimer(62); //Play with this to set speed
                        

                        Hope that helps someone out!

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

                        29

                        Online

                        1.7k

                        Users

                        11.8k

                        Topics

                        102.3k

                        Posts