1"use strict";(self.webpackChunkfmod_com=self.webpackChunkfmod_com||[]).push([[467],{9175(e,t,r){r.r(t),r.d(t,{default:()=>d});var s=r(6540),n=r(7830),i=r(9125),a=r(3253),l=r(3106),o=r(1808),c=r(6682);class d extends s.Component{constructor(e){super(e),this.state={token:null,userid:null,username:null,loggedin:null,loggedin_msg:null,tabs:[],downloadData:{}},this.updateUser=this.updateUser.bind(this),this.loadData=this.loadData.bind(this)}updateUser(){this.setState({token:localStorage.getItem("current_session"),userid:localStorage.getItem("current_userid"),username:localStorage.getItem("current_username"),loggedin:!!localStorage.getItem("current_session")})}loadData(){var e=this;if(this.state.token){e.setState({downloadData:{}});var t=new XMLHttpRequest;t.open("GET",(0,c.serverUrl)("/api-downloads"),!0),t.setRequestHeader("Authorization","FMOD "+this.state.token),t.onload=function(r){var s=JSON.parse(this.response);if(s){if(t.status==a.hB)return e.setState({downloadData:{},token:null,userid:null,username:null,loggedin:!1,loggedin_msg:"Session Expired"}),void o.A.handleLogout();e.setState({downloadData:s})}},t.send()}}componentWillMount(){var e=this;setTimeout(function(){e.updateUser(),e.loadData()},50)}componentWillReceiveProps(){var e=this;setTimeout(function(){e.updateUser(),e.state.loggedin?e.state.downloadData.downloads&&e.state.downloadData.downloads.categories&&e.state.downloadData.downloads.categories.length||e.loadData():e.setState({downloadData:{}})},50)}render(){var e=this;let t=e.state.loggedin_msg?" ("+e.state.loggedin_msg+")":null,r=s.createElement("div",{className:"my-5"},s.createElement("div",{className:"alert alert-primary",role:"alert"},"Please ",s.createElement(n.A,{to:{pathname:"/login",state:{from:this.props.location}},className:"link-primary"},"sign in")," in to view downloads.",t));if(e.state.loggedin)if(e.state.downloadData.downloads){let t=[],i=null;if(e.state.downloadData.warnings){let r=0;
1e.state.downloadData.warnings.forEach(function(e){t.push(s.createElement("div",{key:"dl_msg_"+r,className:"alert alert-warning"},s.createElement("span",{className:"font-weight-bold"},"Note! "),s.createElement("span",{dangerouslySetInnerHTML:{__html:e}}))),r++}),i=s.createElement("div",{id:"projectwarning"},t)}r=s.createElement("div",null,s.createElement("p",{className:"lead"},"Select a product category to view the available downloads."),s.createElement("p",{className:"text-muted"},"Interested in version numbers or console access? (",s.createElement(n.A,{to:"/about-versions"},"Version FAQ"),")"),i,s.createElement("div",{className:"my-3"},s.createElement(u,{downloads:e.state.downloadData,token:e.state.token,userid:e.state.userid})))}else r=s.createElement("div",{className:"my-5 text-center"},s.createElement("div",{className:"spinner-border",role:"status",style:{width:"3rem",height:"3rem"}},s.createElement("span",{className:"sr-only"},"Loading...")));return s.createElement("div",null,s.createElement(i.Ay,{title:"FMOD Download"},s.createElement("link",{rel:"canonical",href:"https://www.fmod.com"+this.props.location.pathname})),s.createElement("div",{className:"container my-5"},s.createElement("h1",{className:"display-3"},"Download FMOD"),r))}}class u extends s.Component{constructor(){super(...arguments),this.state={token:this.props.token,userid:this.props.userid}}render(){var e=this,t=[];return e.props.downloads.downloads.categories.forEach(function(r){const n=r.title.toLowerCase().replace(/ /g,"");t.push(s.createElement(p,{category:r,key:"category_"+n,hash:n,prefix:"download",categories:e,token:e.state.token,userid:e.state.userid}))}),t}}class p extends s.Component{constructor(){super(...arguments),this.state={token:this.props.token,userid:this.props.userid}}render(){for(var e=this,t=[],r=0;r<this.props.category.products.length;r++){let n=this.props.category.products[r];n.versions.some(function(e){return new Array(e.platforms).length>0})&&t.push(s.createElement(m,{product:n,key:n.title,token:e.state.token,userid:e.state.userid,category:e})),this.props.category.products.length>1&&r<this.props.category.products.length-1&&t.push(s.createElement("br",{key:n.title+"_break"}))}if("Plug-ins"==e.props.category.title){let r={force_note:!1,platform_note:" ",product_note:'trueSpatial is a plugin suite for interactive spatial audio processing, including a spatializer, binaural engine, and ambisonics rendering. <a href="https://atmoky.com/products/true-spatial/">Download and Documentation</a>.',title:"atmoky trueSpatial",versions:[{title:"1.00.00",version:"1.00.00",version_note:"",platforms:[]}]};t.push(s.createElement(m,{product:r,key:r.title,token:e.state.token,userid:e.state.userid,category:e}))}let n=null;return this.props.category.products[0].product_note&&(n=this.props.category.products[0].product_note,n=n.substr(0,n.indexOf("|"))),s.createElement(l.A,{id:e.props.hash,title:e.props.category.title,description:n,isHeading:!0},t)}}class m extends s.Component{constructor(){super(...arguments);var e="2.03",t="2.04";this.state={token:this.props.token,userid:this.props.userid,middleVersion:e+".00",topVersion:t+".00",currentFilterStart:"",currentFilterEnd:"",currentVersion:null,filterMode:"exclude",filterTextA:null,filterTextB:null,platformFilterFunc:null,versionFilterFunc:null,sortedVersions:[]},this.state.currentFilterStart=this.state.topVersion,this.state.currentFilterEnd="9.99.99";var r="?version=";if(window.location.search.indexOf(r)>=0){var s=window.location.search.substr(9);0==s.indexOf(e)?(this.state.currentFilterStart=this.state.middleVersion,this.state.currentFilterEnd=this.state.topVersion):0==s.indexOf(t)?(this.state.currentFilterStart=this.state.topVersion,this.state.currentFilterEnd="9.99.99"):s.indexOf(t)<0&&(this.state.currentFilterStart="0.00.00",this.state.currentFilterEnd=this.state.middleVersion),this.state.currentVersion=4==s.length?null:s}if(this.isFMODProduct(["FMOD for Unreal"]))this.state.filterTextA="UE5",this.state.filterTextB="UE4",this.state.platformFilterFunc=function(e){return!(!e.file_comment||0!=e.file_comment.indexOf("4."))};else if(this.isFMODProduct(["FMOD Studio","FMOD for Unity"])){var n=this;this.state.filterTextA="All",this.state.filterTextB="Unity Verified",this.state.ver
1sionFilterFunc=function(e){return n.isVersionUnityVerified(e)},this.isFMODProduct(["FMOD for Unity"])&&(this.state.filterMode="include")}this.changeVersionFilter=this.changeVersionFilter.bind(this),this.changeFilterMode=this.changeFilterMode.bind(this),this.containsVersionFilter=this.containsVersionFilter.bind(this),this.containsPlatformFilter=this.containsPlatformFilter.bind(this),this.isFMODProduct=this.isFMODProduct.bind(this)}versionChange(e){this.setState({currentVersion:e.target.value})}changeFilterMode(e){this.setState({filterMode:e}),this.state.versionFilterFunc&&"include"==e&&!this.state.versionFilterFunc(this.state.currentVersion)&&this.changeVersionFilter(this.state.currentFilterStart,this.state.currentFilterEnd,!0,e)}containsVersionFilter(){var e=this,t=e.props.product.versions,r=e.state.currentVersion.substr(0,4);if(!e.state.versionFilterFunc)return!1;for(let s=0;s<t.length;s++){let n=t[s];if(e.state.versionFilterFunc&&n.version.substr(0,4)==r&&e.state.versionFilterFunc(n.version))return!0}return!1}containsPlatformFilter(){var e=this,t=e.props.product.versions;if(!e.state.platformFilterFunc)return!1;for(let r=0;r<t.length;r++){let s=t[r];if(e.state.platformFilterFunc&&s.version==e.state.currentVersion)for(let t=0;t<s.platforms.length;t++){let r=s.platforms[t];if(e.state.platformFilterFunc(r))return!0}}return!1}changeVersionFilter(e,t,r,s){var n=this,i=!1,a=[],l=n.props.product.versions,o=null;for(r||(o=n.state.currentVersion),s||(s=n.state.filterMode);!i;){i=!0;for(var c=1;c<l.length;c++)if(l[c].version>l[c-1].version){i=!1;var d=l[c-1];l[c-1]=l[c],l[c]=d}}if(n.isFMODProduct(["FMOD Studio","FMOD Engine","FMOD for Unity","FMOD for Unreal"])&&e&&t)for(c=0;c<l.length;c++)l[c].version>=e&&l[c].version<t&&a.push(l[c]);else a=l;if(o){var u=!1;for(c=0;c<a.length;c++)if(a[c].version==o){u=!0;break}u||(o=null)}if(!o&&n.state.versionFilterFunc&&"include"==s)for(c=0;c<a.length;c++)if(n.state.versionFilterFunc(a[c].version)){o=a[c].version;break}if(!o&&a){let e=0;do{o=a[e]?a[e].version:null}while(!a[e++].platforms.length&&e<a.length)}n.setState({currentFilterStart:e,currentFilterEnd:t,sortedVersions:a,currentVersion:o})}isFMODProduct(e){return-1!==e.indexOf(this.props.product.title)}isVersionEarlyAccess(e){if(this.isFMODProduct(["FMOD Studio","FMOD Engine","FMOD for Unity","FMOD for Unreal"])){const t=[2e4,20001,20002,20100,20101,20102,20103,20200,20201,20202,20300,20301,20302,20303,20304,20305,20400,20401,20402,20403,20404,20405],r=parseInt(e.version.replace(/\./g,""));if(t.indexOf(r)>=0)return!0}return!1}isVersionUnityVerified(e){if(this.isFMODProduct(["FMOD Studio","FMOD for Unity"])){const t=[20008,20009,20010,20105,20107,20109,20111,20204,20207,20208,20209,20211,20213,20215,20217,20218,20219,20220,20221,20222,20223,20224,20225,20226,20227,20228,20229,20230,20231,20232,20233,20234,20235,20306,20307,20308,20309,20310,20311,20312,20313,20314],r=parseInt(e.replace(/\./g,""));if(t.indexOf(r)>=0)return!0}return!1}componentWillMount(){this.changeVersionFilter(this.state.currentFilterStart,this.state.currentFilterEnd,!1)}render(){var e=null,t=[],r=this,i=r.containsVersionFilter(),a=r.containsPlatformFilter();let l=null;r.state.sortedVersions.forEach(l=>{if(l.platforms.length>0){let c=l.version,d=!0;l.version_note?c+=" (Unsupported)":this.isVersionEarlyAccess(l)?c+=" (Early Access)":this.isVersionUnityVerified(l.version)&&(c+=" (Unity Verified)");let u=!!r.state.versionFilterFunc&&r.state.versionFilterFunc(l.version);if(i&&"include"===r.state.filterMode&&!u&&(d=!1),d&&(t.push(s.createElement("option",{key:"keyDropdown_"+r.props.product.title+l.version,value:l.version},c)),r.state.currentVersion===l.version)){let t;l.version_note?t=s.createElement("div",{className:"alert alert-warning",role:"alert"},"This version is no longer supported."):this.isVersionEarlyAccess(l)?t=s.createElement("div",{className:"alert alert-warning",role:"alert"},"This is an ",s.createElement(n.A,{to:"/about-versions#early-access",className:"link-primary"},"early access")," version."):this.isVersionUnityVerified(l.version)&&(t=s.createElement("div",{className:"alert alert-success",role:"alert"},"This is a ",s.createElement(n.A,{to:"/about-versions#unity-verified",className:"link-primary"},"Unity Verified")," version."));var o=[];
1l.platforms.forEach(e=>{let t=!(e.dl1filename&&e.dl2filename&&e.dl3filename),n=!!r.state.platformFilterFunc&&r.state.platformFilterFunc(e);a&&("include"===r.state.filterMode&&!n||"exclude"===r.state.filterMode&&n)&&(t=!1),t&&o.push(s.createElement(h,{platform:e,key:"keyPlatform_"+r.props.product.title.replace(" ","_")+l.version+e.title+e.dl1filename,token:r.state.token,userid:r.state.userid,product:r}))}),e=s.createElement("div",null,t,s.createElement("table",{className:"table table-hover border-bottom"},s.createElement("tbody",null,o)))}}});const o=r.props.product.title+"-select";let c=null;if(t.length>=1||i){let e=null;if(r.isFMODProduct(["FMOD Studio","FMOD Engine","FMOD for Unity","FMOD for Unreal"])){let t=this.state.currentVersion.substr(0,4).indexOf(this.state.topVersion.substr(0,4))>=0,r=this.state.currentVersion.substr(0,4).indexOf(this.state.middleVersion.substr(0,4))>=0,n=!(t||r),l=null;if(i||a){let e="include"===this.state.filterMode,t=!e;l=s.createElement("div",{className:"ml-auto"},s.createElement("button",{className:"btn mr-3"+(t?" btn-primary":" btn-outline-primary"),style:{width:"130px"},onClick:e=>this.changeFilterMode("exclude")},this.state.filterTextA),s.createElement("button",{className:"btn"+(e?" btn-primary":" btn-outline-primary"),style:{width:"130px"},onClick:e=>this.changeFilterMode("include")},this.state.filterTextB))}e=s.createElement("div",{className:"row mb-2"},s.createElement("div",null,s.createElement("button",{className:"btn mr-3"+(t?" btn-primary":" btn-outline-primary"),style:{width:"100px"},onClick:e=>this.changeVersionFilter(this.state.topVersion,"9.99.99",!0)}," ",this.state.topVersion.substr(0,4)),s.createElement("button",{className:"btn mr-3"+(r?" btn-primary":" btn-outline-primary"),style:{width:"100px"},onClick:e=>this.changeVersionFilter(this.state.middleVersion,this.state.topVersion,!0)},this.state.middleVersion.substr(0,4)),s.createElement("button",{className:"btn"+(n?" btn-primary":" btn-outline-primary"),style:{width:"100px"},onClick:e=>this.changeVersionFilter("0.00.00",this.state.middleVersion,!0)},"Older")),l)}c=s.createElement("div",null,s.createElement("div",{className:"container"},e),s.createElement("select",{className:"form-control mb-3",id:o,value:this.state.currentVersion,onChange:r.versionChange.bind(r)},t))}else 0===t.length&&(c="atmoky trueSpatial"==this.props.product.title?s.createElement("div",{className:"alert alert-warning",role:"alert"},"Contact ",s.createElement("a",{className:"link-primary",href:"mailto:[email protected]"},"[email protected]")," for access."):s.createElement("div",{className:"alert alert-warning",role:"alert"},"Contact ",s.createElement("a",{className:"link-primary",href:"mailto:[email protected]"},"[email protected]")," for access."));if(r.isFMODProduct(["FMOD Engine","FMOD for Unity","FMOD for Unreal"])){let e=r.props.category.props.categories.props.downloads;l=e&&e.consolewarning?s.createElement("div",{className:"alert alert-warning",role:"alert"},s.createElement("div",{dangerouslySetInnerHTML:{__html:e.consolewarning}})):s.createElement("div",{className:"alert alert-success",role:"alert"},"Looking for console or OpenHarmony access? Get verified in your ",s.createElement(n.A,{className:"link-primary",to:"/profile#permissions"},"user profile"),".")}let d=r.props.category.props.category.products.length>1?s.createElement("h5",null,r.props.product.title):null,u=r.props.product.product_note;return u&&(u=u.substr(u.indexOf("|")+1)),s.createElement("div",{className:"mb-2"},d,s.createElement("p",null,s.createElement("span",{dangerouslySetInnerHTML:{__html:u}}),s.createElement("br",null),null),c,e,l)}}class h extends s.Component{constructor(){super(...arguments),this.state={token:this.props.token,userid:this.props.userid}}render(){var e=this,t=e.props.platform,r=null;let i=t.dl2filename?t.platform_note:null,a=t.dl1filename;var l=new RegExp("(\\wdk[0-9].*)\\_","g"),o=new RegExp("(\\wdk[0-9].*)\\-","g"),c=new RegExp("(\\wdk[0-9].*)\\.unitypackage","g"),d=new RegExp("(\\wdk[0-9].*)\\.zip","g"),u=new RegExp("(patch[0-9])","g"),p=new RegExp("(beta[0-9])","g"),m=new RegExp("(Unzip.*)","g"),h=new RegExp("ue([0-9.+]*)","g"),g=a?a.match(u):i?i.match(u):null,v=null;g&&g[0]&&(g[0]=g[0].replace("patch"," Patch "),g[0]=g[0].replace("_"," "),v=g[0]);var E=a.match(h);if(E&&E[0]){let t=E[0].toUpperCase();
1if(t.indexOf("5.00")>=0){let r=e.props.product.state.currentVersion.substr(0,7);"2.02.06"==r?t+=" Preview 1":r>="2.02.02"&&r<="2.02.05"&&(t+=" Early Access 1")}v=v?v+" | "+t:t}var y=a?a.match(p):i?i.match(p):null;y&&y[0]&&(y[0]=y[0].replace("beta"," Beta "),y[0]=y[0].replace("_"," "),v=v?v+" | "+y[0]:y[0]);var F=a.match(l),w=null;if(F&&F[0]?w=F[0].replace("_",""):(F=a.match(o))&&F[0]?w=F[0].replace("-",""):(F=a.match(c))&&F[0]?w=F[0].replace(".unitypackage",""):(F=a.match(d))&&F[0]&&(w=F[0].replace(".zip","")),w&&(w=w.replace("dk","dk "),v=v?v+" | "+w.toUpperCase():w.toUpperCase()),i){var b=i.match(m);b&&b[0]&&(i=b[0])}let k=function(e){if("FMOD for Unity"==e.props.product.title&&t.title.indexOf("Windows")>=0){switch(e.state.currentVersion.substr(0,4)){case"2.00":return s.createElement("span",null,"Supports Unity 2017.4 or ",s.createElement(n.A,{to:"/docs/2.00/unity/welcome.html#supported-unity-versions"},"higher"));case"2.01":return s.createElement("span",null,"Supports Unity 2017.4 or ",s.createElement(n.A,{to:"/docs/2.01/unity/welcome.html#supported-unity-versions"},"higher"));case"2.02":return s.createElement("span",null,"Supports Unity 2019.4 or ",s.createElement(n.A,{to:"/docs/2.02/unity/welcome.html#supported-unity-versions"},"higher"));case"2.03":return s.createElement("span",null,"Supports Unity 2021.3 or ",s.createElement(n.A,{to:"/docs/2.03/unity/welcome.html#supported-unity-versions"},"higher"));case"2.04":return s.createElement("span",null,"Supports Unity 2021.3 or ",s.createElement(n.A,{to:"/docs/2.04/unity/welcome.html#supported-unity-versions"},"higher"))}}return null}(e.props.product);return k?r=v?s.createElement("div",null,s.createElement("span",null,v," | "),k):k:v&&i?r=s.createElement("span",null,v+" | "+i):v?r=s.createElement("span",null,v):i&&(r=s.createElement("span",null,i)),s.createElement("tr",{className:t.dl1disabled?"disabled":""},s.createElement("td",{className:"downloadIcon"},s.createElement("img",{src:"/assets/icons/"+t.icon})," ",t.title),s.createElement("td",{className:"platformNote"},r),s.createElement("td",{className:"downloadLink text-right"},s.createElement(f,{title:t.dl2Title,path:t.dl2Path,filename:t.dl2filename,token:this.state.token,userid:this.state.userid,disabled:t.dl2disabled}),s.createElement(f,{title:t.dl1Title,path:t.dl1Path,filename:t.dl1filename,token:this.state.token,userid:this.state.userid,disabled:t.dl1disabled})))}}class f extends s.Component{constructor(){super(...arguments),this.state={title:this.props.title,path:this.props.path,filename:this.props.filename,token:this.props.token,userid:this.props.userid}}initiateDownload(e){var t=this;if(e.preventDefault(),t.state.token){var r=new XMLHttpRequest,s=(t.state.path,t.state.filename);r.open("GET",(0,c.serverUrl)("/api-get-download-link?path="+encodeURIComponent(t.state.path)+"&filename="+encodeURIComponent(t.state.filename)+"&user_id="+t.state.userid),!0),r.setRequestHeader("Authorization","FMOD "+t.state.token),r.onload=function(e){var t=JSON.parse(this.response);if(t){if(r.status==a.hB)return void o.A.handleLogout();if(t.url){var n=t.url,i=document.createElement("A");i.href=n,i.download=s,document.body.appendChild(i),i.click(),document.body.removeChild(i)}}},r.send()}}render(){var e=this.state.title,t="";return e?("bin"===(e=e.toLowerCase())&&(t="Download"),"src"===e&&(t="Source"),"sym"===e&&(t="Symbols"),"file"===e&&(t="Download"),this.props.disabled?s.createElement("a",{className:"pl-4 disabled"},t):s.createElement("a",{className:"pl-4",href:"#",onClick:this.initiateDownload.bind(this)},t)):null}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.