Changeset 3202739
- Timestamp:
- 12/05/2024 03:20:57 AM (16 months ago)
- Location:
- genolve-toolkit
- Files:
-
- 6 edited
-
assets/banner-1544x500.jpg (modified) (previous)
-
assets/banner-772x250.jpg (modified) (previous)
-
trunk/genolve-toolkit.php (modified) (1 diff)
-
trunk/inc/functions.php (modified) (1 diff)
-
trunk/js/genolve-sound.js (modified) (1 diff)
-
trunk/readme.txt (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
genolve-toolkit/trunk/genolve-toolkit.php
r3135668 r3202739 2 2 /* 3 3 * Plugin Name: Genolve AI image AI video generator 4 * Version: 5.0. 04 * Version: 5.0.1 5 5 * Plugin URI: https://www.genolve.com/ 6 6 * 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 21 21 define( 'GENOLVE_ACTION_URL', 'https://www.genolve.com/'); 22 22 define( 'GENOLVE_JS_URL', 'https://www.genolve.com/js/' ); 23 define( 'GENOLVE_VER', '-5.0. 0' );23 define( 'GENOLVE_VER', '-5.0.1' ); 24 24 25 25 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -
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>';1 var 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= 2 0,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", 3 LOWNORM:"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= 4 d;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>'; 6 6 this.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()};7 onend:"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"), 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["+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", 9 message:"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== 10 1&&(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= 12 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["+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); 13 b.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]&& 14 b.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!"), 15 a.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["+ 16 e+"] = = = 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= 17 a=="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&& 21 c!="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))}; 22 this.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(), 23 r.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= 24 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 - - - - - - - - - - - :"+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= 25 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(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}}}; 26 var 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> 27 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(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= 28 P?"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)); 29 g=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&& 30 window.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- 31 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,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, 32 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);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, 33 B/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; 34 d++}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= 35 a.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]&& 36 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=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}; 37 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["+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= 38 a.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: "+ 39 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","= = = = = 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"), 40 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),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")}}; 41 var 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:"+ 42 g+" 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]]&& 44 b.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, 45 M,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= 47 b.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 4 4 Tags: AI image, AI video, Midjourney, DALLE, Sora, ChatGPT, Veo, slider 5 5 Requires at least: 5.0 6 Tested up to: 6. 6.17 Stable tag: 5.0. 06 Tested up to: 6.7.1 7 Stable tag: 5.0.1 8 8 Requires PHP: 5.2.4 9 9 License: GPLv2 or later … … 13 13 14 14 == 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.15 Supply 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. 16 16 17 17 ### All Your Favorite AI Image Models … … 19 19 20 20 ### 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.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. To test how a video might look in your design, use stock video provider Pixabay. 22 22 23 23 24 24 = 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. 26 27 * **Image Generation** - Generate AI images from a prompt, use preset styles to refine it. ChatGPT automatically suggests a better prompt. 27 28 * **Out Painting** - Easily expand the crop on AI generated images as well as your own images in the media library. … … 109 110 == Changelog == 110 111 112 = 5.0.1 = 113 * AI generates background video from MP3 input, e.g. make a video for your NotebookLM podcast. 114 111 115 = 5.0.0 = 112 116 * AI assisted design makes your graphic or video from a single phrase.
Note: See TracChangeset
for help on using the changeset viewer.