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

                      17

                      Online

                      1.7k

                      Users

                      11.9k

                      Topics

                      103.5k

                      Posts