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 @LozPetts
      last edited by

      @LozPetts I looked at the code and here's the error code

              if(event.clicked)
              {
                  // Store the current value for reference when dragging
                  widget.data.downValue = this.getValue();
              }
      

      replacing "widget" with "this" solves it

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

      ulrikU 1 Reply Last reply Reply Quote 0
      • 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

                          21

                          Online

                          1.7k

                          Users

                          11.8k

                          Topics

                          102.3k

                          Posts