Plugin Directory

Changeset 3202739


Ignore:
Timestamp:
12/05/2024 03:20:57 AM (16 months ago)
Author:
genolve
Message:

AI generates background video from MP3 input, e.g. make a video for your NotebookLM podcast.

Location:
genolve-toolkit
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • genolve-toolkit/trunk/genolve-toolkit.php

    r3135668 r3202739  
    22/*
    33 * Plugin Name: Genolve AI image AI video generator
    4  * Version: 5.0.0
     4 * Version: 5.0.1
    55 * Plugin URI: https://www.genolve.com/
    66 * Description: Stunning AI video & images from a prompt, plus amazing toolkit to make banners, slideshows or music videos with AI assisted design.
  • genolve-toolkit/trunk/inc/functions.php

    r3135668 r3202739  
    2121define( 'GENOLVE_ACTION_URL',  'https://www.genolve.com/');     
    2222define( 'GENOLVE_JS_URL',      'https://www.genolve.com/js/' );
    23 define( 'GENOLVE_VER',         '-5.0.0' );
     23define( 'GENOLVE_VER',         '-5.0.1' );
    2424
    2525/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  • genolve-toolkit/trunk/js/genolve-sound.js

    r3135668 r3202739  
    1 var GenolveSound=function(q){var b=this;null==q&&(q={});this.ver="2.0.0";this.fov=90;this.muted=!0;this.numfreqbins=256;var ca=0,da=0,u=484,V=0,O=57,I=null,ea=3,W=!1,P=!0,w={},E=0,X=70,fa,Y,f=q.vpr;null==q.actionhost&&"https://www.genolve.com"==q.actionhost;var r,x="off",Q,Z,D,R,aa,ba=!0,F,m={},n=[];this.trueh=200;this.plO={};var d="notset";this.playExtra=this.muteExtra=this.muteTrans=null;this.doplots=!0;this.needSetup=!1;this.playID={};this.endID={};this.fadeID={};this.lastSnd={};var v=
    2 0,S=0,G=document.getElementById("oscilloscope");if(null!=G){var p=G.getContext("2d");var A=G.width;var B=G.height}var y=document.getElementById("plot");if(null!=y){var l=y.getContext("2d");l.font="28px serif";l.lineWidth=1;l.strokeStyle="green";l.rect(0,0,y.width,y.height);l.stroke()}null==f&&(f={name:"snd-stub",vprint:function(a,c){vv||console.log(c)},dumpvar:function(a){return JSON.stringify(a)},setValMode:{LOOP:"LOOP",LOOPz:"LOOPz",LOOPtoBOUND:"LOOPtoBOUND",LIMIT:"LIMIT",RANDOM:"RANDOM",MIDNORM:"MIDNORM",
    3 LOWNORM:"LOWNORM",HINORM:"HINORM"},setVal:function(a,c,e,h,g){e=parseFloat(e);h=parseFloat(h);if(e>h){var k=h;h=e;e=k}k=h-e;k=g==this.setValMode.LOOPz?k+1:k;a=isNaN(a)?0:parseFloat(a);c=isNaN(c)?1:parseFloat(c);a+=c;if(a>h)if(g==this.setValMode.LIMIT)a=h;else if(g==this.setValMode.LOOPtoBOUND)a=e;else if(g==this.setValMode.LOOP||g==this.setValMode.LOOPz)for(;a>h;)a-=k;else console.warn("GNLV_UTILS.setVal invalid setValMode:"+g+" must be LOOP/LIMIT/RANDOM");else if(a<e)if(g==this.setValMode.LIMIT)a=
    4 e;else if(g==this.setValMode.LOOPtoBOUND)a=h;else if(g==this.setValMode.LOOP||g==this.setValMode.LOOPz)for(;a<e;)a+=k;else console.warn("GNLV_UTILS.setVal invalid setValMode:"+g+" must be LOOP/LIMIT/RANDOM");return a},d0:function(a){a=String(a).replace(/[^0-9\-\.]/g,"");return Math.round(parseFloat(a))},dd:function(a){return Math.round(100*parseFloat(a))/100},ddd:function(a){return Math.round(1E3*parseFloat(a))/1E3},d4:function(a){return Math.round(1E4*parseFloat(a))/1E4},parsejson:function(a){var c=
    5 {};if(a.match(/^\{'/)||a.match(/^\[\{'/))a=a.replace(/'/g,'"');try{c=JSON.parse(a)}catch(e){console.warn("JSON parse error on["+a+"]:"+e)}return c}});this.volsprite='<g id="vol_on_off" class="gnlv-clickable gnlv-vol-control" data-ver="1.1" data-target="default" onclick="document.gnlvSound.toggleVol(this)" transform="scale(.2)"><circle  cx="100" cy="100" r="100" fill="#DDDDDD"/><g id="vol_on" transform="scale(0.2)" class="vol_on"><path d="M156,379 v247 h140 l210,173 l0,-592 l-210,173 H156 z  M588,351 c-12,-12 -32,-12 -44,0 c-12,12 -12,32 0,44 v0 c27,27 44,64 44,105 c0,41 -17,78 -44,105 c-12,12 -12,32 0,44 c6,6 14,9 22,9 c8,0 16,-3 22,-9 c38,-38 62,-91 62,-149 C650,442 626,389 588,351 z  M659,279 c-12,-12 -32,-12 -44,0 c-12,12 -12,32 0,44 c45,45 73,108 73,177 c0,69 -28,131 -73,177 c-12,12 -12,32 0,44 c6,6 14,9 22,9 c8,0 16,-3 22,-9 c57,-57 92,-135 91,-221 C751,414 716,335 659,279 z  M728,211 c-12,-12 -32,-12 -44,0 c-12,12 -12,32 0,44 h0 c63,63 102,149 102,245 c0,96 -39,182 -101,245 c-12,12 -12,32 0,44 c6,6 14,9 22,9 s16,-3 22,-9 c74,-74 120,-176 120,-289 C847,387 801,285 728,211 z  "></path></g><g id="vol_off" transform="scale(0.2)" class="vol_off" style="display:none"><path d="M156,379 v247 h140 l210,173 l0,-592 l-210,173 H156 z  M920,652 788,520 920,384 852,320 720,452 588,320 520,384 652,520 520,652 588,716 720,584 852,716 920,652 788,520  "></path> </g></g>';
     1var GenolveSound=function(q){var b=this;q==null&&(q={});this.ver="2.0.0";this.fov=90;this.muted=!0;this.numfreqbins=256;var ca=0,da=0,u=484,V=0,O=57,I=null,ea=3,W=!1,P=!0,w={},E=0,X=70,fa,Y,f=q.vpr;q.actionhost==null&&q.actionhost=="https://www.genolve.com";var r,x="off",Q,Z,D,R,aa,ba=!0,F,m={},n=[];this.trueh=200;this.plO={};var e="notset";this.playExtra=this.muteExtra=this.muteTrans=null;this.doplots=!0;this.needSetup=!1;this.playID={};this.endID={};this.fadeID={};this.lastSnd={};var v=
     20,S=0,G=document.getElementById("oscilloscope");if(G!=null){var p=G.getContext("2d");var A=G.width;var B=G.height}var y=document.getElementById("plot");if(y!=null){var l=y.getContext("2d");l.font="28px serif";l.lineWidth=1;l.strokeStyle="green";l.rect(0,0,y.width,y.height);l.stroke()}f==null&&(f={name:"snd-stub",vprint:function(a,c){vv||console.log(c)},dumpvar:function(a){return JSON.stringify(a)},setValMode:{LOOP:"LOOP",LOOPz:"LOOPz",LOOPtoBOUND:"LOOPtoBOUND",LIMIT:"LIMIT",RANDOM:"RANDOM",MIDNORM:"MIDNORM",
     3LOWNORM:"LOWNORM",HINORM:"HINORM"},setVal:function(a,c,d,h,g){d=parseFloat(d);h=parseFloat(h);if(d>h){var k=h;h=d;d=k}k=h-d;k=g==this.setValMode.LOOPz?k+1:k;a=isNaN(a)?0:parseFloat(a);c=isNaN(c)?1:parseFloat(c);a+=c;if(a>h)if(g==this.setValMode.LIMIT)a=h;else if(g==this.setValMode.LOOPtoBOUND)a=d;else if(g==this.setValMode.LOOP||g==this.setValMode.LOOPz)for(;a>h;)a-=k;else console.warn("GNLV_UTILS.setVal invalid setValMode:"+g+" must be LOOP/LIMIT/RANDOM");else if(a<d)if(g==this.setValMode.LIMIT)a=
     4d;else if(g==this.setValMode.LOOPtoBOUND)a=h;else if(g==this.setValMode.LOOP||g==this.setValMode.LOOPz)for(;a<d;)a+=k;else console.warn("GNLV_UTILS.setVal invalid setValMode:"+g+" must be LOOP/LIMIT/RANDOM");return a},d0:function(a){a=String(a).replace(/[^0-9\-\.]/g,"");return Math.round(parseFloat(a))},dd:function(a){return Math.round(parseFloat(a)*100)/100},ddd:function(a){return Math.round(parseFloat(a)*1E3)/1E3},d4:function(a){return Math.round(parseFloat(a)*1E4)/1E4},parsejson:function(a){var c=
     5{};if(a.match(/^\{'/)||a.match(/^\[\{'/))a=a.replace(/'/g,'"');try{c=JSON.parse(a)}catch(d){console.warn("JSON parse error on["+a+"]:"+d)}return c}});this.volsprite='<g id="vol_on_off" class="gnlv-clickable gnlv-vol-control" data-ver="1.1" data-target="default" onclick="document.gnlvSound.toggleVol(this)" transform="scale(.2)"><circle  cx="100" cy="100" r="100" fill="#DDDDDD"/><g id="vol_on" transform="scale(0.2)" class="vol_on"><path d="M156,379 v247 h140 l210,173 l0,-592 l-210,173 H156 z  M588,351 c-12,-12 -32,-12 -44,0 c-12,12 -12,32 0,44 v0 c27,27 44,64 44,105 c0,41 -17,78 -44,105 c-12,12 -12,32 0,44 c6,6 14,9 22,9 c8,0 16,-3 22,-9 c38,-38 62,-91 62,-149 C650,442 626,389 588,351 z  M659,279 c-12,-12 -32,-12 -44,0 c-12,12 -12,32 0,44 c45,45 73,108 73,177 c0,69 -28,131 -73,177 c-12,12 -12,32 0,44 c6,6 14,9 22,9 c8,0 16,-3 22,-9 c57,-57 92,-135 91,-221 C751,414 716,335 659,279 z  M728,211 c-12,-12 -32,-12 -44,0 c-12,12 -12,32 0,44 h0 c63,63 102,149 102,245 c0,96 -39,182 -101,245 c-12,12 -12,32 0,44 c6,6 14,9 22,9 s16,-3 22,-9 c74,-74 120,-176 120,-289 C847,387 801,285 728,211 z  "></path></g><g id="vol_off" transform="scale(0.2)" class="vol_off" style="display:none"><path d="M156,379 v247 h140 l210,173 l0,-592 l-210,173 H156 z  M920,652 788,520 920,384 852,320 720,452 588,320 520,384 652,520 520,652 588,716 720,584 852,716 920,652 788,520  "></path> </g></g>';
    66this.sndLibO={none:"none",drone:"https://www.genolve.com/svg/snd/drone-flying.mp3",train:"https://www.genolve.com/svg/snd/train-wheels.mp3",tick:"https://www.genolve.com/svg/snd/Tick.mp3",bells:"https://www.genolve.com/svg/snd/sleigh-bells-2ring.mp3","80svibe":"https://www.genolve.com/svg/snd/80s_vibe.mp3",rave:"https://www.genolve.com/svg/snd/rave_digger.mp3"};this.eventMapO={onmousemove:"mousemove",onfocusin:"focusin",onclick:"click",onmousedown:"mousedown",onmouseup:"mouseup",onbegin:"beginEvent",
    7 onend:"endEvent",onrepeat:"repeatEvent"};this.panningInterval=null;f.vprint("snd","   - =   gnlvSound loading   = - vpr:"+f.name);"function"!=typeof Howl&&(f.vprint("warn","= = = =missing Howler! loading now"),jQuery.getScript(q.actionhost+"/js/howler.js/dist/howler.min.js",function(){f.vprint("snd","3 3 3 3 3 3 3 3 3 3 3 3  howler loaded DONE  3 3 3 3 3 3 3 3 3 3 3 3")}).done(function(){}));"function"!=typeof window.jsmediatags&&(f.vprint("warn","= = = =missing window.jsmediatags! loading now"),
    8 jQuery.getScript(q.actionhost+"/js/jsmediatags/dist/jsmediatags.min.js",function(){f.vprint("snd","3 3 3 3 3 3 3 3 3 3 3 3  jsmediatags loaded DONE  3 3 3 3 3 3 3 3 3 3 3 3")}));this.init=function(){f.vprint("snd","init sound");q.volel&&b.registerVol(q.volel);if(q.preload){f.vprint("snd","init - PRELOAD["+d+"]:"+q.preload);var a={enable:!0,snd:"tlmusic",pl:d,playmode:"continuous",do3d:!1,file:q.preload,usemode:"record"};"none"==q.preload?window.setTimeout(function(){jQuery.event.trigger({type:"readyplayerone",
    9 message:"NO music to load, ready now",time:new Date})},500):b.preload(a)}};this.getMediaTags=function(a){"undefined"!=typeof eloop&&eloop.music&&window.jsmediatags?window.jsmediatags.read(a,{onSuccess:function(c){"none"==eloop.music.exturl;if(c&&c.tags&&c.tags.comment&&c.tags.comment.text){var e=c.tags.comment.text.split(/\r\n/,1);1==e.length&&(eloop.music.exturl=e[0].replace(/URL:\s*/,""))}e={artist:"unknown",album:"unknown",track:0,title:"unknown",fileLength:eloop.mp3length,genre:"unknown"};f.vprint("snd",
    10 "getMediaTags returned:"+f.dumpvar(c));for(key in e)eloop.music[key]=c&&c.tags&&c.tags[key]?c.tags[key]:e[key];"undefined"==typeof SpotifyApi?f.vprint("warn","getMediaTags no spotify api!"):(SpotifyApi.thmb=eloop.thmb,SpotifyApi.updateCurTrack("normal",eloop.music))},onError:function(c){console.log(c)}}):f.vprint("warn","getMediaTags missing "+typeof window.jsmediatags+" or eloop missing!"+typeof eloop)};var K=function(a){return a?a-Y:(new Date).getTime()-Y},ha=function(a,c){f.vprint("error","ERROR X X sound["+
    11 a+"]:"+c)};this.resize=function(a){a?(b.winw=a.winw||1200,b.winh=a.winh||630,a.coordA&&b.plO[d]&&b.plO[d].volel&&(3==coordA.length&&coordA.pop(),b.plO[d].volel.transform("matrix(0.2 0 0 0.2 "+coordA.join(" ")+")"))):(b.winw=b.winw||1200,b.winh=b.winh||630);b.aratio=b.winw/b.winh;b.camxshift=b.winw/2;b.camx=0;b.camy=b.winh/2;b.camz=-20;f.vprint("snd","sound resize= = = = = win w h:"+b.winw+","+b.winh+" aratio:"+b.aratio)};b.resize(q);this.panO={};this.mute=function(){f.vprint("snd","= = = = = global MUTE Sound["+
    12 d+"] muteTrans?"+(null!=b.muteTrans)+" extra?"+(null!=b.muteExtra));Howler.mute(!0);for(var a in b.plO[d].sndO)b.plO[d].sndO[a].pause();b.muted=!0;b.metronomeID&&(window.clearInterval(b.metronomeID),b.metronomeID=null);b.beatWorkerID&&(window.clearInterval(b.beatWorkerID),b.beatWorkerID=null);null!=b.muteTrans&&b.muteTrans(d);null!=b.muteExtra&&b.muteExtra()};this.play=function(){f.vprint("snd","= = = = = global PLAY Sound["+d+"] extra?"+(null!=b.playExtra));b.muted=!1;Howler.mute(!1);for(var a in b.plO[d].sndO)f.vprint("snd",
    13 "= = = = =  PLAY["+d+"]["+a+"]"),"none"!=b.plO[d].sndO[a].playmode&&"continuous"==b.plO[d].sndO[a].playmode&&b.plO[d].sndO[a].play();this.ana();null!=b.playExtra&&b.playExtra()};this.volume=function(a,c){f.vprint("snd","= = = = = volume Sound["+a+"] found?"+(b.plO[d]&&b.plO[d].sndO[a])+" vol:"+c);b.plO[d]&&b.plO[d].sndO[a]&&b.plO[d].sndO[a].volume(parseFloat(c)/10)};this.global_vol=function(a){Howler.volume(a)};this.addVol=function(a){if(null==a)f.vprint("snd","sound addVol["+d+"] abort, missing parent obj!");
    14 else{var c=a.select("#vol_on_off"),e=!0;L(d);c&&(oldver=c.attr("data-ver"),oldver=null==oldver?0:parseFloat(oldver),f.vprint("snd","addVol["+d+"] sound  found existing vol el! ver:"+oldver),1.1>oldver?c.remove():e=!1);e&&(f.vprint("snd","addVol["+d+"] sound new volsprite and hide!"),a.append(Snap.parse(b.volsprite)),c=a.select("#vol_on_off"),c.hasClass("gnlv-gone")||c.addClass("gnlv-gone"),b.plO[d].volState="vol_hidden");b.plO[d].volel=c;b.plO[d].voldomel=c.node;return c}};this.showVol=function(a){b.plO[d].volel&&
    15 b.plO[d].volel.attr&&"function"==typeof b.plO[d].volel.removeClass?(f.vprint("snd","showVol["+d+"] "+a+" have func?"+typeof b.plO[d].volel.removeClass),null==a||1==a?b.plO[d].volel.removeClass("gnlv-gone"):b.plO[d].volel.addClass("gnlv-gone")):f.vprint("warn","showVol["+d+"] = = = found no vol element at:"+b.plO[d].volel)};this.registerVol=function(a){a=a?a:q.volel;null==a&&(a="#vol_on_off");var c=Snap.select(a);f.vprint("snd","registerVol["+d+"]found ["+a+"]?"+typeof c);L(d);c&&c.attr?(f.vprint("snd",
    16 "registerVol["+d+"] found it:"+c.attr("id")+", have removeClass?"+typeof c.removeClass),b.plO[d].volel=c,b.plO[d].voldomel=c.node):f.vprint("warn","registerVol["+d+"] X X X found no vol element at:"+a)};this.toggleVol=function(a){var c;"string"==typeof a?b.plO[d].volState="vol_on"==a?"vol_off":"vol_on":"object"==typeof a&&(f.vprint("snd","toggleVol[ event:"+a+"]  nodeType?:"+a.nodeType+" id?"+a.id),newapl=a.getAttribute("data-target"),f.vprint("snd","toggleVol[ event:"+a+"]  playlist:"+newapl),L(newapl));
    17 b.plO[d].voldomel?c=b.plO[d].voldomel.getAttribute("id"):f.vprint("snd","toggleVol[ event:"+a+"] NO voldomel");"vol_on"==b.plO[d].volState?(b.plO[d].volState="vol_off",b.plO[d].voldomel.querySelector(".vol_on").style.display="none",b.plO[d].voldomel.querySelector(".vol_off").style.display="block",b.mute()):(b.needSetup&&(b.needSetup=!1,"undefined"!=typeof gnlvScroll&&1==q.doScroll?(gnlvScroll.doSetup(),"undefined"!=typeof eloop&&"running"==eloop.ani_state&&eloop.mkVidtimer()):f.vprint("warn","toggleVol X X X sound had flag for doSetup but no gnlvScroll defined!"+
    18 typeof gnlvScroll+" or flagged to skip:"+q.doScroll)),b.plO[d].volState="vol_on",b.plO[d].voldomel.querySelector(".vol_on").style.display="block",b.plO[d].voldomel.querySelector(".vol_off").style.display="none","undefined"!=typeof eloop&&eloop.music&&1==eloop.music.muzvidlink&&b.restart(eloop.anielapsed()),b.play());"undefined"!=typeof gnlvScroll&&gnlvScroll.changeDiv(d,b.plO[d].volState);f.vprint("snd","toggleVol[cur:"+d+"]["+c+"]:"+b.plO[d].volState)};this.getVolState=function(){L(d);return b.plO[d].volState};
    19 this.volColor=function(){var a=W?"#FFFFFF":"#000000";W=!W;b.plO[d].volel.attr({fill:a})};this.volMarquee=function(a,c,e){zmq=b.plO[d].volel.select("#track_marquee");"auto"!=c?null!=zmq&&zmq.remove():(f.vprint("snd","= = = = = = = volMarquee marquee mode:"+c+" volel:"+b.plO[d].volel.attr("id")+" marquee el?"+zmq+" track info:"+e),null==zmq?(f.vprint("snd","= = = = = = = volMarquee inserted marquee"),b.plO[d].volel.append(Snap.parse(a.replace(/CONTENT/,e))),zmq=b.plO[d].volel.select("#track_marquee"),
    20 mycirc=b.plO[d].volel.select("circle"),mycirc.before(zmq)):zmq.select("textPath").node.innerHTML=e)};var L=function(a,c){"notset"==a&&(a="default");f.vprint("snd","changeapl mode:"+c+" playlist "+d+" -> "+a);a==d&&"create"!=c&&null!=b.plO[a]?f.vprint("snd","changeapl noop, playlist  same! "+a):null==a||null==b.plO[a]||"create"==c?(f.vprint("snd","changeapl X X X X INIT X X X X   apl["+a+"]  not initialised? >"+b.plO[a]+"< or  mode create?"+c),d=a,b.plO[d]={},b.plO[d].sndO={},b.plO[d].volState="vol_hidden"):
    21 (f.vprint("snd","changeapl, new playlist! ["+d+"]volState"+b.plO[d].volState),"vol_on"==b.plO[d].volState&&b.toggleVol("vol_off"),d=a,"undefined"!=typeof gnlvScroll&&gnlvScroll.changeDiv(d,b.plO[d].volState))};this.radio=function(a){b.start({enable:!0,snd:"myradio",file:a,format:["mp3","aac"],do3d:!1,playmode:"normal"})};this.ana=function(a){if(null!=a&&(x=a,f.vprint("snd","ana MODE CHANGE:"+x+" muted?"+b.muted+" save for later"),b.muted))return;"off"==x?p&&(p.clearRect(0,0,A,B),p.fillStyle="red",
    22 p.fillRect(0,0,A,B)):null==r&&(f.vprint("snd","ana -------------------------------------------------- CREATE --------------------------------------------------Analyser:"+x+" bins:"+b.numfreqbins),r=Howler.ctx.createAnalyser(),r.maxDecibels=-20,r.fftSize=2*b.numfreqbins,"onbeat"===x?(a=Howler.ctx.createBiquadFilter(),a.type="lowpass",Howler.masterGain.connect(a),a.connect(r),f.vprint("snd","ana   LOWPASS FILTER ADDED")):Howler.masterGain.connect(r),G&&(A=G.width,B=G.height),fa=Y=(new Date).getTime());
    23 "headless"===x?(this.bufferLength=D=r.frequencyBinCount,this.dataArray=new Uint8Array(this.bufferLength),this.timeArray=new Uint8Array(this.bufferLength)):"onbeat"===x?(this.bufferLength=D=r.frequencyBinCount,this.dataArray=new Uint8Array(this.bufferLength),this.timeArray=new Uint8Array(this.bufferLength),f.vprint("snd","start beatWorker at interval:10"),b.beatWorkerID&&window.clearInterval(b.beatWorkerID),b.beatWorkerID=window.setInterval(qa,10),f.vprint("snd","start metronome at period - - - - - - - - - - - :"+
    24 u),b.metronomeID&&window.clearInterval(b.metronomeID),b.metronomeID=window.setTimeout(ia,u)):"sinewave"===x?(D=r.frequencyBinCount,Q=new Uint8Array(D),r.getByteTimeDomainData(Q),ja()):"frequencybars"==x&&(D=R=r.frequencyBinCount,Z=new Uint8Array(R),p.clearRect(0,0,A,B),ka());f.vprint("snd","ana DONE anaMode [ "+x+" ]  num bins:"+D+" - - - - - - - - - - - -  - - - - - --  - - - - - --  -- - ");f.vprint("snd","ana DONE  - - - - - - - - - - - -  - - - - - --  - - - - - --  -- - ")};this.getAna=function(){if(null==
    25 r||"off"==x||b.muted)return null;r.getByteFrequencyData(this.dataArray);r.getByteTimeDomainData(this.timeArray);return{data:{freq:this.dataArray,time:this.timeArray,metro:(K()-E)/u,size:this.bufferLength}}};var qa=function(){r.getByteFrequencyData(b.dataArray);var a=b.dataArray,c=b.bufferLength;da++;ca=((new Date).getTime()-fa)/da;var e=[],h,g=0,k=0,z=0,C=0,H=0;for(h=0;h<c;h++)e[h]=f.setVal(a[h]/255,0,0,1,f.setValMode.LIMIT),H=Math.max(H,e[h]),g+=e[h],3>h?C+=e[h]:6>h?z+=e[h]:k+=e[h];m.ave=g/c;m.max=
    26 H;m.bass=C/3;m.mid=z/3;m.treb=k/3;aa=!1;m.prevh2&&m.bass<m.prevh&&m.prevh<m.prevh2&&1==ba&&(ba=!1,aa=!0,F=100*m.prevh2,a={bar:F,ts:m.prevt2},F<O?T(a,"cyan"):(n.push(a),O=(3*O+(F-10))/4));m.bass>m.prevh&&m.prevh>m.prevh2&&(ba=!0);m.prevh2=m.prevh;m.prevt2=m.prevt;m.prevh=m.bass;m.prevt=K()},ia=function(){E=K();T({ts:E,bar:X},"black");f.vprint("snd",vv?"":"metronome - - - - - - - - - - - TICK at["+E+"] period:"+u+" beat:"+n.length);$.event.trigger({type:"beat",keyoff:"bass",time:new Date});if(0>ea--){ea=
    27 3;var a=(new Date).getTime();f.vprint("snd",vv?"":"metronome evalBeats - START -  period:"+u+" num beats:"+n.length);0==n.length&&(O*=.5);var c=99999999999999;b.doplots&&(v=V/10-S,plotw=(K(a)-V)/10,l.fillStyle=P?"yellow":"orange",l.fillRect(v,0,plotw,5+5*P));V=K(a);P=!P;if(0<n.length){for(var e=0;e<n.length;e++){var h=X-n[e].bar;h=0>h?0:h*h;var g=E-n[e].ts;g*=g;h=g+h;0<e&&(g=n[e].ts-n[e-1].ts,g=10*Math.round(g/10),w[g]=null==w[g]?1:w[g]+1);1<e&&(g=n[e].ts-n[e-2].ts,g=10*Math.round(g/10),w[g]=null==
    28 w[g]?1:w[g]+1);2<e&&(g=n[e].ts-n[e-3].ts,g=10*Math.round(g/10),w[g]=null==w[g]?1:w[g]+1);if(h<c){var k=e;c=h}T(n[e],"sand")}T(n[k],"red");X=n[k].bar;f.vprint("snd",vv?"":"metronome evalBeats histO:"+f.dumpvar(w));g=ra(w);k="nada";f.vprint("snd",vv?"":"metronome evalBeats gotback:"+f.dumpvar(g));g&&1<g.length&&(g=g.sort(sa),u=Math.round(60/g[0].tempo*1E3),k=g[0].tempo);c=u-(E-n[n.length-1].ts);I=u;u=c;f.vprint("snd",vv?"":"metronome evalBeats best:"+k+"->[ "+I+" ] THIS delay:"+u+" DUMP tempos:"+g);
    29 b.doplots&&(v=n[n.length-1].ts/10-S,plotw=I/10,l.fillStyle="green",l.fillRect(v,16,plotw,2));n.length=0;f.vprint("snd",vv?"":"metronome evalBeats DONE for["+E+"]: took:"+((new Date).getTime()-a))}}b.metronomeID&&window.clearInterval(b.metronomeID);b.metronomeID=window.setTimeout(ia,u);null!=I&&(u=I,I=null)},sa=function(a,c){let e=0;a.count<c.count?e=1:a.count>c.count&&(e=-1);return e},ra=function(a){var c,e=[];for(c in a){var h=a[c];var g=60/(c/1E3);g=Math.round(g);if(0===g)return;for(;90>g;)g*=2;
    30 for(;180<g;)g/=2;g=Math.round(g);e.some(function(k){if(k.tempo===g)return k.count+=h})||e.push({tempo:g,count:h})}return e},T=function(a,c){b.doplots&&(v=a.ts/10-S,ploty="black"==c?0:15,ploth="black"==c?a.bar:a.bar-15,l.fillStyle=c,l.fillRect(v,ploty,1,ploth),v>y.width&&(S+=y.width,l.fillStyle="white",l.fillRect(1,1,y.width-2,y.height-2)))},ka=function(){b.muted||(drawVisual=requestAnimationFrame(ka));r.getByteFrequencyData(Z);p.fillStyle="rgb(0, 0, 0)";p.fillRect(0,0,A,B);for(var a=A/R,c,e=0,h=0;h<
    31 R;h++)c=Z[h],p.fillStyle="rgb("+(c+100)+",50,50)",p.fillRect(e,B-c,a,c),e+=a+1;aa?(pnbpix=333/17,l.fillStyle="rgb(200,200,0)",l.fillRect(v,F-1,pnbpix,1),l.fillStyle=beatStyle):(F=10,l.fillStyle="rgb(50,50,50)");l.fillRect(v,0,1,F);l.fillStyle="rgb(200, 200, 200)";l.fillRect(10,25,250,35);l.fillStyle="rgb(0,0,0)";l.fillText("cps:"+Math.round(ca)+" pbp:333",10,50);v+=1;v>y.width&&(v=0,l.fillStyle="white",l.fillRect(1,1,y.width-2,y.height-2))},ja=function(){b.muted||requestAnimationFrame(ja);r.getByteTimeDomainData(Q);
    32 p.fillStyle="rgb(200, 200, 200)";p.fillRect(0,0,A,B);p.lineWidth=2;p.strokeStyle="rgb(0, 0, 0)";p.beginPath();for(var a=1*A/D,c=0,e=0;e<D;e++){var h=Q[e]/128*B/2;0===e?p.moveTo(c,h):p.lineTo(c,h);c+=a}p.lineTo(A,B/2);p.stroke()};this.restart=function(a,c){f.vprint("snd","= = restart all or key?"+c);if(null!=b.plO[d])if(null==a&&(a=0),null!=c)b.plO[d].sndO[c].seek(a);else for(c in b.plO[d].sndO)b.plO[d].sndO[c].seek(a)};var la=function(a,c){var e=0;for(null==a||null==a.attr("id")||a.attr("id");null!=
    33 a&&null!=a.parent()&&!a.hasClass(c);){a=a.parent();var h=null==a?"nada":null==a.attr("id")?"nada":a.attr("id");f.vprint("snd",">>>>> findParent bubble["+e+"]:fromhere id:"+h+":");if(a.hasClass(c))return a;e++}return null};this.preload=function(a){f.vprint("snd","=preload("+a.file+","+a.snd+","+a.pl+"):");a.preloading=!0;b.start(a)};this.start=function(a){d=null==a.pl?"default":a.pl;L(d);f.vprint("snd","= = = = = gnvlSound.START["+d+"],  eloop?"+typeof eloop+":");null==b.plO[d]?f.vprint("snd","= = = = = X X X playlist[ "+
    34 d+" ] mia"):f.vprint("snd","= = = = =  cur volel?"+typeof b.plO[d].volel+", param vol?"+typeof a.volel+" sndO:"+b.plO[d].sndO);null==a.snd&&(a.snd="tlmusic");a.volel&&(b.plO[d].volel=a.volel,b.plO[d].voldomel=a.volel.node,delete a.volel);f.vprint("snd","= = = = =  final ["+d+"]volel?"+typeof b.plO[d].volel+":");"undefined"==typeof b.plO[d].volel&&b.registerVol();"vol_hidden"==b.plO[d].volState&&("idle2play"==a.usemode?b.plO[d].volel.removeClass("gnlv-gone"):("undefined"==typeof eloop||"stub"!=eloop.version)&&
    35 b.plO[d].volel.removeClass("gnlv-gone"),a.preloading&&"idle2play"!=a.usemode||b.toggleVol("vol_off"));if(a.enable){null==a.file?a.file=b.sndLibO[a.snd]:b.sndLibO[a.snd]&&a.file!=b.sndLibO[a.snd]&&(f.vprint("snd","= detect sound file change:"+a.file+"->"+b.sndLibO[a.snd]),a.file=b.sndLibO[a.snd]);f.vprint("snd","= = = = = CREATE Sound["+a.snd+"] params:"+a);var c="continuous"==a.playmode?!0:!1;null!=this.plO[d].sndO[a.snd]&&(f.vprint("snd","= old sound existed same? false :old:"+this.plO[d].sndO[a.snd].src+
    36 " new:"+a.file),f.vprint("snd","= unload old sound:"+a.snd),this.plO[d].sndO[a.snd].unload());c={src:[a.file],loop:c,autoplay:!1,preload:!0,onloaderror:ha,onplayerror:ha};a.volume&&(c.volume=parseFloat(a.volume)/10);a.format&&(c.format=a.format);a.do3d&&(c.do3d=a.do3d);a.html5&&(c.html5=a.html5,f.vprint("snd","X X looks like html5? "+a.html5+" NO ANALYZER"));a.file.match(/\.[a-zA-Z0-9]{3}$/)||(f.vprint("snd","no extension guess = AUTOFORMAT mp3"),c.format=["mp3"]);f.vprint("snd","MADE snd["+d+"]["+
    37 a.snd+"]="+a.file);this.plO[d].sndO[a.snd]=new Howl(c);a.do3d&&(this.plO[d].sndO[a.snd].do3d=a.do3d);a.playmode&&(this.plO[d].sndO[a.snd].playmode=a.playmode);this.plO[d].sndO[a.snd].src=a.file;this.plO[d].sndO[a.snd].once("load",function(e,h){f.vprint("snd","LOAD DONE:sound tag:"+a.snd+" arg1"+e+" arg2:"+h);"tlmusic"==a.snd&&a.preloading&&jQuery.event.trigger({type:"readyplayerone",message:"tlmusic is ready for action",time:new Date})});f.vprint("snd","have audiocontext:"+Howler.ctx);if(a.do3d)b.panO[a.ani]=
    38 b.setupPan(a.snd,0,0),null==b.panningInterval&&"autoset"!=a.ani?(f.vprint("snd","= = = = = START Panner Interval= = = = = CAMERA["+a.ani+"]              C  A  M  E  R  A           xyz: "+this.camx+","+this.camy+","+this.camz),Howler.pos(this.camx,this.camy,this.camz),b.panningInterval=window.setInterval(ta,100)):f.vprint("snd","= = = X X skip Panner Interval, already there,  panO:"+Object.keys(b.panO)+" or bad id:"+a.ani);else if(a.playmode.match(/^on/))for(playmodeA=a.playmode.split(/,/),f.vprint("alert",
    39 "= = = = = EVENT LISTENER MODE RETIRED  = = = : "+a.playmode+" : split:"+playmodeA.length+" for "+a.ani),ii=0;ii<playmodeA.length;ii++)myp=ma(a.ani),anelA=myp.el.querySelectorAll("animateTransform"),anmtA=myp.el.querySelectorAll("*[id^=anmt_]"),f.vprint("snd",vv?"":"on-event= = = = = found num animateTransform       A N I    T R A N S         :"+anelA.length+" num id anmt:"+anmtA.length),0<anelA.length?anel=anelA[0]:0<anmtA.length&&(anel=anmtA[0]),playmodeA[ii].match(/(mouse|click|focus)/)&&(anel=
    40 myp.el),anel.removeEventListener(b.eventMapO[playmodeA[ii]],na),anel.addEventListener(b.eventMapO[playmodeA[ii]],na.bind({mysound:b.plO[d].sndO[a.snd]}));else f.vprint("snd","= = = = = non-3d sound autoplay skip")}};var na=function(a){console.log("i repeated:"+a.detail+" mysound:"+typeof this.mysound);this.mysound.play()};this.stdplay=function(a,c,e,h,g,k,z,C){if(a&&a.getAttribute){var H=a.getAttribute("ddd");a.getAttribute("ppp");var J=a.getAttribute("apl");var t=a.getAttribute("slot");var oa=parseFloat(a.getAttribute("vol"))/
    41 10}else f.vprint("warn","stdplay["+e+"]["+c+"] X X X have no el?"+typeof a);if(null==e||"null"==e)e=null!=J?J:d;f.vprint("snd","stdplay[apl:"+d+" myapl:"+e+" aaa:"+J+"]["+c+"] Tfrom:"+g+" to:"+k+" have apl?"+typeof b.plO[e]+" have sound?"+typeof b.plO[e].sndO[c]);if(null==b.plO[e].sndO[c]){f.vprint("warn","stdplay["+e+"]["+c+"] X X X NOT INITIALIZED  X X X! have el?"+typeof a);var pa=Snap(a);if(t=la(pa,"gnlv-slot-eloop"))if(J=t.attr("gnlv-data"),mysvg=la(pa,"gnlv-svg"),f.vprint("snd","snd["+c+"]  data:"+
    42 J),(jsonO=f.parsejson(J))&&jsonO.transO&&jsonO.transO.sound){mysvg&&mysvg.attr&&(e=mysvg.attr("id"),jsonO.transO.sound.pl=e,a.setAttribute("apl",e));if(null==b.plO[e].sndO[c]){f.vprint("snd","snd["+e+"]["+c+"] NEW DATA  NEW DATA  NEW DATA,    -=> starting <=- ");b.start(jsonO.transO.sound);g-=.25;0>g&&(g=0);setTimeout(b.stdplay,250,a,c,e,h,g,k,z,C);return}f.vprint("snd","snd["+e+"]["+c+"] is OK ")}}"loaded"!=b.plO[e].sndO[c].state()&&0==g?f.vprint("warn","stdplay["+e+"]["+c+"] X X X not loaded!"):
    43 b.plO[e].sndO[c].do3d?f.vprint("snd","stdplay["+e+"]["+c+"] is 3d, no action!"):(b.plO[e].sndO[c].stop(),b.playID[t]&&clearTimeout(b.playID[t]),b.lastSnd[t]!=c&&b.plO[e].sndO[b.lastSnd[t]]&&b.plO[e].sndO[b.lastSnd[t]].stop(),b.lastSnd[t]=c,b.playID[t]=window.setTimeout(function(U,M,N){f.vprint("snd","stdplay["+e+"]["+t+"]["+c+"]PLAY, fadein?"+U.match(/(FadeIn)/)+" playmode:"+U+" ddd:"+M+" cur vol:"+N);b.playID[t]=!1;d==e&&(b.plO[e].sndO[c].play(),U.match(/(FadeIn)/)&&b.plO[e].sndO[c].fade(0,N,1E3*
    44 M))},1E3*g,h,H,oa),0<k&&(b.endID[t]=window.setTimeout(function(){f.vprint("snd","stdplay["+e+"]["+c+"]STOP");b.plO[e].sndO[c].stop()},1E3*k),h.match(/(FadeInOut)/)&&(b.fadeID[t]=window.setTimeout(function(U,M,N){f.vprint("snd","stdplay["+e+"]["+c+"]FADE "+N+" dur:"+M);d==e&&b.plO[e].sndO[c].fade(N,0,1E3*M)},1E3*(k-H),h,H,oa))))};var ma=function(a){var c=200,e=0,h=200;var g=document.getElementById(a);if(null==g)f.vprint("warn","gnlvPosById["+a+"] not found!");else{var k=g.getBoundingClientRect();var z=
    45 b.fov*Math.PI/180;var C=k.height;C=z*C/b.winh;c=b.trueh/Math.tan(C);isNaN(c)&&(c=-1E3);z*=b.aratio;curx=k.x+k.width/2-b.camxshift;z=f.d4(z*curx/b.winw);e=f.d4(c*Math.tan(z));h=f.d4(k.y);f.vprint("snd",vv?"":"gnlvPosById key["+a+"] hasPan?"+b.panO[a]+" found el?"+typeof g+" x:"+parseInt(k.x)+" truex,y:"+e+","+h+" theta:"+C+" phi:"+z+" dist(z):"+parseInt(c))}return{x:e,y:h,z:c,el:g}},ta=function(){for(key in b.panO)myp=ma(key),0<b.panO[key].indexOf(".")?b.plO[d].sndO[b.panO[key.split(".")[0]]].pos(myp.x+
    46 .5,myp.y+.5,myp.z,key.split(".")[1]):b.plO[d].sndO[b.panO[key]].pos(myp.x+.5,myp.y+.5,myp.z),f.vprint("snd","gnlvPanner["+d+"]: ["+key+"] xy:"+myp.x+","+myp.y)};this.setupPan=function(a,c,e,h){sound=b.plO[d].sndO[a];var g=null==h?sound.play():sound.play(h);f.vprint("snd","===setupPan=== set up panner on sound   -=["+a+"]=-   soundId   -=["+g+"]=- x:"+c+",y:"+e+" sprite?"+h);sound.once("play",function(){sound.pos(c+.5,e+.5,-.5,g);sound.volume(1,g);sound.pannerAttr({panningModel:"HRTF",refDistance:100,
    47 rolloffFactor:.5,distanceModel:"exponential"},g)}.bind(this),g);return null==h?a:a+"."+h};this.init()};
     7onend:"endEvent",onrepeat:"repeatEvent"};this.panningInterval=null;f.vprint("snd","   - =   gnlvSound loading   = - vpr:"+f.name);typeof Howl!="function"&&(f.vprint("warn","= = = =missing Howler! loading now"),jQuery.getScript(q.actionhost+"/js/howler.js/dist/howler.min.js",function(){f.vprint("snd","3 3 3 3 3 3 3 3 3 3 3 3  howler loaded DONE  3 3 3 3 3 3 3 3 3 3 3 3")}).done(function(){}));typeof window.jsmediatags!="function"&&(f.vprint("warn","= = = =missing window.jsmediatags! loading now"),
     8jQuery.getScript(q.actionhost+"/js/jsmediatags/dist/jsmediatags.min.js",function(){f.vprint("snd","3 3 3 3 3 3 3 3 3 3 3 3  jsmediatags loaded DONE  3 3 3 3 3 3 3 3 3 3 3 3")}));this.init=function(){f.vprint("snd","init sound");q.volel&&b.registerVol(q.volel);if(q.preload){f.vprint("snd","init - PRELOAD["+e+"]:"+q.preload);var a={enable:!0,snd:"tlmusic",pl:e,playmode:"continuous",do3d:!1,file:q.preload,usemode:"record"};q.preload=="none"?window.setTimeout(function(){jQuery.event.trigger({type:"readyplayerone",
     9message:"NO music to load, ready now",time:new Date})},500):b.preload(a)}};this.getMediaTags=function(a){f.vprint("snd","getMediaTags =START+ for:"+a);if(typeof eloop!="undefined"&&eloop.music&&window.jsmediatags){var c={artist:"unknown",album:"unknown",track:0,title:"unknown",fileLength:eloop.mp3length,genre:"unknown"};window.jsmediatags.read(a,{onSuccess:function(d){eloop.music.exturl=="none";if(d&&d.tags&&d.tags.comment&&d.tags.comment.text){var h=d.tags.comment.text.split(/\r\n/,1);h.length==
     101&&(eloop.music.exturl=h[0].replace(/URL:\s*/,""))}f.vprint("snd","getMediaTags returned:"+f.dumpvar(d));for(key in c)eloop.music[key]=d&&d.tags&&d.tags[key]?d.tags[key]:c[key];typeof SpotifyApi=="undefined"?f.vprint("warn","getMediaTags no spotify api!"):(SpotifyApi.thmb=eloop.thmb,SpotifyApi.updateCurTrack("normal",eloop.music))},onError:function(d){console.error("getMediaTags:"+f.dumpvar(d));for(key in c)eloop.music[key]=c[key];SpotifyApi.thmb=eloop.thmb;SpotifyApi.updateCurTrack("normal",eloop.music)}})}else f.vprint("warn",
     11"getMediaTags missing "+typeof window.jsmediatags+" or eloop missing!"+typeof eloop)};var K=function(a){return a?a-Y:(new Date).getTime()-Y},ha=function(a,c){f.vprint("error","ERROR X X sound["+a+"]:"+c)};this.resize=function(a){a?(b.winw=a.winw||1200,b.winh=a.winh||630,a.coordA&&b.plO[e]&&b.plO[e].volel&&(coordA.length==3&&coordA.pop(),b.plO[e].volel.transform("matrix(0.2 0 0 0.2 "+coordA.join(" ")+")"))):(b.winw=b.winw||1200,b.winh=b.winh||630);b.aratio=b.winw/b.winh;b.camxshift=b.winw/2;b.camx=
     120;b.camy=b.winh/2;b.camz=-20;f.vprint("snd","sound resize= = = = = win w h:"+b.winw+","+b.winh+" aratio:"+b.aratio)};b.resize(q);this.panO={};this.mute=function(){f.vprint("snd","= = = = = global MUTE Sound["+e+"] muteTrans?"+(b.muteTrans!=null)+" extra?"+(b.muteExtra!=null));Howler.mute(!0);for(var a in b.plO[e].sndO)b.plO[e].sndO[a].pause();b.muted=!0;b.metronomeID&&(window.clearInterval(b.metronomeID),b.metronomeID=null);b.beatWorkerID&&(window.clearInterval(b.beatWorkerID),b.beatWorkerID=null);
     13b.muteTrans!=null&&b.muteTrans(e);b.muteExtra!=null&&b.muteExtra()};this.play=function(){f.vprint("snd","= = = = = global PLAY Sound["+e+"] extra?"+(b.playExtra!=null));b.muted=!1;Howler.mute(!1);for(var a in b.plO[e].sndO)f.vprint("snd","= = = = =  PLAY["+e+"]["+a+"]"),b.plO[e].sndO[a].playmode!="none"&&b.plO[e].sndO[a].playmode=="continuous"&&b.plO[e].sndO[a].play();this.ana();b.playExtra!=null&&b.playExtra()};this.volume=function(a,c){f.vprint("snd","= = = = = volume Sound["+a+"] found?"+(b.plO[e]&&
     14b.plO[e].sndO[a])+" vol:"+c);b.plO[e]&&b.plO[e].sndO[a]&&b.plO[e].sndO[a].volume(parseFloat(c)/10)};this.global_vol=function(a){Howler.volume(a)};this.addVol=function(a){if(a==null)f.vprint("snd","sound addVol["+e+"] abort, missing parent obj!");else{var c=a.select("#vol_on_off"),d=!0;L(e);c&&(oldver=c.attr("data-ver"),oldver=oldver==null?0:parseFloat(oldver),f.vprint("snd","addVol["+e+"] sound  found existing vol el! ver:"+oldver),oldver<1.1?c.remove():d=!1);d&&(f.vprint("snd","addVol["+e+"] sound new volsprite and hide!"),
     15a.append(Snap.parse(b.volsprite)),c=a.select("#vol_on_off"),c.hasClass("gnlv-gone")||c.addClass("gnlv-gone"),b.plO[e].volState="vol_hidden");b.plO[e].volel=c;b.plO[e].voldomel=c.node;return c}};this.showVol=function(a){b.plO[e].volel&&b.plO[e].volel.attr&&typeof b.plO[e].volel.removeClass=="function"?(f.vprint("snd","showVol["+e+"] "+a+" have func?"+typeof b.plO[e].volel.removeClass),a==null||a==1?b.plO[e].volel.removeClass("gnlv-gone"):b.plO[e].volel.addClass("gnlv-gone")):f.vprint("warn","showVol["+
     16e+"] = = = found no vol element at:"+b.plO[e].volel)};this.registerVol=function(a){a=a?a:q.volel;a==null&&(a="#vol_on_off");var c=Snap.select(a);f.vprint("snd","registerVol["+e+"]found ["+a+"]?"+typeof c);L(e);c&&c.attr?(f.vprint("snd","registerVol["+e+"] found it:"+c.attr("id")+", have removeClass?"+typeof c.removeClass),b.plO[e].volel=c,b.plO[e].voldomel=c.node):f.vprint("warn","registerVol["+e+"] X X X found no vol element at:"+a)};this.toggleVol=function(a){var c;typeof a=="string"?b.plO[e].volState=
     17a=="vol_on"?"vol_off":"vol_on":typeof a=="object"&&(f.vprint("snd","toggleVol[ event:"+a+"]  nodeType?:"+a.nodeType+" id?"+a.id),newapl=a.getAttribute("data-target"),f.vprint("snd","toggleVol[ event:"+a+"]  playlist:"+newapl),L(newapl));b.plO[e].voldomel?c=b.plO[e].voldomel.getAttribute("id"):f.vprint("snd","toggleVol[ event:"+a+"] NO voldomel");b.plO[e].volState=="vol_on"?(b.plO[e].volState="vol_off",b.plO[e].voldomel.querySelector(".vol_on").style.display="none",b.plO[e].voldomel.querySelector(".vol_off").style.display=
     18"block",b.mute()):(b.needSetup&&(b.needSetup=!1,typeof gnlvScroll!="undefined"&&q.doScroll==1?(gnlvScroll.doSetup(),typeof eloop!="undefined"&&eloop.ani_state=="running"&&eloop.mkVidtimer()):f.vprint("warn","toggleVol X X X sound had flag for doSetup but no gnlvScroll defined!"+typeof gnlvScroll+" or flagged to skip:"+q.doScroll)),b.plO[e].volState="vol_on",b.plO[e].voldomel.querySelector(".vol_on").style.display="block",b.plO[e].voldomel.querySelector(".vol_off").style.display="none",typeof eloop!=
     19"undefined"&&eloop.music&&eloop.music.muzvidlink==1&&b.restart(eloop.anielapsed()),b.play());typeof gnlvScroll!="undefined"&&gnlvScroll.changeDiv(e,b.plO[e].volState);f.vprint("snd","toggleVol[cur:"+e+"]["+c+"]:"+b.plO[e].volState)};this.getVolState=function(){L(e);return b.plO[e].volState};this.volColor=function(){var a=W?"#FFFFFF":"#000000";W=!W;b.plO[e].volel.attr({fill:a})};this.volMarquee=function(a,c,d){zmq=b.plO[e].volel.select("#track_marquee");c!="auto"?zmq!=null&&zmq.remove():(f.vprint("snd",
     20"= = = = = = = volMarquee marquee mode:"+c+" volel:"+b.plO[e].volel.attr("id")+" marquee el?"+zmq+" track info:"+d),zmq==null?(f.vprint("snd","= = = = = = = volMarquee inserted marquee"),b.plO[e].volel.append(Snap.parse(a.replace(/CONTENT/,d))),zmq=b.plO[e].volel.select("#track_marquee"),mycirc=b.plO[e].volel.select("circle"),mycirc.before(zmq)):zmq.select("textPath").node.innerHTML=d)};var L=function(a,c){a=="notset"&&(a="default");f.vprint("snd","changeapl mode:"+c+" playlist "+e+" -> "+a);a==e&&
     21c!="create"&&b.plO[a]!=null?f.vprint("snd","changeapl noop, playlist  same! "+a):a==null||b.plO[a]==null||c=="create"?(f.vprint("snd","changeapl X X X X INIT X X X X   apl["+a+"]  not initialised? >"+b.plO[a]+"< or  mode create?"+c),e=a,b.plO[e]={},b.plO[e].sndO={},b.plO[e].volState="vol_hidden"):(f.vprint("snd","changeapl, new playlist! ["+e+"]volState"+b.plO[e].volState),b.plO[e].volState=="vol_on"&&b.toggleVol("vol_off"),e=a,typeof gnlvScroll!="undefined"&&gnlvScroll.changeDiv(e,b.plO[e].volState))};
     22this.radio=function(a){b.start({enable:!0,snd:"myradio",file:a,format:["mp3","aac"],do3d:!1,playmode:"normal"})};this.ana=function(a){if(a!=null&&(x=a,f.vprint("snd","ana MODE CHANGE:"+x+" muted?"+b.muted+" save for later"),b.muted))return;x=="off"?p&&(p.clearRect(0,0,A,B),p.fillStyle="red",p.fillRect(0,0,A,B)):r==null&&(f.vprint("snd","ana -------------------------------------------------- CREATE --------------------------------------------------Analyser:"+x+" bins:"+b.numfreqbins),r=Howler.ctx.createAnalyser(),
     23r.maxDecibels=-20,r.fftSize=b.numfreqbins*2,x==="onbeat"?(a=Howler.ctx.createBiquadFilter(),a.type="lowpass",Howler.masterGain.connect(a),a.connect(r),f.vprint("snd","ana   LOWPASS FILTER ADDED")):Howler.masterGain.connect(r),G&&(A=G.width,B=G.height),fa=Y=(new Date).getTime());x==="headless"?(this.bufferLength=D=r.frequencyBinCount,this.dataArray=new Uint8Array(this.bufferLength),this.timeArray=new Uint8Array(this.bufferLength)):x==="onbeat"?(this.bufferLength=D=r.frequencyBinCount,this.dataArray=
     24new Uint8Array(this.bufferLength),this.timeArray=new Uint8Array(this.bufferLength),f.vprint("snd","start beatWorker at interval:10"),b.beatWorkerID&&window.clearInterval(b.beatWorkerID),b.beatWorkerID=window.setInterval(qa,10),f.vprint("snd","start metronome at period - - - - - - - - - - - :"+u),b.metronomeID&&window.clearInterval(b.metronomeID),b.metronomeID=window.setTimeout(ia,u)):x==="sinewave"?(D=r.frequencyBinCount,Q=new Uint8Array(D),r.getByteTimeDomainData(Q),ja()):x=="frequencybars"&&(D=
     25R=r.frequencyBinCount,Z=new Uint8Array(R),p.clearRect(0,0,A,B),ka());f.vprint("snd","ana DONE anaMode [ "+x+" ]  num bins:"+D+" - - - - - - - - - - - -  - - - - - --  - - - - - --  -- - ");f.vprint("snd","ana DONE  - - - - - - - - - - - -  - - - - - --  - - - - - --  -- - ")};this.getAna=function(){if(r==null||x=="off"||b.muted)return null;r.getByteFrequencyData(this.dataArray);r.getByteTimeDomainData(this.timeArray);return{data:{freq:this.dataArray,time:this.timeArray,metro:(K()-E)/u,size:this.bufferLength}}};
     26var qa=function(){r.getByteFrequencyData(b.dataArray);var a=b.dataArray,c=b.bufferLength;da++;ca=((new Date).getTime()-fa)/da;var d=[],h,g=0,k=0,z=0,C=0,H=0;for(h=0;h<c;h++)d[h]=f.setVal(a[h]/255,0,0,1,f.setValMode.LIMIT),H=Math.max(H,d[h]),g+=d[h],h<3?C+=d[h]:h<6?z+=d[h]:k+=d[h];m.ave=g/c;m.max=H;m.bass=C/3;m.mid=z/3;m.treb=k/3;aa=!1;m.prevh2&&m.bass<m.prevh&&m.prevh<m.prevh2&&ba==1&&(ba=!1,aa=!0,F=100*m.prevh2,a={bar:F,ts:m.prevt2},F<O?T(a,"cyan"):(n.push(a),O=(3*O+(F-10))/4));m.bass>m.prevh&&m.prevh>
     27m.prevh2&&(ba=!0);m.prevh2=m.prevh;m.prevt2=m.prevt;m.prevh=m.bass;m.prevt=K()},ia=function(){E=K();T({ts:E,bar:X},"black");f.vprint("snd",vv?"":"metronome - - - - - - - - - - - TICK at["+E+"] period:"+u+" beat:"+n.length);$.event.trigger({type:"beat",keyoff:"bass",time:new Date});if(ea--<0){ea=3;var a=(new Date).getTime();f.vprint("snd",vv?"":"metronome evalBeats - START -  period:"+u+" num beats:"+n.length);n.length==0&&(O*=.5);var c=99999999999999;b.doplots&&(v=V/10-S,plotw=(K(a)-V)/10,l.fillStyle=
     28P?"yellow":"orange",l.fillRect(v,0,plotw,5+5*P));V=K(a);P=!P;if(n.length>0){for(var d=0;d<n.length;d++){var h=X-n[d].bar;h=h<0?0:h*h;var g=E-n[d].ts;g*=g;h=g+h;d>0&&(g=n[d].ts-n[d-1].ts,g=Math.round(g/10)*10,w[g]=w[g]==null?1:w[g]+1);d>1&&(g=n[d].ts-n[d-2].ts,g=Math.round(g/10)*10,w[g]=w[g]==null?1:w[g]+1);d>2&&(g=n[d].ts-n[d-3].ts,g=Math.round(g/10)*10,w[g]=w[g]==null?1:w[g]+1);if(h<c){var k=d;c=h}T(n[d],"sand")}T(n[k],"red");X=n[k].bar;f.vprint("snd",vv?"":"metronome evalBeats histO:"+f.dumpvar(w));
     29g=ra(w);k="nada";f.vprint("snd",vv?"":"metronome evalBeats gotback:"+f.dumpvar(g));g&&g.length>1&&(g=g.sort(sa),u=Math.round(60/g[0].tempo*1E3),k=g[0].tempo);c=u-(E-n[n.length-1].ts);I=u;u=c;f.vprint("snd",vv?"":"metronome evalBeats best:"+k+"->[ "+I+" ] THIS delay:"+u+" DUMP tempos:"+g);b.doplots&&(v=n[n.length-1].ts/10-S,plotw=I/10,l.fillStyle="green",l.fillRect(v,16,plotw,2));n.length=0;f.vprint("snd",vv?"":"metronome evalBeats DONE for["+E+"]: took:"+((new Date).getTime()-a))}}b.metronomeID&&
     30window.clearInterval(b.metronomeID);b.metronomeID=window.setTimeout(ia,u);I!=null&&(u=I,I=null)},sa=function(a,c){let d=0;a.count<c.count?d=1:a.count>c.count&&(d=-1);return d},ra=function(a){var c,d=[];for(c in a){var h=a[c];var g=60/(c/1E3);g=Math.round(g);if(g===0)return;for(;g<90;)g*=2;for(;g>180;)g/=2;g=Math.round(g);d.some(function(k){if(k.tempo===g)return k.count+=h})||d.push({tempo:g,count:h})}return d},T=function(a,c){b.doplots&&(v=a.ts/10-S,ploty=c=="black"?0:15,ploth=c=="black"?a.bar:a.bar-
     3115,l.fillStyle=c,l.fillRect(v,ploty,1,ploth),v>y.width&&(S+=y.width,l.fillStyle="white",l.fillRect(1,1,y.width-2,y.height-2)))},ka=function(){b.muted||(drawVisual=requestAnimationFrame(ka));r.getByteFrequencyData(Z);p.fillStyle="rgb(0, 0, 0)";p.fillRect(0,0,A,B);for(var a=A/R,c,d=0,h=0;h<R;h++)c=Z[h],p.fillStyle="rgb("+(c+100)+",50,50)",p.fillRect(d,B-c,a,c),d+=a+1;aa?(pnbpix=333/17,l.fillStyle="rgb(200,200,0)",l.fillRect(v,F-1,pnbpix,1),l.fillStyle=beatStyle):(F=10,l.fillStyle="rgb(50,50,50)");l.fillRect(v,
     320,1,F);l.fillStyle="rgb(200, 200, 200)";l.fillRect(10,25,250,35);l.fillStyle="rgb(0,0,0)";l.fillText("cps:"+Math.round(ca)+" pbp:333",10,50);v+=1;v>y.width&&(v=0,l.fillStyle="white",l.fillRect(1,1,y.width-2,y.height-2))},ja=function(){b.muted||requestAnimationFrame(ja);r.getByteTimeDomainData(Q);p.fillStyle="rgb(200, 200, 200)";p.fillRect(0,0,A,B);p.lineWidth=2;p.strokeStyle="rgb(0, 0, 0)";p.beginPath();for(var a=A*1/D,c=0,d=0;d<D;d++){var h=Q[d]/128*B/2;d===0?p.moveTo(c,h):p.lineTo(c,h);c+=a}p.lineTo(A,
     33B/2);p.stroke()};this.restart=function(a,c){f.vprint("snd","= = restart all or key?"+c+" timepos:"+a);if(b.plO[e]!=null)if(a==null&&(a=0),c!=null)b.plO[e].sndO[c].seek(a);else for(c in b.plO[e].sndO)b.plO[e].sndO[c].seek(a)};var la=function(a,c){var d=0;for(a==null||a.attr("id")==null||a.attr("id");a!=null&&a.parent()!=null&&!a.hasClass(c);){a=a.parent();var h=a==null?"nada":a.attr("id")==null?"nada":a.attr("id");f.vprint("snd",">>>>> findParent bubble["+d+"]:fromhere id:"+h+":");if(a.hasClass(c))return a;
     34d++}return null};this.preload=function(a){f.vprint("snd","=preload("+a.file+","+a.snd+","+a.pl+"):");a.preloading=!0;b.start(a)};this.start=function(a){e=a.pl==null?"default":a.pl;L(e);f.vprint("snd","= = = = = gnvlSound.START["+e+"],  eloop?"+typeof eloop+":");b.plO[e]==null?f.vprint("snd","= = = = = X X X playlist[ "+e+" ] mia"):f.vprint("snd","= = = = =  cur volel?"+typeof b.plO[e].volel+", param vol?"+typeof a.volel+" sndO:"+b.plO[e].sndO);a.snd==null&&(a.snd="tlmusic");a.volel&&(b.plO[e].volel=
     35a.volel,b.plO[e].voldomel=a.volel.node,delete a.volel);f.vprint("snd","= = = = =  final ["+e+"]volel?"+typeof b.plO[e].volel+":");typeof b.plO[e].volel=="undefined"&&b.registerVol();b.plO[e].volState=="vol_hidden"&&(a.usemode=="idle2play"?b.plO[e].volel.removeClass("gnlv-gone"):(typeof eloop=="undefined"||eloop.version!="stub")&&b.plO[e].volel.removeClass("gnlv-gone"),a.preloading&&a.usemode!="idle2play"||b.toggleVol("vol_off"));if(a.enable){a.file==null?a.file=b.sndLibO[a.snd]:b.sndLibO[a.snd]&&
     36a.file!=b.sndLibO[a.snd]&&(f.vprint("snd","= detect sound file change:"+a.file+"->"+b.sndLibO[a.snd]),a.file=b.sndLibO[a.snd]);f.vprint("snd","= = = = = CREATE Sound["+a.snd+"] params:"+a);var c=a.playmode=="continuous"?!0:!1;this.plO[e].sndO[a.snd]!=null&&(f.vprint("snd","= old sound existed same? false :old:"+this.plO[e].sndO[a.snd].src+" new:"+a.file),f.vprint("snd","= unload old sound:"+a.snd),this.plO[e].sndO[a.snd].unload());c={src:[a.file],loop:c,autoplay:!1,preload:!0,onloaderror:ha,onplayerror:ha};
     37a.volume&&(c.volume=parseFloat(a.volume)/10);a.format&&(c.format=a.format);a.do3d&&(c.do3d=a.do3d);a.html5&&(c.html5=a.html5,f.vprint("snd","X X looks like html5? "+a.html5+" NO ANALYZER"));a.file.match(/\.[a-zA-Z0-9]{3}$/)||(f.vprint("snd","no extension guess = AUTOFORMAT mp3"),c.format=["mp3"]);f.vprint("snd","MADE snd["+e+"]["+a.snd+"]="+a.file);this.plO[e].sndO[a.snd]=new Howl(c);a.do3d&&(this.plO[e].sndO[a.snd].do3d=a.do3d);a.playmode&&(this.plO[e].sndO[a.snd].playmode=a.playmode);this.plO[e].sndO[a.snd].src=
     38a.file;this.plO[e].sndO[a.snd].once("load",function(d,h){f.vprint("snd","LOAD DONE:sound tag:"+a.snd+" arg1"+d+" arg2:"+h);a.snd=="tlmusic"&&a.preloading&&jQuery.event.trigger({type:"readyplayerone",message:"tlmusic is ready for action",time:new Date})});f.vprint("snd","have audiocontext:"+Howler.ctx);if(a.do3d)b.panO[a.ani]=b.setupPan(a.snd,0,0),b.panningInterval==null&&a.ani!="autoset"?(f.vprint("snd","= = = = = START Panner Interval= = = = = CAMERA["+a.ani+"]              C  A  M  E  R  A           xyz: "+
     39this.camx+","+this.camy+","+this.camz),Howler.pos(this.camx,this.camy,this.camz),b.panningInterval=window.setInterval(ta,100)):f.vprint("snd","= = = X X skip Panner Interval, already there,  panO:"+Object.keys(b.panO)+" or bad id:"+a.ani);else if(a.playmode.match(/^on/))for(playmodeA=a.playmode.split(/,/),f.vprint("alert","= = = = = EVENT LISTENER MODE RETIRED  = = = : "+a.playmode+" : split:"+playmodeA.length+" for "+a.ani),ii=0;ii<playmodeA.length;ii++)myp=ma(a.ani),anelA=myp.el.querySelectorAll("animateTransform"),
     40anmtA=myp.el.querySelectorAll("*[id^=anmt_]"),f.vprint("snd",vv?"":"on-event= = = = = found num animateTransform       A N I    T R A N S         :"+anelA.length+" num id anmt:"+anmtA.length),anelA.length>0?anel=anelA[0]:anmtA.length>0&&(anel=anmtA[0]),playmodeA[ii].match(/(mouse|click|focus)/)&&(anel=myp.el),anel.removeEventListener(b.eventMapO[playmodeA[ii]],na),anel.addEventListener(b.eventMapO[playmodeA[ii]],na.bind({mysound:b.plO[e].sndO[a.snd]}));else f.vprint("snd","= = = = = non-3d sound autoplay skip")}};
     41var na=function(a){console.log("i repeated:"+a.detail+" mysound:"+typeof this.mysound);this.mysound.play()};this.stdplay=function(a,c,d,h,g,k,z,C){if(a&&a.getAttribute){var H=a.getAttribute("ddd");a.getAttribute("ppp");var J=a.getAttribute("apl");var t=a.getAttribute("slot");var oa=parseFloat(a.getAttribute("vol"))/10}else f.vprint("warn","stdplay["+d+"]["+c+"] X X X have no el?"+typeof a);if(d==null||d=="null")d=J!=null?J:e;f.vprint("snd","stdplay[apl:"+e+" myapl:"+d+" aaa:"+J+"]["+c+"] Tfrom:"+
     42g+" to:"+k+" have apl?"+typeof b.plO[d]+" have sound?"+typeof b.plO[d].sndO[c]);if(b.plO[d].sndO[c]==null){f.vprint("warn","stdplay["+d+"]["+c+"] X X X NOT INITIALIZED  X X X! have el?"+typeof a);var pa=Snap(a);if(t=la(pa,"gnlv-slot-eloop"))if(J=t.attr("gnlv-data"),mysvg=la(pa,"gnlv-svg"),f.vprint("snd","snd["+c+"]  data:"+J),(jsonO=f.parsejson(J))&&jsonO.transO&&jsonO.transO.sound){mysvg&&mysvg.attr&&(d=mysvg.attr("id"),jsonO.transO.sound.pl=d,a.setAttribute("apl",d));if(b.plO[d].sndO[c]==null){f.vprint("snd",
     43"snd["+d+"]["+c+"] NEW DATA  NEW DATA  NEW DATA,    -=> starting <=- ");b.start(jsonO.transO.sound);g-=.25;g<0&&(g=0);setTimeout(b.stdplay,250,a,c,d,h,g,k,z,C);return}f.vprint("snd","snd["+d+"]["+c+"] is OK ")}}b.plO[d].sndO[c].state()!="loaded"&&g==0?f.vprint("warn","stdplay["+d+"]["+c+"] X X X not loaded!"):b.plO[d].sndO[c].do3d?f.vprint("snd","stdplay["+d+"]["+c+"] is 3d, no action!"):(b.plO[d].sndO[c].stop(),b.playID[t]&&clearTimeout(b.playID[t]),b.lastSnd[t]!=c&&b.plO[d].sndO[b.lastSnd[t]]&&
     44b.plO[d].sndO[b.lastSnd[t]].stop(),b.lastSnd[t]=c,b.playID[t]=window.setTimeout(function(U,M,N){f.vprint("snd","stdplay["+d+"]["+t+"]["+c+"]PLAY, fadein?"+U.match(/(FadeIn)/)+" playmode:"+U+" ddd:"+M+" cur vol:"+N);b.playID[t]=!1;e==d&&(b.plO[d].sndO[c].play(),U.match(/(FadeIn)/)&&b.plO[d].sndO[c].fade(0,N,M*1E3))},g*1E3,h,H,oa),k>0&&(b.endID[t]=window.setTimeout(function(){f.vprint("snd","stdplay["+d+"]["+c+"]STOP");b.plO[d].sndO[c].stop()},k*1E3),h.match(/(FadeInOut)/)&&(b.fadeID[t]=window.setTimeout(function(U,
     45M,N){f.vprint("snd","stdplay["+d+"]["+c+"]FADE "+N+" dur:"+M);e==d&&b.plO[d].sndO[c].fade(N,0,M*1E3)},(k-H)*1E3,h,H,oa))))};var ma=function(a){var c=200,d=0,h=200;var g=document.getElementById(a);if(g==null)f.vprint("warn","gnlvPosById["+a+"] not found!");else{var k=g.getBoundingClientRect();var z=b.fov*Math.PI/180;var C=k.height;C=z*C/b.winh;c=b.trueh/Math.tan(C);isNaN(c)&&(c=-1E3);z*=b.aratio;curx=k.x+k.width/2-b.camxshift;z=f.d4(z*curx/b.winw);d=f.d4(c*Math.tan(z));h=f.d4(k.y);f.vprint("snd",vv?
     46"":"gnlvPosById key["+a+"] hasPan?"+b.panO[a]+" found el?"+typeof g+" x:"+parseInt(k.x)+" truex,y:"+d+","+h+" theta:"+C+" phi:"+z+" dist(z):"+parseInt(c))}return{x:d,y:h,z:c,el:g}},ta=function(){for(key in b.panO)myp=ma(key),b.panO[key].indexOf(".")>0?b.plO[e].sndO[b.panO[key.split(".")[0]]].pos(myp.x+.5,myp.y+.5,myp.z,key.split(".")[1]):b.plO[e].sndO[b.panO[key]].pos(myp.x+.5,myp.y+.5,myp.z),f.vprint("snd","gnlvPanner["+e+"]: ["+key+"] xy:"+myp.x+","+myp.y)};this.setupPan=function(a,c,d,h){sound=
     47b.plO[e].sndO[a];var g=h==null?sound.play():sound.play(h);f.vprint("snd","===setupPan=== set up panner on sound   -=["+a+"]=-   soundId   -=["+g+"]=- x:"+c+",y:"+d+" sprite?"+h);sound.once("play",function(){sound.pos(c+.5,d+.5,-.5,g);sound.volume(1,g);sound.pannerAttr({panningModel:"HRTF",refDistance:100,rolloffFactor:.5,distanceModel:"exponential"},g)}.bind(this),g);return h==null?a:a+"."+h};this.init()};
  • genolve-toolkit/trunk/readme.txt

    r3135668 r3202739  
    44Tags: AI image, AI video, Midjourney, DALLE, Sora, ChatGPT, Veo, slider
    55Requires at least: 5.0
    6 Tested up to: 6.6.1
    7 Stable tag: 5.0.0
     6Tested up to: 6.7.1
     7Stable tag: 5.0.1
    88Requires PHP: 5.2.4
    99License: GPLv2 or later
     
    1313
    1414== Description ==
    15 Supply a single phrase and Genolve automatically generates a complete video or slideshow with eye-catching animations and music track. The fonts are perfect, the colors match and the images are generated specifically for your purpose. AI Image generation can be accessed right from the Gutenberg Image block and has prompt history, prompt suggestions, preset styles, inpainting, variations and aspect ratio. **Free AI image credits** when you [make a Tweet]( https://www.genolve.com/svg/en/genolve-wordpress-plugin-premium.php#freeaicredits).  After activating, auto-install the API key and you're all set.
     15Supply a single phrase and Genolve automatically generates a complete video or slideshow with eye-catching animations and music track. If you already have an audio track, supply the MP3 to generate a matching video. The fonts are perfect, the colors match and the images are generated specifically for your purpose. AI Image generation can be accessed right from the Gutenberg Image block and has prompt history, prompt suggestions, preset styles, inpainting, variations and aspect ratio. **Free AI image credits** when you [make a Tweet]( https://www.genolve.com/svg/en/genolve-wordpress-plugin-premium.php#freeaicredits).  After activating, auto-install the API key and you're all set.
    1616 
    1717### All Your Favorite AI Image Models 
     
    1919
    2020### AI Video Generators Coming Soon 
    21 You'll have AI video generators from OpenAI's news-headlining **Sora** and Google is also turning heads with its text-to-video generation model **Veo**.  Midjourney, the most famous image generator, is also trying their hand at video generation. None of these models have yet been released for public access. Most models are expected to come on-line in November after US elections. To test how a video might look in your design, use stock video provider Pixabay.
     21You'll have AI video generators from OpenAI's news-headlining **Sora** and Google is also turning heads with its text-to-video generation model **Veo**.  Midjourney, the most famous image generator, is also trying their hand at video generation. None of these models have yet been released for public access. To test how a video might look in your design, use stock video provider Pixabay.
    2222
    2323
    2424= AI Features =
    25 * **AI Assisted Design** - Generate ready-to-go videos or graphics from from a single phrase.
     25* **Text 2 Video** - Generate ready-to-go videos from a single phrase.
     26* **Audio 2 Video** - Make an instant music video from an MP3 or make video backgrounds for a podcast simply by supplying the audio.
    2627* **Image Generation** - Generate AI images from a prompt, use preset styles to refine it. ChatGPT automatically suggests a better prompt.
    2728* **Out Painting** - Easily expand the crop on AI generated images as well as your own images in the media library.
     
    109110== Changelog ==
    110111
     112= 5.0.1 =
     113* AI generates background video from MP3 input, e.g. make a video for your NotebookLM podcast.
     114
    111115= 5.0.0 =
    112116* AI assisted design makes your graphic or video from a single phrase.
Note: See TracChangeset for help on using the changeset viewer.