Hacker News new | ask | show | jobs
by jcelerier 91 days ago
Yep! Almost finished implementing support in https://ossia.io which is going to become the first open-source cross-platform real-time visuals software to support live scrubbing for VJ use cases, in 4K+ prores files on not that big of a GPU (tested on my laptop 3060) :)
1 comments

How to feed MilkDrop music visualizations?

(MilkDrop3, projectm-visualizer/presets-cream-of-the-crop, westurner/vizscan for photosensitive epilepsy)

mapmapteam/mapmap does open source multi-projector mapping. How to integrate e.g. mapmap?

BespokeSynth is a C++ and JUCE based patch bay software modular synth with a "node-based UI" and VST3, LV2, AudioUnit audio plugin support. How to feed BespokeSynth audio and possibly someday video? Pipewire and e.g. Helvum?

- MilkDrop: I'd love a PR that adds support for ProjectM :D it would be fairly easy to make a custom plug-in that just blits the texture.

Basic code for this would look like that:

    struct MilkdropIntegration
    {
      halp_meta(name, "ProjectM")
      halp_meta(c_name, "projectm")
      halp_meta(category, "Visuals")
      halp_meta(author, "ProjectM authors")
      halp_meta(description, " :) ")
      halp_meta(uuid, "417534da-3625-404a-b74f-91d003cb64b9")
    
      // By know you know the drill: define inputs, outputs...
      struct
      {    
        struct : halp::lineedit<"Program", "">
        {
          halp_meta(language, "eel2")
        } program;
      } inputs;
    
      struct
      {
        struct
        {
          halp_meta(name, "Out");
          halp::rgba_texture texture;
        } image;
      } outputs;
    
      halp::rgba_texture::uninitialized_bytes bytes;
    
      void operator()()
      {
        if(bytes.empty())    
          bytes = halp::rgba_texture::allocate(800, 600); // or whatever resolution you wanna set
          
        // Fill in bytes with your custom pixel data here
        
        outputs.image.texture.update(bytes.data(), 800, 600);
      }
    };
inside such a template: https://github.com/ossia-templates/score-avnd-simple-templat...

- multi-projector mapping: ossia actually does it directly! it's in git master, will be released in the next version. It also supports a fair amount of features that MapMap does not have such as:

* soft-edge blending

* blend modes

* custom polygons

* a proper HDR passthrough as well as tonemapping, etc.

* Metal, Vulkan, D3D11/12 support (mapmap is opengl-only)

* Spout, Syphon, NDI, soon pipewire video. Mapmap only supports camera input.

* HAP and DXV, both decoded on GPU.

* Smooth grid distortion. Here's mapmap grid distortion: https://streamable.com/1nhwxg vs ossia with sufficiently high subdivisions: https://streamable.com/hmb1jm

* And of course as mentioned here hw decoding (for some years already), the new feature adds zero-copy when for instance using vulkan video and the vulkan GPU backend.

* In addition pretty much every YUV pixel format in existence is GPU-decoded (https://github.com/ossia/score/tree/master/src/plugins/score...).

In contrast Mapmap does gstreamer -> Qt ; everything including the Yuv -> RGBA conversion goes through the CPU.

- How to feed BespokeSynth audio and possibly someday video? Pipewire and e.g. Helvum?

yes, pipewire (or jack or blackhole on windows and macOS). Although ossia also supports, VST, VST3, LV2, CLAP, JSFX, and Faust and comes with many audio effects built-in already.