FirelightTechnologiesFMODStudioAPI
Introduction
FMODStudioisanaudiocontentcreationtoolforgames,withafocusonaProAudioapproach.IthasaninterfacethatwillbefamiliartothoseusingprofessionalDigitalAudioWorkstationsandisloadedwithpowerfulfeatures.
TheprogrammerAPIforFMODStudiocomesin2flavours.TheFMODStudioAPI,andtheFMODStudioLowLevelAPI.TheFMODStudioAPIistheprogrammerinterfacetoloadFMODStudiobanksandtriggereventsauthoredbythesounddesigner.TheFMODStudioLowLevelAPIistheprogrammerinterfacethatdoesntrequireanytools,andisjustfortriggeringsimplesounds.
ForanoverviewoftheLowLevelAPIfeatureset,readthe"LowLevelAPI-AnOverview".
What'sNew
TheWhat'sNewIn1.10pagehighlightsthenewfeaturesofStudioAPIforthisrelease.
PlatformSpecificStarterGuide
ThePlatformSpecificStarterGuidehasbasicplatforminformationtohelpgettingstarted.
Support
FindoutmoreinformationatourQuestionsandAnswersdatabase,[email protected].
http://www.fmod.org/questionsmailto:[email protected]
FirelightTechnologiesFMODStudioAPI
FMODLowLevelAPI-AnOverviewTableofContents
WhattheLowLevelAPIis
APIFeatures
Initialization-Simplestartupwithnoconfigurationnecessary
Audiodevices-Automaticdetectionofdeviceinsertion/removal(Windowsonly)
Audiodevices-supportforplugins
Fileformats-Supportforover20audioformatsbuiltin
Fileformats-Supportforthemostoptimalformatforgames(FSB)
Fileformats-Supportforplugins
Justplayasimplesound-createSoundandplaySound
Highquality/efficientstreamingandcompressedsamples
Streaming
Internetstreaming
Streamingsettings
Compressedsampleplayback
Decompressedsamples
Voices/Channels-'VirtualVoices'-playthousandsofsoundsatonce
Voices/Grouping-'ChannelGroups'andhierarchicalsub-mixing(buses)
3Dsoundandspatialization
3Dpolygonbasedgeometryocclusion
Recording-Recordtoasoundfrommicrophoneorlinein
DSPEffects-Supportforover30specialeffectsbuiltin
DSPEffects-Reverbtypesand3Dreverbzones
StandardReverb
ConvolutionReverb
Virtual3DReverbSystem
DSPEffects-Supportforplugins
DSPEngine-Flexible,programmablesoft-syntharchitecture
Nonblockingloads,threadsandthreadsafety
Performance
Configuration-memoryandfilesystems
WhattheLowLevelAPIis
TheFMODLowLevelAPIisaprogrammerAPIthatisintendedtocoverthebasics/primitivesofsound.Thisincludesconceptssuchas'Channels','Sounds','DSP','ChannelGroups','SoundGroups','Recording'andconceptsfor3DSoundandocclusion.
Itisstandaloneanddoesnotrequireanysounddesignertoolstointerfacewith.Thefeaturesareallimplementedbytheprogrammerincode.
APIFeatures
ThissectionwillgiveabroadoverviewofFMODLowLevelAPIfeatures.
Initialization-Simplestartupwithnoconfigurationnecessary
FMODLowLevelAPIhasanautomaticconfigurationfeature,whichmakesitsimpletostart.
Atthemostbasiclevel,creatingtheSystemobjectandcallingSystem::initonit.Thisisallthatisneeded.AmoredetaileddescriptionofinitializationcanbefoundintheFMODLowLevelAPIGettingStartedTutorial.
Thesoundcardcanbemanuallyselected,usingtheSystem::setDriverfunction.Moresettingscanbeconfigured,suchasthemixingrateoftheFMODsystem,theresamplingmethod,orthespeakermodewithSystem::setSoftwareFormat.Whenmodifyingthemixersettings,thisonlyadjuststheinternalmixingformat.Attheend,theaudiostreamisalwaysconvertedtothesettingsthataresetbytheuser(iethesettingsinthecontrolpanelinWindows,orthestandard7.1/48khzoutputmodeonXboxOneorPS4).
Audiodevices-Automaticdetectionofdeviceinsertion/removal(Windowsonly)
FMODLowLevelAPIhasautomaticsoundcarddetectionandrecoveryduringplayback.Ifanewdeviceisinsertedafterinitialization,FMODwillseamlesslyjumptoit,assumingitisthehigherprioritydevice.AnexampleofthiswouldbeaUSBheadsetbeingpluggedin.
Ifthedevicethatisbeingplayedonisremoved(suchasaUSBaudiodevice),itwillautomaticallyjumptothedeviceconsiderednextmostimportant(ieonWindows,itwouldbethenew'default'device).
Ifadeviceisinserted,thenremoved,itwilljumptothedeviceitwasoriginallyplayingon.
Theprogrammercanoverridethesoundcarddetectionbehavior,withacustom
callback.ThisistheFMOD_SYSTEM_CALLBACK_DEVICELISTCHANGEDcallback.
Audiodevices-supportforplugins
FMODLowLevelAPIhassupportforusercreatedoutputplugins.AdevelopercancreateaplugintotakeFMODaudiooutputtoacustomtarget.Thiscouldbeahardwaredevice,oranonstandardfile/memory/networkbasedsystem.
Anoutputmodecanruninreal-time,ornonreal-timewhichallowsthedevelopertorunFMOD'smixer/streamer/systematfasterorslowerthanreal-timerates.
SeeSystem::registerOutputdocumentationformore.
Pluginscanbecreatedinlinewiththeapplication,orcompiledasastand-alonedynamiclibrary(ie.dllor.so)
Fileformats-Supportforover20audioformatsbuiltin
FMODLowLevelAPIhasnative/builtincodetosupportmanyfileformatsoutofthebox.WAV,MP3andOggVorbisaresupportedbydefault,butmanymoreobscureformatslikeAIFF,FLACandothers.Sequencedformatsthatareplayedbackinrealtimewitharealtimesequencer,areincluded.MIDI/MOD/S3M/XM/ITareexamplesofthese.
AmorecomprehensivelistcanbefoundintheFMOD_SOUND_TYPElist.
Fileformats-Supportforthemostoptimalformatforgames(FSB)
FMODalsosupportsanoptimalformatforgames,calledFSB(FMODSoundBank).
Manysoundfileformatsarenotwellsuitedtogames.Theyarenotefficient,andcanleadtolotsofrandomfileaccess,largememoryoverhead,andslowloadtimes.
FSBformatbenefitsare:
No-seekloading.FSBloadingcanbe3continuousfilereads.1.Mainheaderread.2.Sub-soundmetadata.3.Rawaudiodata.
'Memorypoint'feature.AnFSBcanbeloadedintomemorybytheuser,andsimply'pointedto'sothatFMODusesthememorywhereitis,anddoesnotallocateextramemory.SeeFMOD_OPENMEMORY_POINT.
Lowmemoryoverhead.Alotoffileformatscontain'fluff'suchastags,andmetadata.FSBstoresinformationincompressed,bitpackedformatsforefficiency.
Multiplesoundsin1file.Thousandsofsoundscanbestoredinside1file,andselectedbytheAPIfunctionSound::getSubSound.
EfficientOggVorbis.FSBstripsoutthe'Ogg'andkeepsthe'Vorbis'.1codebookcanbesharedbetweenallsounds,savingmegabytesofmemory(comparedtoloading.oggfilesindividually).
FADPCMcodecsupport.FMODsupportsaveryefficient,ADPCMvariantcalledFADPCMwhichismanytimesfasterthanastandardADPCMdecoder(nobranching),andisthereforeveryefficientonmobiledevices.ThequalityisalsofarsuperiorthanmostADPCMvariants,andlacksthe'hiss'notableinthoseformats.
Fileformats-Supportforplugins
FMODLowLevelAPIhassupportforusercreatedfileformatplugins.AdevelopercancreatecallbacksforFMODtocallwhenSystem::createSoundorSystem::createStreamisexecutedbytheuser,orwhenthedecodingengineisaskingfordata.
Pluginscanbecreatedinlinewiththeapplication,orcompiledasastand-alonedynamiclibrary(ie.dllor.so)
SeetheSystem::registerCodecdocumentationformore.
Justplayasimplesound-createSoundandplaySound
Thesimplestwaytogetstarted,andbasicfunctionalityofFMODLowLevel
API-istoinitializetheFMODsystem,loadasound,andplayit.That'sit!
RefertotheGettingStartedtutorialonhowtoinitializeandload/playasoundwiththeFMODLowLevelAPI.
Lookattheplaysoundexampletorefertosamplecodeforthesimpleplaybackofasoundfile.
Highquality/efficientstreamingandcompressedsamples
FMODLowLevelAPIbenefitsfromover15yearsofuse,inmillionsofenduserdevices,causingtheevolutionofahighlystableandlowlatencymixing/streamingengine.
Streaming
Streamingistheabilitytotakealargefile,andread/playitinrealtimeinsmallchunksatatime,avoidingtheneedtoloadtheentirefileintomemory.Thisistypicallyreservedfor
Music
Voiceover/dialogue
Longambiencetracks
Theusercansimplyplayasoundasa'stream'byaddingtheFMOD_CREATESTREAMflagtotheSystem::createSoundfunction,orusingtheSystem::createStreamfunction.The2optionsequatetothesameendbehavior.
Internetstreaming
FMODstreamingsupportsinternetaddresses.SupplyinghttporhttpsinthefilenamewillswitchFMODtostreamingusingnativehttp,shoutcastoricecast.
Playlistfiles(suchasASX/PLS/M3U/WAXformats)aresupported,includingredirection.
Proxyspecificationandauthenticationaresupported,aswellasreal-time
shoutcaststreamswitching,metadataretrievalandpacketlossnotification.
Streamingsettings
Streamingbehaviorcanbeadjustedinseveralways.Asstreamingafiletakes2threads,oneforfilereading,andoneforcodecdecoding/decompression.FilebuffersizescanbeadjustedwithSystem::setStreamBufferSizeandcodecdecodingbuffersizecanbeadjustedwithFMOD_CREATESOUNDEXINFOdecodeBufferSizemember,orFMOD_ADVANCEDSETTINGSdefaultDecodeBufferSizemember.
Compressedsampleplayback
Forshortersounds,ratherthandecompressingthesoundintomemory,theusermaywishtoplaythesoundinmemory,asis.
Thisismoreefficientthanastream,asitdoesnotrequirediskaccess,orextrathreadstoreadordecode.Astreamhasalimitof1soundatatime,butacompressedsampledoesnot.Itcanbeplayedmultipletimessimultaneously.
IfaplatformsupportsahardwareformatlikeAT9onPS4,orXMAonXboxOne,thenitisthebestsolutiontousethesecodecs,asthedecodingofthedataishandledbyseparatemediachips,takingthemajorityoftheprocessingofftheCPU.
RefertotheGettingStartedtutorialonhowtousetheFMOD_CREATECOMPRESSEDSAMPLEflagandconfigurationofcodecmemory.
Decompressedsamples
LoadingasoundwithSystem::createSoundwillbydefault,causeasoundtobedecompressedintomemory,andplayedbackasPCMformat.
PCMdataisjustrawuncompressedsounddata,formoreinformationgototheTerminology/BasicConceptstutorial.
Decompressed/uncompressedsamplesuseslittletonoCPUtimetoprocess.PCMdataisthesameformatthattheFMODmixingengineuses,andthesounddeviceitself.Thismaybedesirable,ifyouhaveenoughmemory,onamobile
devicewithlimitedCPUcycles.
DecompressedPCMdatausesalotmorememorythanVorbisencodedFSBforexample.Itcouldbeupto10xmore.
Atypicalusecaseformobiledevelopers:Compressthesoundheavilyfordistribution(toreducethedownloadsize),thendecompressitatstart-up/loadtime,tosaveCPUtime,ratherthanplayingitcompressed.
Voices/Channels-'VirtualVoices'-playthousandsofsoundsatonce
FMODLowLevelincludesa'virtualvoicesystem'.Itallowsthedevelopertoplayhundredsoreventhousandsofsoundsatonce,butonlyhaveasmallnumberactuallyproducingsound.Theremainderare'virtual'oremulatedwithasimplepositionupdate,andarenotheard,anddon'tconsumeCPUtime.
Asanexample:adungeonmayhave200torchesburningonthewallinvariousplacesbutonlytheloudesttorcheswillbereallyaudible.FMODwilldynamicallymakevoices'virtual'or'real'dependingonrealtimeaudibilitycalculations(basedondistance/volume/priority/occlusion).
Asoundwhichisplayingfaraway,orwithalowvolumewillbecomevirtual,andwillchangetoarealvoicewhenitcomescloser,orbecomeslouderduetoChannelorChannelGroupAPIcalls.
ReadmoreaboutthevirtualvoicesystemontheVirtualVoicetutorial.
Voices/Grouping-'ChannelGroups'andhierarchicalsub-mixing(buses)
Groupingvoicessothattheycanhaveasingleeffectonthem,canbeachievedwithwhatistypicallycalleda'bus'ora'submix'.InFMODLowLevel,channelsaregroupedinto'ChannelGroups',whicharethesameasabusorsubmix.
AneffectcanbeaddedtoaChannelGroup,anditwillonlyprocessasub-mixedresultofmultiplechannels,ratherthanprocessingeverychannel.Thisreduces
CPUusagegreatly.
ThevolumeofaChannelGroupcanbealtered,whichallowsformastervolumegroups.ThevolumeisscaledbasedonafaderDSPinsideaChannelGroup.AllChannelsandChannelGroupshaveafaderDSPbydefault.
ChannelGroupsarehierarchical.ChannelGroupscancontainChannelGroups,whichcancontainotherChannelGroupsandChannels.
ManyattributescanbeappliedtoaChannelGroup,includingthingslikespeakermix,and3Dposition.AwholegroupofChannels,andtheChannelGroupsbelowthem,canbepositionedin3Dwith1call,ratherthantryingtopositionallofthemindividually.
'MasterVolume','SFXVolume'and'MusicVolume'aretypicalsettingsinagame.Settingupan'SFX'ChannelGroup,anda'Music'ChannelGroup,andhavingthemchildrenofthemasterchannelgroup(seeSystem::getMasterChannelGroup)
3Dsoundandspatialization
FMODLowLevelAPIhassupportforavarietyoffeaturesthatallowsoundstobeplacedin3Dspace,sothattheymovearoundthelisteneraspartofanenvironment,bypanning,pitchshiftingwithdoppler,andattenuatingwithvolumescalingorevenspecialfiltering.
FMOD3Dspatializationfeatures:
1. Multipleattenuationrolloffmodels.Rolloffisthebehaviorofthevolumeofthesoundasthesoundgetsclosertothelistenerorfurtheraway.Choosebetweenlinear,inverse,linearsquare,inversetaperedandcustomrolloffmodes.CustomrolloffallowsaFMOD_3D_ROLLOFF_CALLBACKtobesettoallowtheusertocalculatehowthevolumerolloffhappens.Ifacallbackisnotconvenient,FMODalsoallowsanarrayofpointsthatarelinearlyinterpolatedbetween,todenotea'curve',usingChannelControl::set3DCustomRolloff.
2. Dopplerpitchshifting.Accuratepitchshifting,controlledbytheuservelocitysettingofthelistenerandthechannelorchannelgroup,is
calculatedandsetontheflybytheFMOD3Dspatializationsystem.
3. VectorBasedAmplitudePanning(VBAP).Thissystempansthesoundsintheuser'sspeakersinrealtime,supportingmono,stereo,upto5.1and7.1surroundspeakersetups.
4. Occlusion.ChannelsorChannelGroupscanhavelowpassfilteringappliedtothemtosimulatesoundsgoingthroughwallsorbeingmuffledbylargeobjects.
5. 3DReverbZonesforreverbpanning.Seemoreaboutthisinthe3DReverbsection.Reverbcanalsobeoccludedtonotgothroughwallsorobjects.
6. Polygonbasedgeometryocclusion.AddpolygondatatoFMOD'sgeometryengine,andFMODwillautomaticallyoccludesoundsinrealtimeusingraycasting.Seemoreaboutthisinthe3DPolygonbasedgeometrysection.
7. Multiplelisteners.Inasplitscreenmodegame,FMODcansupportalistenerforeachplayer,sothatthe3Dsoundsattenuatecorrectly.
8. Morphingbetween2Dand3Dwithmultichannelsounds.Soundscanbeapointsource,orbemorphedbytheuserintoa2Dsound,whichisgreatfordistancebasedenvelopment.Thecloserasoundis,themoreitcanspreadintotheotherspeakers,ratherthanflippingfromonesidetotheotherasitpansfromonesidetotheother.SeeChannel::set3DLevelorChannelGroup::set3DLevelforthefunctionthatletstheuserchangethismix.
9. Stereoandmultichannelsoundscanbe3D.Typicallyamonosoundisusedfor3Daudio.Multi-channelsoundscanbeusedtogiveextraimpact.Bydefaultamultichannelsoundiscollapsedintoamonopointsource.To'spread'thechannelsofthemultichannelsound,useChannel::set3DSpreadorChannelGroup::set3DSpread.Thiscangiveamoreamorespatialeffectforasoundthatiscomingfromacertaindirection.Asubtlespreadofsoundinthedistancemaygivestheimpressionofbeingmoreeffectivelyspatializedasifitwerereflectingoffnearbysurfaces,orbeing'big'andemittingdifferentpartsofthesoundindifferentdirections.
10. Spatializationpluginsupport.3rdpartyVRaudiopluginscanbeusedtogivemorerealisticpanningoverheadphones.
Toloadasoundas3DsimplyaddtheFMOD_3DflagtotheSystem::createSoundfunction,ortheSystem::createStreamfunction.
Thenext3importantthingstodoare:
1. Setthe'listener'position,orientationandvelocityonceperframewithSystem::set3DListenerAttributes.
2. SettheChannel3DattributesforhandlethatwasreturnedfromSystem::playSound,withChannel::set3DAttributes.If3Dpositioningofagroupofchannels,oraChannelGroupisrequired,settheChannelGrouptobe3DoncewithChannelGroup::setMode,thencallChannelGroup::set3DAttributesinstead.
3. CallSystem::updateonceperframesothe3Dcalculationscanupdatebasedonthepositionsandotherattributes.
Readmoreabout3Dsoundinthe3DSoundtutorialortheSpatialAudiotutorial.
3Dpolygonbasedgeometryocclusion
FMODLowLevelAPIsupportsthesupplyofpolygonmeshdata,thatcanbeprocessedinrealtimetocreatetheeffectofocclusioninareal3Dworld.Inrealworldterms,theusercanstopsoundstravellingthroughwalls,orevenconfinereverbinsideageometricvolumesothatitdoesn'tleakoutintootherareas.
Geometrycanbeusedtoobstruct,occludeandexcludedry/reverbsignals(yellow=direct,green=reverb)
TousetheFMODGeometryEngine,createameshobjectwithSystem::createGeometry.ThenaddpolygonstoeachmeshwithGeometry::addPolygon.Eachobjectcanbetranslated,rotatedandscaledtofityourenvironment.
Recording-Recordtoasoundfrommicrophoneorlinein
FMODLowLevelAPIhastheabilitytorecorddirectlyfromaninputintoanFMODsoundobject.
Thissoundcanthenbeplayedbackafterithasbeenrecorded,ortherawdatacanberetrievedwithSound::lockandSound::unlockfunctions.
Thesoundcanalsobeplayedwhileitisrecording,toallowrealtimeeffects.Asimpletechniquetoachievethisistostartrecording,thenwaitasmallamountoftime,like50ms,thenplaythesound.Thiswillkeeptheplaycursorjustbehindtherecordcursor.Seetherecordexampleforsourceandinformationonhowtodothis.
DSPEffects-Supportforover30specialeffectsbuiltin
FMODLowLevelAPIhasnative/builtincodetosupportmanyspecialeffectsoutofthebox,suchaslow-pass,compressor,reverbandparametricEQ.AmorecomprehensivelistcanbefoundintheFMOD_DSP_TYPElist.
AneffectcanbecreatedwithSystem::createDSPByTypeandaddedtoaChannelwithChannel::addDSPoraChannelGroupwithChannelGroup::addDSP.
DSPEffects-Reverbtypesand3Dreverbzones
FMODLowLevelAPIhas2typesofphysicalreverbavailable,andavirtual3dreverbsystemwhichcanbeusedtosimulatehundredsofenvironmentsormore,withonly1physicalreverb.
StandardReverb
Abuiltin,highqualityI3DL2standardcompliantreverb,whichisusedforafast,configurableenvironmentsimulation,andisusedforthe3Dreverbzonesystem,describedbelow.
Tosetanenvironmentsimply,useSystem::setReverbProperties.Thisletsyousetaglobalenvironment,orupto4differentenvironments,whichallsoundsareaffectedby.
EachchannelcanhaveadifferentreverbwetmixbysettingthelevelinChannel::setReverbProperties.
ReadmoreabouttheI3DL2configurationintheReverbNotessectionofthedocumentation.Toavoidconfusionwhenstartingout,simplyplaywiththepre-setlistofenvironmentsinFMOD_REVERB_PRESETS.
ConvolutionReverb
ThereisalsoanevenhigherqualityConvolutionReverbwhichallowsausertoimportanimpulseresponsefile(arecordingofaimpulseinanenvironmentwhichisusedtoconvolvethesignalplayingatthetime),andhavetheenvironmentsoundlikeitisinthespacetheimpulsewasrecordedin.
Thisisanexpensivetoprocesseffect,soFMODsupportsGPUaccelerationtooffloadtheprocessingtothegraphicscard.Thisgreatlyreducestheoverheadoftheeffecttobeingalmostnegligible.GPUaccelerationissupportedonXboxOneandPS4platforms.
ConvolutionreverbcanbecreatedwithSystem::createDSPByTypewithFMOD_DSP_TYPE_CONVOLUTIONREVERBandaddedtoaChannelGroupwithChannelGroup::addDSP.Itisrecommendedtoonlyimplement1oralimitednumberoftheseeffectsandplacethemonasub-mix/groupbus(aChannelGroup),andnotperchannel.
Virtual3DReverbSystem
AVirtual3Dreverbzonesystemissupported,usingthemainbuilt-insystemI3DL2reverb.
Virtual'3Dreverbspheres'canbecreatedandplacedarounda3Dworld,inunlimitednumbers,causingnoextraCPUexpense.
Asthelistenertravelsthroughthesespheres,FMODwillautomaticallymorphandattenuatethelevelsofthesystemreverbtomakeitsoundlikeyouareindifferentenvironmentsasyoumovearoundtheworld.
Spherescanbeoverlappedandbasedonwherethelisteneriswithineachspheres.FMODwillmorphthereverbtotheappropriatemixofenvironments.
A3DreverbspherecanbecreatedwithSystem::createReverb3DandthepositionsetwithReverb3D::set3DAttributes.Tosetasphere'sreverbproperties,Reverb3D::setPropertiescanbeused.
Formoreinformationonthe3Dreverbzonesystem,andimplementationinformation,readthe3DReverbTutorial.
DSPEffects-Supportforplugins
FMODLowLevelAPIhassupportforusercreatedDSPplugins.Adevelopercaneitherloadapre-existingplugin,orcreateoneinsidetheapplication,using'callbacks'.
Callbackscanbespecifiedbytheuser,forexamplewhenSystem::createDSPiscalled,orwhentheDSPrunsandwantstoprocessPCMdatainsideFMOD'smixer.
Pluginscanbedevelopedinlinewiththeapplication,orcompiledasastand-alonedynamiclibrary(ie.dllor.so)
Toloadapre-existingpluginexecutable,usetheSystem::loadPluginfunction.
Toimplementcallbacksdirectlyinaprogram,System::registerDSPcanbeused.
Tocreateastandalonedynamiclibrary,usethesamecallbacks,butexportthesymbolsthroughatheFMOD_DSP_DESCRIPTIONstruct,viatheexportedFMODGetDSPDescriptionfunction.
SeetheDSPPluginAPItutorialonhowtomakeaplugin,and/examples/fmod_gain.cppintheAPIdistributionasaworkingexample.
DSPEngine-Flexible,programmablesoft-syntharchitecture
FMODLowLevelAPIrunsonamodularsyntharchitecture,whichallowsconnectionsofsignalprocessingnodes(the'FMODDSP'concept.SeetheFMODDSPClasstobejoinedtogethertocreatedeepermorecomplicatedaudiosignalsandflow.
Adirectedgraphprocessingtreeallowsthesignaltoflowfrom'generators'(asoundplayingthroughfromSystem::playSound,oraDSPcreatingsoundfromSystem::playDSPforexample),toothernodes,mixingtogetheruntiltheyreachtheheadnode,wherethefinalresultissenttothesoundcard.
AvisualrepresentationtakendirectlyfromtheFMODProfilertool(inthe/bindirectoryoftheAPIdistribution).
FMODtypicallyprocessesthesoundinthegraph,inblocksof512samples(10ms)onsomeplatforms,or1024onotherplatforms(21ms).Thisisthegranularityofthesystem,andaffectshowsmoothparameterchanges,suchaspitchorvolumewillheard.
FMODpre-builtDSPeffectscanbeinsertedintothegraphwithfunctionslikeDSP::addInputandDSP::disconnectFrom.
FordetailedinformationreadtheDSPArchitectureandUsagetutorial.
Nonblockingloads,threadsandthreadsafety
FMODLowLevelAPIcommandsarethreadsafeandqueued.Theygetprocessedeitherimmediately,orinbackgroundthreads,dependingonthecommand.
Bydefault,thingslikeinitialization,andloadingasoundareprocessedonthemainthread.
Mixing,streaming,geometryprocessing,filereadingandfileloadingareorcanbedoneinthebackground,inbackgroundthreads.Everyeffortismadetoavoidblockingthemainapplication'sloopunexpectedly.
Oneoftheslowestoperationsisloadingasound.Toplaceasoundloadintothebackgroundsothatitdoesn'taffectprocessinginthemainapplicationthread,theusercanusetheFMOD_NONBLOCKINGflaginSystem::createSoundorSystem::createStream.
Threadaffinityisconfigurableonsomeplatforms.
FordetailedinformationaboutFMODandthreadspleaserefertotheThreadsandThreadSafetytutorial.
Performance
TheFMODLowLevelAPIhasevolvedovertheyearstohaveacomprehensivesuiteofeffectsandcodecswithminimaloverheadformemoryandCPU.
Allplatformscomewithperformancesavingfeatures.Forexamplevectoroptimizedfloatingpointmathisusedheavily.SomeofthetechnologiesusedincludeSSE,NEON,AVX,VMX,andVFPassembler.
Typicallythemostexpensivepartofsoundplaybackisreal-timecompressedsampleplayback.
TheFMODAPIwillallowconfigurationofhowmanysoundsshouldbeaudibleatonce,toreduceCPUoverhead.ThisisconfigurableasmentionedintheCompressedsampleplaybacksectionofthisdocument,usingtheSystem::setAdvancedSettingsfunction.
Adjustingthesampleratequality,resamplingquality,numberofmixedvoicesanddecodedvoicesisconfigurabletogetthebestscalabilityforyourapplication.
TofindoutmoreaboutconfiguringFMODtosaveCPUtime,refertotheCPUPerformancetutorial,ortogetanideaaboutLowLevelperformancefiguresonvariousplatforms,refertothePerformanceReferencesectionofthedocumentation.
Configuration-memoryandfilesystems
TheFMODLowLevelAPIcaterstotheneedsofapplicationsandtheirmemoryandfilesystems.Afilesystemcanbe'pluggedin'sothatFMODusesit,andnotitsownsystem,aswellasmemoryallocation.
TosetupacustomfilesystemisasimpleprocessofcallingSystem::setFileSystem.
Thefilesystemhandlesthenormalcasesofopen,read,seek,close,butaddsanextrafeaturewhichisusefulforprioritized/delayedfilesystems,FMODsupportstheFMOD_FILE_ASYNCREAD_CALLBACKcallback,fordeferred,prioritizedloadingandreading,whichisacommonfeatureinadvancedgamestreamingengines.
Anasyncreadcallbackcanimmediatelyreturnwithoutsupplyingdata,thenwhentheapplicationsuppliesdataatalatertime,eveninadifferentthread,itcansetthe'done'flagintheFMOD_ASYNCREADINFOstructuretogetFMODtoconsumeit.Considerationhastobemadetonotwaittoolongorincreasestreambuffersizes,sothatstreamsdon'taudiblystutter/skip.
TosetupacustommemoryallocatorisdonebycallingFMOD_Memory_Initialize.ThisisnotanFMODclassmemberfunctionbecauseitneedstobecalledbeforeanyFMODobjectsarecreated,includingtheSystemobject.
Toreadmoreaboutsettingupmemorypoolsormemoryenvironments,refertotheMemoryManagementtutorial.
FirelightTechnologiesFMODStudioAPI
What'sNewin1.10Thissectiondescribesthemajorfeaturesintroducedinthe1.10release.SeetheDetailedRevisionHistoryforinformationregardingeachpatchrelease.
Spatialaudiofeatures
WindowsSonicspatializationhasbeenaddedforWindowsandXboxOnewithanewoutputpluginFMOD_OUTPUTTYPE_WINSONIC.ThiswillallowFMODtoberenderedusingWindowsSonicforheadphones,DolbyAtmosforheadphonesandDolbyAtmosHomeTheatre.Thesetechnologiesallowforamoreimmersivesurroundexperiencewhichincludesheightspatializationvia7.1.4surroundspeakermodeanddynamicobjects.
TofacilitategettingsignalintotheheightspeakersFMODcanplay12channelaudio(7.1.4)asasourceorupmixwiththehelpofFMOD_DSP_TYPE_PANandthenewFMOD_DSP_PAN_2D_HEIGHT_BLENDparameter.
FormoredetailaboutusingspatialaudiofeatureswithFMODpleaserefertothededicatedSpatialAudiopage.
FirelightTechnologiesFMODStudioAPI
PreviousReleasesWhat'sNewIn1.08What'sNewIn1.07What'sNewIn1.06What'sNewIn1.05What'sNewIn1.04What'sNewIn1.03What'sNewIn1.02What'sNewIn1.01
FirelightTechnologiesFMODStudioAPI
What'sNewin1.09Thissectiondescribesthemajorfeaturesintroducedinthe1.09release.SeetheDetailedRevisionHistoryforinformationregardingeachpatchrelease.
Multiplelistenerweighting
Studio'smultiplelistenersupporthasbeenimprovedwiththeabilitytosetaweightingperlistenerwithStudio::System::setListenerWeight.Theweightallowslistenerstobesmoothlyfadedinoroutofexistence.
Forexampletodoacrossfade,anadditionallistenercanbecreatedwithaweightingof0thatrampsupto1whiletheoldlistenerweightisrampeddownto0.Afterthecrossfadeisfinishedthenumberoflistenerscanbesetdownto1again.
Listenerweightisusedinthe3Dpanner,thedopplercalculation,andtheautomaticdistanceeventparameter.
Formoreinformation,seetheStudio3DEventspage.
Gettingfinalvalueforvolumeandparametervalues
TheStudioAPIgetterfunctionstakeanextraoptionalargumentwhichwillreceivethefinalvalueafterautomation,modulation,andsnapshots.
Itallowsthesounddesignertosetupautomationsonparameterswhichthegamecanqueryanddriveothergamesidesystems,aswellasgettingvolumeofbusesaftersnapshotsareapplied.Forexistingcodebases,thesecondargumentdefaultstoNULLwhichisunchangedbehaviour.
Thefunctionsthathavetheextrafunctionalityare:
Studio::EventInstance::getVolumeStudio::EventInstance::getPitchStudio::EventInstance::getParameterValueStudio::EventInstance::getParameterValueByIndexStudio::Bus::getVolumeStudio::VCA::getVolume
Aspartofthischange,theolderfunctionnameshavebeenrenamedforconsistency:
Studio::Bus::setFaderLevelisnowStudio::Bus::setVolumeStudio::Bus::getFaderLevelisnowStudio::Bus::getVolumeStudio::VCA::setFaderLevelisnowStudio::VCA::setVolumeStudio::VCA::getFaderLevelisnowStudio::VCA::getVolume
MultibandEQ
AnewEQDSPhasbeendevelopedtorollupseveralsimplerDSPsintoonehighperformanceflexibleeffect.
ThemultibandEQconsistsof5independentlyconfigurableparametricequalizerswithseveralfilteringmodes:
Low-pass(12dB,24dB,48dB)High-pass(12dB,24dB,48dB)Low-shelfHigh-shelfPeakingBand-passNotchAll-pass
Thisneweffectwillsupercedeexistinglowpass,highpass,lowpasssimple,highpasssimpleandparametriceqeffects.Ithasbetterperformanceandasupersetoffunctionalitycomparedwiththenowdeprecatedeffectsandthusshouldbeconsideredasareplacement.FormoreinformationonhowtousetheneweffectasareplacementseeFMOD_DSP_TYPEremarks.
What'snewsince1.08initialreleaseThissectioncoverssomeoftheimprovementsintroducedbetweenthefirst1.08releaseandthenew1.09release.SeetheDetailedRevisionHistoryformoreinformationonfeaturesintroducedduringthe1.08lifetime.
SoundPlay/Stopcallbacks
YoucannowsetacallbacktobefiredwhentheStudioruntimeplaysorstopsanevents.WiththecallbackisthelowlevelFMOD::Soundthroughwhichyoucanquerythenameofthesoundplayed
Listenermask
Eventscanbesetuptoonlybeinfluencedbysomeofthelisteners.Studio::EventInstance::setListenerMaskcanbeusedtospecifyamaskforwhatlistenersapplytothatevent.
Formoreinformation,seetheStudio3DEventspage.
FirelightTechnologiesFMODStudioAPI
What'sNewin1.08Thissectiondescribesthemajorfeaturesintroducedinthe1.08release.SeetheDetailedRevisionHistoryforinformationregardingeachpatchrelease.
Bankloadingperformanceimprovements
Banksampledataloadinghasbeenoptimised.Thenumberoffileaccessesandseekshasbeenreduced.Multiplesampledataloadsarecoalescedintoasinglereadoperationinsortedorder.Performancewhencancellingpendingsampledataloadshasbeenbeenimproved.Therehavebeenmemorysavings,soprojectsthatloadlargenumbersofsoundswillseeamemoryimprovement.
Studiosampledataloadingoccursonitsownthread.Affinitycanbecontrolledviaperplatformaffinitysettings.
SampleDataIdlePool
Toavoidspurioussampledatareloading,Studiowillkeepapoolofrecentlyusedsoundsinmemory.Thiscanhelpforcaseswhereprogrammerdoesn'tmanuallypreloaddataviaStudio::EventDescription::loadSampleDataorStudio::Bank::loadSampleData.SeetheStudioBankProgrammerTopicformoreinformation.
StudioProfilerfileI/Odisplay
TheFMODStudioProfilernowdisplaysthefileI/Ousedforsampledata,streamdata,andbankmetadataloading.Theeventinstancelifetimeviewhasindicatorsforwheneventinstancesarestallingwaitingforsampledatatoloadin.
3DObjectPanner
Thenew3DobjectpannerDSP(FMOD_DSP_TYPE_OBJECTPAN)allowschannelstobespatializedusingDolbyAtmos(FMOD_OUTPUTTYPE_ATMOS)andPlaystationVR(FMOD_OUTPUTTYPE_AUDIO3D)technology.
TheoutputmodepluginAPI(FMOD_OUTPUT_DESCRIPTION)hasbeenextendedtoallowcustomobjectpannerbackends.
Thereisanewexample'object_pan'thatdemonstratesobjectbasedpanning.
Multiplepluginsinonefile
MultipleDSP,outputandcodecpluginscanbepackagedintoasinglemodule.SeeFMOD_PLUGINLIST,System::getNumNestedPlugins,System::getNestedPlugin,andtheDSPPluginAPIProgrammerTopicformoreinformation.
Soundloadingperformance
IncreasedperformancewhenloadingsamplesandopeningstreamsviathelowlevelAPI.
LowlatencyoutputmodeforWindows
ThedefaultWASAPIoutputmodehasreducedlatencyby40msandimprovedmixerthreadregularity.
FSBankandProfilertoolsforMac
AddedMacversionsoftheProfilertool,FSBanktool,andFSBankLibAPI.TheseareincludedintheMacandiOSAPIpackages.
SupportfornewStudiofeatures
Leftedgetrimmingoftimelockedsounds.StartOffsetasapercentageofsoundlength.Perassetencodingandstreamingsettings.New'Decompressed'loadingmodeallowssoundstobedecompressedintomemorywhenloaded,ratherthanstayingcompressed.
What'snewsince1.07initialreleaseThissectioncoverssomeoftheimprovementsintroducedbetweenthefirst1.07releaseandthenew1.08release.SeetheDetailedRevisionHistoryformoreinformationonfeaturesintroducedduringthe1.07lifetime.
Transceivereffect
ThisnewDSPeffect(FMOD_DSP_TYPE_TRANSCEIVER)broadcastsasignaltooneof32global'slots'or'channels'(likearadiostation).Thesesignalscanbemonitoredbyareceiveranywhereinthemix.Eachchannelmayhavemultipletransmittersorreceiversconnected.
Applicationsincludesendingtheoutputofaglobalreverbbackoutintotheworldtobespacialized,playingin-gameradiobothinsidethecabinandalsothroughloudspeakersplacedoutside,andmanymore.
FirelightTechnologiesFMODStudioAPI
What'sNewin1.07Thissectiondescribesthemajorfeaturesintroducedinthe1.07release.SeetheDetailedRevisionHistoryforinformationregardingeachpatchrelease.
64-bitversionofStudio
Studioisnowa64-bitapplication,providinggreatermemorycapacityandimprovedperformance.OnWindows,separate32-bitand64-bitversionsareavailable.OnMac,Studioisnow64-bitonly.
Allpluginlibrariesmustbebuiltfor64-bitarchitectureinordertobecompatiblewiththe64-bitversionofStudio.
Nestedeventshavebeenconvertedtoreferenceevents
Theconceptofnestedeventsandreferencedeventshasbeenunifiedtojusthavingreferenceevents.Aspartofthischange,Studio::Bank::getEventCountandStudio::Bank::getEventListnowonlyreturntopleveleventsthathavebeenexplicitlyaddedtobanksbythesounddesigner.Theydonotincludeanyreferenceeventsthathavebeenincludedinthebankimplicitlyviaeventinstrumentreferences.
BusPolyphony
Thissettingallowsthedesignertosetalimitonthenumberofeventinstancesthatroutethroughabus.
Improvedrecordingandenumerationsupport
WhenusingSystem::getRecordNumDriversandSystem::getRecordDriverInfoyoucannowbesurethataparticularlistindexwillalwaysbevalid.Asdevicesareaddedthelistwillgrowovertime,ifadeviceisremoveditwillremaininthelist.YoucannowqueryFMOD_DRIVER_STATEtodetermineFMOD_DRIVER_STATE_CONNECTED.
Totakeadvantageoftheseimprovementsallmajorplatformssupportdynamicdeviceadditionandremovalallowingdeveloperstoquerythecurrentstateofallrecordinghardware.FornotificationsaboutchangesSystem::setCallbackcanbeusedwithFMOD_SYSTEM_CALLBACK_RECORDLISTCHANGED.Allrecordingdevicechangesarenowdecoupledfromoutputchanges.
Multi-channelcompressedsamplesupport
InpreviousversionsofFMODmulti-channel(greaterthanstereo)soundscouldbestreamedorplayedafterbeingdecompressedintomemory,butnotasaninmemorycompressedsound(ieVorbis).ThisreleaseallowsanyFSBcompressedsoundtobemulti-channel,accessibleviaFMOD_CREATECOMPRESSEDSAMPLEflagifusingthelowlevelAPI,orjustdraganddropmulti-channelsoundsintoFMODStudio'sUIandplayasnormal.
AddedFMOD_DSP_TYPE_CHANNELMIXeffect
ThisnewDSPeffectallowstheusertocontrolgainlevelsforupto32inputchannelsignals,andpipetheoutputtoarangeofspeakerformatsi.e.repeatingmono,stereo,quad,5.1,7.1oronlyLFEout.
Performanceimprovements
ImprovedVorbisdecodingperformanceonWindows.Metering/Profilingperformancesignificantlyimproved.
Platformspecificimprovements
Newplatforms-UniversalWindowsPlatform(UWP)andAppleTVsupport.Mac-Addedsupportforrecordingfrommultiplemicrophonesatthesametime.iOS-Addedsupportforbitcode.Win-Reduceddllandexesizes.
NewPlugins
AudioGaming-AudioMotors.Createrealtimeinteractivecarenginesoundsfromasinglerecordedenginesweep!TwoBigEars-3DCEPTION.3Dceptionisareal-time3Daudioandenvironmentalmodellingengine.
What'snewsince1.06initialreleaseThissectioncoverssomeoftheimprovementsintroducedbetweenthefirst1.06releaseandthenew1.07release.
Internetstreams.AddSound::setPositionandSound::seekDatasupportforHTTPstreams.UE4-Addedblueprintfunctionsforloadingandunloadingsampledata,newinitializationsettings,beatandmarkercallbacksasBlueprintevents,reverbzones,and4.9enginepreviewbuild.StudioProfilernowshowsnestedinstanceinformation.Reducedmemoryoverheadofbankmetadata.FMOD_STUDIO_LOAD_BANK_DECOMPRESS_SAMPLESflaghasbeenaddedtoallowcompressedbankstobedecompressedatloadtime,tohelplowspecmachines.TempoandmarkereventcallbacksaddedtoStudioAPI.SeeFMOD_STUDIO_EVENT_CALLBACK_TIMELINE_MARKERandFMOD_STUDIO_EVENT_CALLBACK_TIMELINE_BEAT.Additionaleventcallbacktypes:FMOD_STUDIO_EVENT_CALLBACK_CREATED,FMOD_STUDIO_EVENT_CALLBACK_DESTROYEDandFMOD_STUDIO_EVENT_CALLBACK_START_FAILED.FMOD_DSP_COMPRESSORnowsupportsunlinkedchannelcompression,somultichannelsidechainingforexamplecancompresseachdestinationchannelindividually.DSPPluginwriters-FMOD_DSP_DESCRIPTION::sys_register,sys_deregisterandsys_mixcallbackshavebeenadded,toallowapertype(notinstance)levelinit/shutdown/mixcallbackforaplugin.
SeetheDetailedRevisionHistoryformoreinformationonfeaturesintroducedduringthe1.06lifetime.
FirelightTechnologiesFMODStudioAPI
What'sNewin1.06Thissectiondescribesthemajorfeaturesintroducedinthe1.06release.SeetheDetailedRevisionHistoryforinformationregardingeachpatchrelease.
BankLoadingChanges
Studionowdoesallfileloadingonaseparateloadingthread.Thisavoidsanyhitchesinschedulingthatmayoccurwhenloadinglargebanks.TheinterfaceisunchangedsincetheFMOD_STUDIO_LOAD_BANK_NONBLOCKINGflagalreadyexists.
BanksloadedwithFMOD_STUDIO_LOAD_BANK_NONBLOCKINGwillnolongerbedestroyediftheloadingfails,insteadtheywillremaininanerrorstatethatcanbequeriedwithStudio::Bank::getLoadingState.BanksthatentertheerrorstateshouldbereleasedbycallingStudio::Bank::unload.
SeveralenhancementsweremadeforFMOD_STUDIO_LOAD_MEMORY_POINT.ExtradatacanbeassociatedwiththebankbyStudio::Bank::getUserDataandStudio::Bank::setUserData.ThereisanewcallbackFMOD_STUDIO_SYSTEM_CALLBACK_BANK_UNLOADwhichiscalledwhenbanksareasynchronouslyunloaded.Thatprovidesaconvenientplacetofreeanymemoryassociatedwiththebank.
Theload_banksexamplehasbeenupdatedtodemonstrateallthemethodsofloadingbanks.
APICaptureandReplay
APIcommandcapturefunctionalityhasbeenimproved.APIcommandsarenowcapturedwhenrecordingaprofilingsessioninStudio,allowingsounddesignerstocreateAPIcommandcaptureswithouttheneedforprogrammersupport.
APIcapturesnowwriteouttheinitialstateoftheplaybacksystemincludingcurrentlyloadedbanksaswellasthestateofallcreatedeventinstances.ThisallowsAPIcapturestobetakenmid-gamewithoutmissinganyinformation.
Studio::System::loadCommandReplaynowreturnsaCommandReplayobjectthathasfunctionalityforqueryinginformationaswellasstarting,stopping,andpausingplayback.Playbackisnowasynchronous.
Multiplelistenersupport
TheStudioAPIhasbeenupdatedtosupportmultiplelisteners.Studio::System::setNumListenersandStudio::System::getNumListenershasbeenadded,andtheexistingStudio::System::setListenerAttributesandStudio::System::getListenerAttributesfunctionsnowtakealistenerindex.
Dopplerisdisabledwheninmultiplelistenermode.
Aspartofthischange,thereisanewDSPdataparameterFMOD_DSP_PARAMETER_3DATTRIBUTES_MULTIthatcanbeusedforDSPpannersthatwanttosupportmultiplelistenerpanning.
FADPCMCompression
Thisnewcompressionformatisrecommendedforalldeveloperstargetingmobiledevices,PSVitaorWiiUandisconsideredadropinreplacementforIMAADPCMcompression.Itachievesaslightlyhighercompressionratio,3.66:1comparedwith3.55:1whilebeingastepupinquality.Howeverthemainbenefitofthisnewcustomformatisthegroundupdesignforefficientdecoding,insomecasestwiceasfastasIMAADPCM.
FirelightTechnologiesFMODStudioAPI
What'sNewin1.05Thissectiondescribesthemajorfeaturesintroducedinthe1.05release.SeetheDetailedRevisionHistoryforinformationregardingeachpatchrelease.
MixerStripReplacedbyBusandVCA
TheStudio::MixerStripclasshasbeenreplacedbyStudio::BusandStudio::VCAtobetterreflectthedifferencesbetweenthetwoconcepts.Thenewclassesdonothaveareleasemethod,astheirhandlesremainvaliduntilthebankcontainingthemisunloaded.
GetEventfunctions
TheStudio::System::getEvent,Studio::System::getBus,Studio::System::getVCAandStudio::System::getBankfunctionsnowtakeastringthatcaneitherbethefullpathorthestringrepresentationoftheID.ThisavoidstheadditionalcalltoStudio::parseIDorStudio::System::lookupIDinmostcases.
ThefunctionstogetbyIDarenownamedStudio::System::getEventByID,Studio::System::getBusByID,Studio::System::getVCAByID,andStudio::System::getBankByID.
BusChannelGroupLifetime
Eachbus'schannelgroupisnowcreatedanddestroyedondemand.Thismeansitonlyexistsifatleastoneeventinstanceroutesintothebus.Ifitdoesn'texist,Studio::Bus::getChannelGroupwillreturnFMOD_ERR_STUDIO_NOT_LOADED.
EventInstanceReleaseBehaviorChange
Studio::EventInstance::releasenolongerinvalidatesthehandleimmediately.Instead,thehandleremainsvaliduntiltheinstancestopsandisactuallydestroyed.Inaddition,thisfunctionnolongerchecksiftheeventwillstopnaturally.Loopingeventswillnotbedestroyeduntiltheyaremanuallystopped.
ThischangealsomeansthateventcallbackswillcontinuetobefiredafterStudio::EventInstance::releaseiscalleduntiltheinstanceisactuallydestroyed.ThiscanbepreventedbysettingthecallbacktoNULLbeforecallingStudio::EventInstance::release.
EventStopBehaviorChange
Eventswithsoundstriggeredbyparameterswillnowstoponceallsoundshavefinishedandthetimelinecursorhasreachedtheend.Previouslytheseeventswouldgoidleinsteadofstopping.Theoldbehaviorcanbeachievedbyaddingasustainpointtothetimeline.
DeprecatedFunctionRemoved
Studio::EventInstance::createSubEventhasbeenremoved.UseEventSoundsinstead.
WideStringAPI
AllFMODfunctionsdealingwithfilenamesandpathsnowacceptUTF-8encodedstrings.AllargumentsthattakeorreturnUTF-16encodedstringshavebeenremoved,ashaveflagsthatindicateanUTF-16stringhasbeenpassed.
UTF-8encodedstringscanbeusedtoaccessfilepathscontainingnon-ASCIIcharactersonWindows,PS3,PS4,PSVita,XBoxOne,iOS,Android,Mac,Linux,WindowsPhone,andWindowsStore.
AddedAACSupportforAndroid
ItisnowpossibletoloadAACfilesonAndroid4.2ornewerdevices.Thiscanmakeuseofanyhardwareaccelerateddecodingprovidedbytheplatform.
ImprovedLoggingOutput
ForgreatercontroloftheloggingversionofFMOD,i.e.fmodL/fmodstudioLyoucannowuseFMOD::Debug_Initializetospecifybothlogginglevelanddestination.BydefaultalloutputwillgototheTTY/stderr/logcat/platformspecificdebuglocation.UsingthisnewAPIyoucanalsosendoutputtofileorcallbackforintegrationintocustomloggingsystems.
DSPResetCallbackBehaviorClarified
TheFMOD_DSP_RESET_CALLBACKdocumentationhasbeenupdatedtomakeitclearthatitshouldleavepublicparametersunchanged.
FirelightTechnologiesFMODStudioAPI
What'sNewin1.04Thissectiondescribesthemajorfeaturesintroducedinthe1.04release.SeetheDetailedRevisionHistoryforinformationregardingeachpatchrelease.
StudioProfiling
FMODStudionowsupportsprofiling.Profilingsendsevent,parameter,andbusinformationacrossthenetworktoFMODStudio,allowingtheprofilingsessiontobevisualisedandreplayed.ProfilingissupportedautomaticallywhentheFMOD_STUDIO_INIT_LIVEUPDATEflagisused.
Notethattheexistinglowlevelprofilerisstillsupported,andcanbeusedforin-depthanalysisoftheDSPgraphwhenusingtheStudioAPIortheLowLevelAPI.ThelowlevelprofilerisprovidedintheWindowsorMacProgrammer'sAPIpackageasthe"FMODProfiler"executable.ThelowlevelprofilerissupportedautomaticallywheneithertheFMOD_STUDIO_INIT_LIVEUPDATEorthelowlevelFMOD_INIT_PROFILE_ENABLEflagisused.
AudioTables
FMODStudionowsupportsaddingaudiotablestobanks.ThesearedesignedtoholdlargenumbersofsoundsforusecaseslikelocalizedVO.Eachentryinthetableisidentifiedbyakeystring,andthemappingfromkeytosoundcanbechangedbyloadingadifferentaudiotable.
Touseanaudiotableentry,lookitupwithStudio::System::getSoundInfoandthenpasstheresultinginformationtoSystem::createSound.ThissoundwillcontainasubsoundthatcanbeusedwithFMOD_STUDIO_EVENT_CALLBACK_CREATE_PROGRAMMER_SOUNDorplayedbackdirectly.Notethatthebankcontainingtheaudiotablemustbeloadedforthelookuptosucceed.
Sub-EventsDeprecated
Sub-eventsarenowdeprecated.ThismeansStudio::EventInstance::createSubEventwillberemovedinafuturerelease.NotethatEventSoundsarestillsupported,andarethepreferredmechanismforeventnesting.
EventCallbackChanged
FMOD_STUDIO_EVENT_CALLBACKnowhasanextraFMOD_STUDIO_EVENTINSTANCE*parameter.Thissimplifiescallbackimplementation,asyounolongerneedtocheckthecallbacktypeinordertogettheevent.
DeprecatedFunctionsRemoved
Somefunctionsthatweredeprecatedhavenowbeenremoved:
Studio::EventInstance::getLoadingState-useStudio::EventDescription::getSampleLoadingStateinsteadStudio.Factory.System_Create(C#only)-useStudio.System.createinsteadStudio.System.init(C#only)-useStudio.System.initializeinstead
PS3Support
FMODStudionowofficiallysupportsPS3.
WiiUSupport
FMODStudionowofficiallysupportsWiiU.
LinuxSupport
FMODStudionowofficiallysupportsLinux.
WindowsPhone8.1Support
FMODStudionowofficiallysupportsWindowsPhone8.1.
FirelightTechnologiesFMODStudioAPI
What'sNewin1.03Thissectiondescribesthemajorfeaturesintroducedinthe1.03release.SeetheDetailedRevisionHistoryforinformationregardingeachpatchrelease.
ThreadingChanges
FMODStudiohassupportformulti-threadinginbothlow-levelandStudioAPI.TheStudioAPIsupportsissuingcommandsfromanynumberofthreads,andbydefaultnowdoesallexecutioninitsownthread.TheLowLevelAPInowsupportsthreadsafetybydefault.FMODStudioandLowLevelthreadingandthreadsafetycanbedisabledwithnewinitializationflags.SeetheThreadsandThreadSafetysectionformoreinformation.
HandleandStudioAPIChanges
Aspartofthethreadingchanges,theStudioAPIhandlesystemhasbeenchanged.TheStudioC++APInowmatchestheLowlevelC++APIwhichhasapointer-basedsystem.ThismeansexistingcodewillhavetochangefromdirectlyusingStudiotypestoretrievingandcallingAPIwithapointerstyle.Theunderlyinghandlesystemhasbeenrewrittentobethread-safeandmoreefficient.ThischangealsomeansthattheCAPInowproperlydealswithinvalidhandlessafely,andthattheCAPIandC++APItypesareequivalentandcanbecastbetweeneachother.SeetheHandleSystemformoreinformation.
RecordingandPlayback
AllStudioAPIcallscanberecordedtoafileandplayedbackatalatertime.Thisisintendedfordebugfunctionality.SeeStudio::System::startRecordCommands,Studio::System::stopRecordCommandsandStudio::System::playbackCommandsformoredetails.
StudioEnumerationFunctions
FMODStudioenumerationfunctionshavebeenchangedtoagetCount/getListstylewhichisthread-safeandaccessiblebytheCinterface.Morefunctionshavebeenaddedtoenumeratebanks,events,andmixerstrips.SeeStudio::System::getBankCount,Studio::System::getBankList,Studio::Bank::getEventCount,Studio::Bank::getEventList,Studio::Bank::getMixerStripCount,Studio::Bank::getMixerStripList,Studio::EventDescription::getInstanceCount,andStudio::EventDescription::getInstanceList.
Eventsinmultiplebanks
FMODStudionowsupportsduplicateeventsinmultiplebanks.Studioresourcesarereferencecountedandloadingwillskiptheeventdatathathasalreadybeenloadedinanexistingbank.
ErrorCallback
AllLowLevelAPIandStudioAPIerrorscannowbeinterceptedbyregisteringausercallback.Thecallbackincludesthefunctionthatgeneratedtheerror,theinstancedata,andtheoptionalfunctionparameterarguments.ThisisparticularlyusefulforStudioAPIcommandswhichhavebeendeferredtorunontheStudioasynchronousthread.SeeSystem::setCallbackformoreinformation.
PSVitasupport
FMODStudionowofficiallysupportsPSVita.
WindowsStoreApplicationssupport
FMODStudionowofficiallysupportsWindowsStoreApplicationsforbothx86andARMdevices.
AdditionalStudiofeatures
FMODStudionowsupportssoundsplacedontransitiontimelines,transitionmarkerprobability,andloopregionprobability.
Documentation
TheStudioAPIdocumentationhasnowimprovedandextended.
FirelightTechnologiesFMODStudioAPI
What'sNewin1.02Thissectiondescribesthemajorfeaturesintroducedinthe1.02release.SeetheDetailedRevisionHistoryforinformationregardingeachpatchrelease.
AndroidPlatform
FMODStudionowofficiallysupportstheAndroidplatform.
UnitySupport
FMODStudiohasaddedsupportfortheUnitygameengineviaanativeplugin.
NewBankLoadingAPI
TheexistingloadBankAPIhasbeenrenamedtoStudio::System::loadBankFile,andtwoextraversionshavebeenadded.Studio::System::loadBankMemoryallowsloadingfromamemorylocation.Studio::System::loadBankCustomsupportsloadingbankswithbank-specificcallbackstodothereading.
Memoryandperformanceoptimisations
ThisrevisionincludesanumberofmemoryandCPUoptimisationstobothlow-levelandtheStudioAPI.
Documentation
FMODStudionowshipswithdocumentationthatcoversthefullAPI.
FirelightTechnologiesFMODStudioAPI
What'sNewin1.01Thissectiondescribesthemajorfeaturesintroducedinthe1.01release.SeetheDetailedRevisionHistoryforinformationregardingeachpatchrelease.
Sends
SupporthasbeenaddedforSendDSPconnectionstosendsounddatatodifferentareasofthemixgraph.
FadePoints
Supporthasbeenaddedforsettingsample-accuratefaderamppoints.ThefadepointsallowStudiotoschedulesoundvolumegradientstooccurinfuturemixes.
StudioAPI
AnumberofadditionalStudioAPIfunctionshavebeenadded.Seetherevision.txtformoredetails.
FirelightTechnologiesFMODStudioAPI
WindowsSpecificStarterGuideSDKVersion
FMODiscompiledusingthefollowingtools.
VisualStudio-version2012targetingplatformtoolsetv110_xp.
Compatibility
FMODsupportsthebelowarchitecturesbacktoWindowsXP.
x86-optimizedwithSSE3.x86_64-optimizedwithSSE3(andAVXifdetectedatruntime).
Libraries
TheprovidedlibsareimportlibrarieswhichrequirethecorrespondingDLLtobepresentatruntime.
FMODLowlevellibrary
/api/lowlevel/lib/fmod_vc.lib-Release32-bitbinaryforproductioncode(requiresfmod.dllatruntime)./api/lowlevel/lib/fmodL_vc.lib-Release32-bitbinarywithloggingenabledfordevelopment(requiresfmodL.dllatruntime)./api/lowlevel/lib/fmod64_vc.lib-Release64-bitbinaryforproductioncode(requiresfmod64.dllatruntime)./api/lowlevel/lib/fmodL64_vc.lib-Release64-bitbinarywithloggingenabledfordevelopment(requiresfmodL64.dllatruntime).
FMODStudioRuntimelibrary(usedinconjunctionwithlowlevellibrary)
/api/studio/lib/fmodstudio_vc.lib-Release32-bitbinaryforproductioncode(requiresfmodstudio.dllatruntime)./api/studio/lib/fmodstudioL_vc.lib-Release32-bitbinarywithloggingenabledfordevelopment(requiresfmodstudioL.dllatruntime)./api/studio/lib/fmodstudio64_vc.lib-Release64-bitbinaryforproductioncode(requiresfmodstudio64.dllatruntime)./api/studio/lib/fmodstudioL64_vc.lib-Release64-bitbinarywithloggingenabledfordevelopment(requiresfmodstudioL64.dllatruntime).
COM
BeforecallinganyFMODfunctionsitisimportanttoensureCOMisinitialized.YoucanachievethisbycallingCoInitializeEx(nullptr,COINIT_APARTMENTTHREADED)oneachthreadthatwillinteractwiththeFMODAPI.ThisisbalancedwithacalltoCoUninitialize()whenyouarecompletelyfinishedwithallcallstoFMOD.
IfyoufailtoinitializeCOM,FMODwillperformthison-demandforyouissuingawarning.FMODwillnotuninitializeCOMinthiscasesoitwillbeconsideredamemoryleak.
ToensurecorrectbehaviorFMODassumeswhenusingtheWASAPIoutputmode(defaultforWindowsVitaandnewer)thatyoucalloutputrelatedfunctionsfromyourUIthread.Thisensuresthatanyplatformspecificdialogsthatneedtobepresentedcandoso.ThisrecommendationcomesfromtheIAudioClientinterfacedocsonMSDNwhichstate:
InWindows8,thefirstuseofIAudioClienttoaccesstheaudiodeviceshouldbeontheSTAthread.CallsfromanMTAthreadmayresultinundefinedbehavior.
https://msdn.microsoft.com/en-us/library/windows/desktop/dd370865.aspx
KnownIssues
Noknownissues,[email protected].
mailto:[email protected]
FirelightTechnologiesFMODStudioAPI
PerformanceReferenceThisdocumentisacompanionfortheperformancetutorialdocumentandservesasaquickreferenceoffactstargetingthisplatform.
FormatChoice
EachcompressionformatprovidedinFMODhasareasonforbeingincluded,thebelowlistwilldetailourrecommendationsforthisplatform.Formatslistedasprimaryareconsideringthebestchoice,secondaryformatsshouldonlybeconsiderediftheprimarydoesn'tsatisfyyourrequirements.
Vorbis:Primaryformatforallsounds.FADPCM:SecondaryformatifVorbisCPUusageistoohighforlowspecmachines.PCM:Notrecommended.XMA:Unavailable.AT9:Unavailable.
VoiceCount
Togivedevelopersanideaaboutthecostsofaparticularformatweprovidesyntheticbenchmarkresults.TheseresultsarebasedonsimpleusageoftheFMODStudioAPIusingrecommendedconfigurationsettings.
Settings
Voicecount:64Samplerate:48KHzSpeakermode:StereoDSPblocksize:1024samples
TestDevice
CPU:[email protected]:WindowsXP
Results
DSPwithVorbis:22.2%(+/-1.6%)DSPwithFADPCM:5.5%(+/-0.1%)DSPwithPCM:3.3%(+/-0.1%)Updateat60FPS:0.8%(+/-0.2%)
FirelightTechnologiesFMODStudioAPI
DetailedRevisionHistory06/12/171.10.02-StudioAPIminorrelease(build92217)
Features:
LowLevelAPI-UWP-AddedWindowsSonicsupport.LowLevelAPI-UWP-AddedsupportforsettingthreadaffinityviaFMOD_UWP_SetThreadAffinity.
Fixes:
StudioAPI-FixedQuieteststealingbehaviorsoneweventsdon'tstartiftheyarequieterthanallcurrentlyplayingevents.StudioAPI-FixedbusesthathavereachedtheirMaxInstanceslimitincorrectlypreventingtheirinputbusesfromapplyingtheirstealingbehavior.StudioAPI-Fixedacrashcausedbywavfileswithinvalidlooppoints.LowLevelAPI-FixedrecordingdevicesstillbeingmarkedasconnectedwhenswitchingtoFMOD_OUTPUTTYPE_NOSOUND.LowLevelAPI-UWP-Madedevicereset/unplugbehaviormorerobustagainstfailure.LowLevelAPI-XboxOne-FixedWASAPIiniterrorifWinSonicwasattemptedfirst.FSBankAPI-Fixedcrashin64bitversionwhenencodinglowsampleratemonosoundsasVorbiswithlowquality.Unity-PlayOneshotandPlayOneshotAttachednowlogawarningwhentheeventisnotfound,ratherthanthrowinganexception.
Notes:
AddedResonanceAudiopluginversion1.0,thispluginrepresentsthecontinuationoftheGoogleVRpluginundernewbranding.TheGoogleVRpluginisnowconsidereddeprecatedinfavourofResonanceAudio,
considermigratingtothenewpluginastheGVRpluginwillberemovedinFMOD1.11.XboxOne-NowbuiltwithJune2017QFE8XDK.
01/11/171.10.01-StudioAPIminorrelease(build91339)
Features:
UE4-ExposeBus::stopAllEventstobeuseablethroughblueprints.Unity-Eventlengthdisplayedineventbrowserforoneshotevents.
Fixes:
StudioAPI-Fixedmodulationonplugininstrumentsusingtheparentevent'slifetimeratherthantheinstrument'slifetime.StudioAPI-Fixedaliveupdateissuewhereassetfileswouldnotreloadafterbeingmovedondisk.StudioAPI-FixedabugwhichcausedsoundstopanincorrectlywhenusingFMOD_INIT_3D_RIGHTHANDED.StudioAPI-PS4-Fixedexcessivebinarysizecausedbyinclusionofdebugsymbols.LowLevelAPI-Fixedpotentialcrashwhenre-initializingFMOD::Systemafterfailure.LowLevelAPI-FixedcompatibilityissueswithWindowsXP.LowLevelAPI-Android-Fixedexportedsymbolstoavoidissueswithunwinder.LowLevelAPI-Android-AutomaticoutputmodeselectionwillnowchooseAudioTrackratherthanOpenSLifBluetoothisenabledtoavoidstuttering.LowLevelAPI-XboxOne-EnsureWinSonicinternalthreadsareassignedtothesamecoreastheFMODmixer.FSBankAPI-Fixedcrashwhenencodingverylongaudiofiles.UE4-Integrationnowhandlesapplicationinterruptionbypausingandresumingthemixer.UE4-FixedSetEventnotsettingorusingnewevent.UE4-FixedXboxOnethreadaffinitystructsetup.UE4-Removedengineversionifdef's.UE4-Fixedintegrationattemptingtosettheinitialvalueofbuilt-inparameters.
Unity-FixedcompatibilityforUnity5.0&5.1.Unity-Addedchecktoseeifanybankshavebeenloadedbeforetryingtopause.Unity-AllowStringHelpertofastreturnifstringisnull.
Notes:
UpdatedGoogleVRplugintoversion0.6.1.StudioAPI-Studio::EventInstance::set3DAttributesandStudio::System::setListenerAttributeswillnowreturnFMOD_ERR_INVALID_PARAMiftheforwardorupvectorsarezero.Inloggingbuildswarningswillbeloggediftheforwardandupvectorsarenotorthonormal.LowLevelAPI-Theconvolutionreverbeffectwillnotacceptimpulseresponsedataifthesystemisnotusingapower-of-twoDSPbuffersize.WindowsSoniccurrentlyrequiresaDSPbuffersizeof480makingitincompatiblewithconvolutionreverbuntilthisrequirementislifted.PS4-NowbuiltwithSDK5.008.001.Unity-Exposededitorscriptclassesforin-gameFMODobjectsaspublic.Unity-ExposedStudioEventEmitter'sEventInstanceaspublictoalloweasierintegrationwithcustomplugins.
19/09/171.10.00-StudioAPImajorrelease(build90329)
Features:
LowLevelAPI-AddedFMOD_MAX_SYSTEMSconstant,currently8.LowLevelAPI-ExposedFMOD_DSP_FADER_GAINonFMOD_DSP_TYPE_FADER.LowLevelAPI-AddedFMOD_SPEAKERMODE_7POINT1POINT4speakermodewhichincludesfourheightspeakerstobeusedwithWindowsSonicoutput.LowLevelAPI-AddedFMOD_DSP_PAN_2D_HEIGHT_BLENDparametertoFMOD_DSP_TYPE_PANthatallowsmixinggroundspeakersignalintotheheightspeakersandviceversa.LowLevelAPI-Windows&XboxOne-AddedWindowsSonicoutputplugintosupportrenderingmultichannel(withheight)speakermode7.1.4aswellasdynamicobjectsviaFMOD_DSP_TYPE_OBJECTPAN.LowLevelAPI-PSVita-SwitchedFMOD_PSVita_SetThreadAffinitytoacceptamaskinsteadofacorenumbertoallowfloatingthreads.LowLevelAPI-AddedFMOD_OUTPUT_REQUESTRESETtoFMOD_OUTPUT_STATEtoallowoutputpluginstorequesttheyberesetbytheSystem.
Fixes:
StudioAPI-Sequentialmultiandscattererinstrumentsnowtracktheircurrentplaylistentryonaper-event-instancebasis,ratherthanglobally.UE4-RemovedallreferencetoOculus,nowthatOculusfunctionsasallotherFMODStudioplugins.UE4-RemovedalllegacyUE4versioncode,ifyouarenotusingUE4.16thepluginwillnotworkwithoutmakingchangestosourcecode.UE4-Overhauleddetailsinteractionineditorandimprovedusability.GroupedallFMODfunctionalitytogether,addedParameters,andremovedunnecessaryinformationfromattenuation/occlusion.Unity-RemovedgarbageallocationsfromC#wrapper.
Notes:
UpdatedGoogleVRplugintoversion0.6.0.LowLevelAPI-FMOD_DSP_TYPE_ENVELOPEFOLLOWERisnowdeprecatedandwillberemovedinafuturerelease.LowLevelAPI-IncrementPluginAPIversionforOutputplugins.DynamiclibraryOutputPluginsmustberebuilt.StudioAPI-Changedthebehaviourofnestedeventstostopwhenidleevenwhenthereareinstrumentsonparameters.Thismakesnestedeventsmatchthebehaviouroftoplevelevents.Eventswhichdependontheoldbehaviourneedtobemanuallyfixedupby(forexample)addingasustainpointtothenestedeventstimeline.Android-Loggingversionwillnowproducepropercrashstacksbutduetobinarysizeincreasethereleaseversionwillcontinuetonot.XboxOne-Removed"acp"and"feeder"fromFMOD_DURANGO_THREADAFFINITY.Boththreadswereremovedinpreviousversionsandsettingthemdidnothing.UE4-AudioComponentsusingocclusionfrompreviousversionsareNOTcompatiblewiththisversion.OcclusionandAttenuationnowdonotrelyonUE4structs.
11/09/171.09.08-StudioAPIminorrelease(build90162)
Fixes:
LowLevelAPI-Fixedextraneouslogging.
07/09/171.09.07-StudioAPIminorrelease(build90008)
Features:
UE4-Cachedspusedforocclusionlowpasseffect&addsupportforuseofMultibandEQ(lowpassonbandAonly).UE4-FMODAudioComponentnowreuseseventinstancesuntiltheobjectisnolongerneededorRelease()iscalled.UE4-AddedsupportforUWP.Unity-AddedsupportforUnityv2017.1.Unity-AddedabuttonintheFMODmenuforRefreshingBankfiles.
Fixes:
StudioAPI-FixedscatterersoundsbeingprocessedbyFMOD::Geometry.StudioAPI-Fixedmulti-streameventsplayingoutofsync(introducedin1.09.01).LowLevelAPI-FixedChannelControl::setDelaybeingignoredifaddDSPwascalledimmediatelyafterit.LowLevelAPI-FixedpotentialcrashifcallingChannel::setPositionsoonafterSystem::playSoundwithpausedastrue.LowLevelAPI-FixedclickonChannel::setPaused(false)causedbyanon-zeroChannel::setPositionafterSystem::playSoundwithpausedastrue.LowLevelAPI-FixedpotentialcrashifcallingSystem::getRecordPositionwhiledisconnectinganaudiodevice.LowLevelAPI-FixFMOD_ACCURATETIMEnotloopingmod/s3m/xm/itfilesproperly,andmidifilesnotloopingproperlywithouttheflag.LowLevelAPI-FixedcrashwhenattemptingtoloadinvalidVSTfiles.UE4-FixcompileerrorbyaddingcategoriestoAnimNotifyvars.Unity-Switch-Fixed"unknownpointerencoding"errorwhenanexceptionoccurs.Unity-FixpluginpathforUWPbuilds.Unity-FixedpossiblecrashwhenusingGoogleVRplugin.Unity-FixEventEmitterSetParameternotworkingunlessparameterhadaninitalvaluesetineditor.
Notes:
StudioAPI-Reducedmemoryusageforeventswithasmallnumberofinstances.LowLevelAPI-FMOD_CREATESOUNDEXINFO::initialseekpositionwillnowwrapifthevaluegivenislongerthantheFMOD::Soundlength.LowLevelAPI-Addeddocumentationtothetopoffmod_codec_rawtobemoreinstructionalforpluginwriters.UE4-AddedsupportforUE4.17.Unity-Devicespecificerrorswillnowcauseonlyasingleexceptiontobethrownandtheintegrationwillassumeno-soundmode.Switch-NowbuiltwithSDK1.7.0.XboxOne-NowbuiltwithMarch2017QFE3XDK.
06/07/171.09.06-StudioAPIminorrelease(build88495)
Features:
StudioAPI-ImprovedperformancewhenalargenumberofEventInstanceshavebeencreatedbutnotstarted.LowLevelAPI-HTML5-Performanceincreasedby10%.
Fixes:
StudioAPI-Fixedabugwhereanasynchronousloopingmultiinstrumentwouldstopselectingnewplaylistentriesafterplayinganestedeventwhichitselfcontainsanasynchronousloopingmultiinstrument.StudioAPI-Fixedabugwhereaparametercouldtriggerparameterinstrumentsbeforehavingitsvalueupdatedbymodulatorswhenrestartinganeventinstance.StudioAPI-Fixedincorrectautomationinterpolationontransitiontimelineswithlead-outregions.LowLevelAPI-FixedDSPswithsidechaininputsincorrectlygoingidlewhenthemaininputisidlebutthesidechaininputisnot.LowLevelAPI-FixedthecompressorDSPnotplayingoutitsreleasecorrectlywhenitsinputsareidle.LowLevelAPI-RemovemainthreadstallfromSystem::playDSP(orplayingageneratorDSPviaStudioAPI).UE4-SequencerintegrationnowsupportspreviewingeventplaybackinaneditorviewportbyusingtheSequencertransportcontrols.ASequencersectionhasbeenaddedtothedocumentation.UE4-AddedAreBanksLoadedfuntiontoFMODStudioModule.Unity-EventsinEventBrowserwindownowinalpabeticalorder.Unity-SettingparametersonStudioEventEmitternolongergeneratesgarbage.
Notes:
LowLevelAPI-AddedcheckingtoSystem::mixerResumetoensurecalled
fromthesamethreadasSystem::mixerSuspend.XboxOne-NowbuiltwithOctober2016QFE3XDK.
08/06/171.09.05-StudioAPIminorrelease(build87666)
Features:
LowLevelAPI-Switch-AddedsupportforHTCsocketstoallowcommunicationsbetweenFMODtoolsandruntimeviatargetmanager.EnableusingFMOD_NX_SetHTCSEnabled(TRUE).LowLevelAPI-XboxOne-AddedsupportforSystem::attachChannelGroupToPortwithFMOD_DURANGO_PORT_TYPE_MUSIC.
Fixes:
StudioAPI-FixedFMOD_ERR_INTERNALreturnedwhenloadingoldbankfilescontainingtransitiontimelineautomationofinstrumentvolumes.StudioAPI-Fixedbugwhereveryshortinstrumentswouldnotplaywhencrossfading.StudioAPI-MadechangestothelogicinEventDescription::isOneShotsothatitconsistentlyreturnstrueforeventswhichareguaranteedtofinishwithoutintervention,andfalseforeventswhichmayplayindefinitely.LowLevelAPI-FixedChannelControl::setMixLevelsInputnotworkingandupdateddocs.LowLevelAPI-FixedChannel::setLoopCountnotworkingwithverysmallstreams.LowLevelAPI-StrictererrorcheckingwhenloadingIMAADPCMwavfilestopreventapotentialcrashfrommalformeddata.LowLevelAPI-FixedpotentialcrashinChannelGroupoperationswhenaChannelfailedtoplayonitwithFMOD_ERR_SUBSOUNDS.LowLevelAPI-FixedConvolutionreverbpanningamonoIRwithastereoinputincorrectly.LowLevelAPI-FixedraceconditionswhensettingFMOD_DSP_SEND_RETURNID.LowLevelAPI-FixedacrashwithsomeMOD/S3M/XM/ITfiles.Introducedin1.09.00.LowLevelAPI-System::setDSPBufferSizewillroundtherequestedbuffer
sizeuptotheclosestmultipleof4topreventacrashwhensendingmeteringdatatostudio.LowLevelAPI-PS4-FixedGPUcomputecompatibilityissuewithSDK4.508.001.GPUcomputeisnowre-enabled.LowLevelAPI-Switch-ReducedthreadprioritytoavoidconflictwithProfiler.LowLevelAPI-Windows-FixedASIOoutputmodefailingtoinitializeifthedevicesrequiresabuffersizeof2048samples.Unity-FixedbankdirectorypathseparatorswhendevelopingacrossOSX&Win.Unity-FixedsimulatedAndroiddevicesproducingnosound.Unity-BankLoadExceptionnowdisplayerrormessagecorrectly.Unity-Fixedbankloadingandunloadingrefcountaccuracy.Unity-FixedMaceditorattemptingtoloadLinuxpluginswhenbuildingforLinuxplatform.Unity-Improveddetectionof3DEventInstancesthathaven'thadtheirpositionsetyet.UE4-FixedintegrationworkingwithUE4'sIWYUnon-monolithicheadersystem,fornowtheintegrationisstillusingtheoldPCHsystem.UE4-AddednewnativeAnimNotifyclass,oldonedidn'tworkoncodeprojects.UE4-Sequencerintegration.FMODeventscanbestartedandstoppedandeventparameterscanbecontrolledbyaddingcustomtrackstosequencer.UE4-Fixedmaxvorbiscodecsnotbeingsetcorrectly.UE4-Fixedfilereadersbeingaccessedfrommultiplethreads.
Notes:
UE4-AddedsupportforUE4.16.
Notes:
UpdatedGoogleVRplugintoversion0.4.0,pleasenotethereisaknowncrashwhenloadingthepluginonWindowsXP,Googleareawareandinvestigating.
10/04/171.09.04-StudioAPIminorrelease(build86084)
Fixes:
StudioAPI-Fixeddelayedplaybackonstreamingsoundsinevents(introducedin1.09.03).StudioAPI-FixedAHDSRreleasenotworkingonsinglesoundsshorterthan100milliseconds.StudioAPI-FixedEventDescription::is3Dreturningtrueforeventsthatonlyhave2Dpanners.StudioAPI-SetprogrammersoundstoFMOD_LOOP_NORMALinternallyiftheywerenotcreatedthatway.StudioAPI-Fixedregressionintroducedin1.09.00whichallowedeventstoplayattheoriginbefore3dattributeswereupdated.StudioAPI-Fixedissuewherereverbtailwouldcutoffwhenalleventsonabusfinishedplaying.LowLevelAPI-FixedFMOD_DSP_TRANSCEIVERmakingchannelsaudiblethatweren'tsupposedtobe(introducedwithglitchfixin1.09.03).LowLevelAPI-FixedloopclicksonPCMsoundsifusingFMOD_DSP_RESAMPLE_CUBICorFMOD_DSP_RESAMPLE_SPLINE.LowLevelAPI-FixedFMOD_ADVANCEDSETTINGS::resamplerMethodbeingignored.LowLevelAPI-Fixedpluginunloadingformulti-descriptionlibrariespotentiallyfailingdependingonhowit'sunloaded.LowLevelAPI-Fixedstreamglitchwhengoingvirtualthenresuming.LowLevelAPI-Fixedvirtualvoiceslosingtheirloop/2d/3dstatus,andnotstayingvirtualifChannel::setModewasused.Introducedin1.09.00.LowLevelAPI-FixedFMOD_UNIQUEnotbeingacceptedifChannel::setModeorSound::setModewasused.(itcouldbesuccessfullyusedviacreateSound/createStream).LowLevelAPI-Fixedrarecrashinmixer,introduced1.09.00.LowLevelAPI-Switch-FixedFMOD_NX_THREADAFFINITYsocorescanbeORdtogethertoformamask.LowLevelAPI-PS4-GPUcomputedisabledduetoanincompatibilitywithSDK4.508.001.
LowLevelAPI-Windows/Mac-Re-enableSRSdownmixer80Hzhighpassfilterbydefault.AddFMOD_INIT_DISABLE_SRS_HIGHPASSFILTERinitflagtodisableit.FSBankAPI-FixedPSVitaAT9encodernotworkingwithcurrentlyavailableSonylibrary.FSBankAPI-Fixedfullscale32bitfloatwavfilesencodingincorrectly.
Notes:
StudioAPI-FMODexpectsprogrammersoundstobecreatedwithFMOD_LOOP_NORMAL.ThisisnowspecifiedintheFMOD_STUDIO_PROGRAMMER_SOUND_PROPERTIESdocumentation.FSBankAPI-BuildinganFSBwithPSVitaAT9encodingnowrequires64bit.PS4-NowbuiltwithSDK4.508.001.Switch-NowbuiltwithSDK0.12.17.XboxOne-NowbuiltwithOctober2016QFE2XDK.
20/03/171.09.03-StudioAPIminorrelease(build85359)
Features:
LowLevelAPI-Updatedthe/examples/dsp_customexampletoincludealotmorefunctionalityincludingparameters,andcaptureofwavedata.LowLevelAPI-Addfmod_reduced.jsforreducedfunctionality,butalsoreducedsize.LowLevelAPI-Switch-Addedsupportforsettingthreadaffinity.StudioAPI-Reducedsizeoffmodstudio.jsand.memfiles.
Fixes:
StudioAPI-Fixedeventdopplersettingsnotbeingappliedtosoundsspawnedbyscatterer.StudioAPI-FixedbusandVCAhandlesnotbeingsetupproperlyinStudio::Bank::getBusListandStudio::Bank::getVCAList.StudioAPI-FixedcrashescausedbystoppingeventsthatareroutedintoabuswithinstancelimitingenabledwhentheyareintheFMOD_STUDIO_PLAYBACK_STARTINGstate.StudioAPI-Fixedtempoandmarkereventcallbacksnotbeingfiredwhenthetimelinecursorisinthelead-inorlead-outregionofatransitiontimeline.LowLevelAPI-FixedglitcheswithTransceiverDSPafterinputsgoidle.LowLevelAPI-FixChannel::setPosition(pos,FMOD_TIMEUNIT_MODORDER)notworkingwhenplayingpaused.LowLevelAPI-Fixedshortstreamscreatedasnon-loopingthenswitchedtoloopingviatheChannelAPInotloopingseamlessly.LowLevelAPI-FixedDSPpluginversion>=109dataparametersotherthan3DattributesnotapplyingifFMOD_INIT_3D_RIGHTHANDEDisused.LowLevelAPI-FixedrarecrashinFMODPannerDSP.Introducedin1.09.00.LowLevelAPI-Re-FixMOD/S3M/XM/ITfilecrashwithsamplesthathave0length,for1.09only.
LowLevelAPI-FixedpotentialmemoryleakifSystem::initreturnedanerror.LowLevelAPI-FixFMOD_ACCURATETIMEnotloopingamodfileproperly,andnotseekingcorrectlywithFMOD_TIMEUNIT_MODORDER.LowLevelAPI-HTML5-LoadingFSBsoundsdidnotworkproperly.LowLevelAPI-Windows-Fixed5.1->stereoSRSdownmixcausinglackofbass.LowLevelAPI-Windows-FixFMOD_INIT_PREFER_DOLBY_DOWNMIXnotworking.FSBankAPI-FixcrashifFSBANK_INIT_GENERATEPROGRESSITEMSisnotused.Unity-Removederrorwhenpluginfieldisaddedbutempty.UE4-Removederrorwhenpluginfieldisaddedbutempty.
Notes:
UE4-AddedsupportforUE4.15.
15/02/171.09.02-StudioAPIminorrelease(build84334)
Fixes:
Unity-RemoveifdeffromEnforceLibraryOrderasitisn'tharmfulforstaticlibplatformstocallGetStats.UE4-OcclusioncannowuseMultibandEQinsteadofLowpassfilter.LowLevelAPI-FixcrashwhenconnectingtoFMODProfiler.exeandthereisacircularconnectionLowLevelAPI-FixglitcheswithTransceiverDSPafterinputsgoidle.LowLevelAPI-FixChannel::setPosition(pos,FMOD_TIMEUNIT_MODORDER)notworkingwhenplayingpaused.
09/02/171.09.01-StudioAPIminorrelease(build84153)
Features:
LowLevelAPI-AddedFMOD_DSP_STATE_FUNCTIONS::getlistenerattributestotheDSPpluginAPItoquerythecurrentlistenerattributes.Unity-AddedsupportforRigidbody2Din3Dattributesettingsandintegrationscripts.Unity-AddedsupportforObjectEnable/DisableonEventEmitterandParameterTriggerscripts.UE4-AddedGetLengthfunctionforblueprintsthatreturnstheeventlengthinmilliseconds.UE4-Improvedineditorprofilingstats.
Fixes:
Unity-FixedcompatibilitywithUnity4.6&4.7forOSXandIOS.Unity-Fixed"filenotfound"errorwhensettingsassetiscorruptUnity-Fixedset3DAttributesambiguity.Unity-FixednotbeingabletocopyReadOnlybanksintoStreamingAssets.Unity-FixedeventinstanceleakinUnityPlayOneshotAttachednotreleasing.Unity-SpecifiedversiontocheckforWiiUBuildTargetforearlyUnity5.UE4-FixedXboxOnedelayloaderrornowthatUE4handlesit.UE4-Android-AddedARM64support.StudioAPI-AHDSRmodulatorcurveshapesnowworkcorrectly.InpreviousversionstheenvelopewasinterpolatedlinearlyregardlessoftheshapedisplayedintheUI.StudioAPI-Fixedloopingsinglesoundsinanasyncmultisoundbeingcut-offwhenthemultisoundisun-triggered.LowLevelAPI-FixedChannel::setReverbPropertiesnotresettingreverbconnectiontoanewtailDSPwhenturningwetmixoffandon.LowLevelAPI-Ifthesystemisinitializedinright-handedmode,FMODwillnowswaptoleft-handedwhenpassingattributesintoplugins.This
onlyappliestopluginsrebuiltagainstthisversion,oldpluginsremainunswapped.LowLevelAPI-FixMOD/S3M/XM/ITfilecrashwithsamplesthathave0length.LowLevelAPI-Fixedsomepotentialcrasheswhenrunningoutofmemory,thesewillcorrectlyreturnFMOD_ERR_MEMORYnow.LowLevelAPI-Win-FixedWASAPIrecordingdeviceenumerationtakingacoupleofsecondsafterSystem::initbeforebeingcorrect.LowLevelAPI-Win-FixedpotentialerrorreturnedfromSystem::updateifdeviceisunplugged.LowLevelAPI-MIDI-FixedSound::set/getMusicChannelVolumereferringtowrongtrackindicesratherthanjustanormal0-15trackindex.LowLevelAPI-MIDI-FixedChannel::setPositioncausinglouddrumbangnoiseafterseek
Notes:
StudioAPI-Whenloadinglegacybankswithloopingsoundsnestedinmultisounds,themultisoundissettocut-offallsoundswhenuntriggered,includingnon-loopingsounds.Thisisachangeinbehaviourcomparedtoearlierversionswhereonlyloopingsoundswerecut-off.LowLevelAPI-DSPpluginAPIversionhasbeenincreased,formaximumcompatibilitypluginwritersshouldonlyrebuildagainstthisversioniftheyneedthegetlistenerattributesfeature.Oldpluginsarestillsupported.Switch-NowbuiltwithSDK0.12.10
01/12/161.09.00-StudioAPImajorrelease(build82164)
Important:
AddedsupportfortheNintendoSwitchplatform.
Features:
StudioAPI-Addedsupportformultiplelistenerweights,withStudio::System::setListenerWeightandStudio::System::getListenerWeight.Thisallowslistenerstobefadedinoroutsmoothly.StudioAPI-ProfilinguseslessCPUandmemory.StudioAPI-AddedFMOD_STUDIO_INIT_LOAD_FROM_UPDATEtodriveallloadingfromStudio::System::updateratherthanthebankandresourceloadingthreads.Mainlyusedinnon-realtimesituations.StudioAPI-AddedabilitytorunreplaysatfasterthanrealtimespeedusingFMOD_STUDIO_COMMANDREPLAY_FAST_FORWARD.StudioAPI-AddedStudio::EventInstance::setReverbLevelandStudio::EventInstance::getReverbLevel.StudioAPI-Supportforautomationofmodulatorproperties.LowLevelAPI-Improvedmemoryusewhenloadingsoundswithnames.LowLevelAPI-Addednewefficientmultibandequalizer(FMOD_DSP_TYPE_MULTIBAND_EQ)featuring5toggleablebandswithvariablerollofflow/highpass,shelf,peaking,band-pass,all-passandnotchmodes.LowLevelAPI-AddedloggingfunctiontotheDSPpluginAPI.UseFMOD_DSP_LOGhelpermacrofromaDSPcallback.LowLevelAPI-AddedFMOD_DSP_STATE_FUNCTIONS::getuserdatatotheDSPpluginAPI.UseFMOD_DSP_GETUSERDATAhelpermacrofromaDSPcallback.FSBankAPI-AddedabilitytopassNULLastheFSBfilenameforFSBank_BuildcausingtheFSBtobebuiltinmemory.UseFSBank_FetchFSBMemorytogetaccesstothedataoncethebuildhascompleted.
Fixes:
StudioAPI-Fixedincorrectplaybackvolumeforinstrumentsandplaylistitemswhosevolumepropertyissettoanon-zerodBvalue.
Notes:
LowLevelAPI-IncrementedPluginSDKversionforDSPplugins.Dynamiclibrarypluginsbuiltwithearlierversionswillcontinuetoload.LowLevelAPI-IncrementedFMOD_CODEC_WAVEFORMATversion.Codecsthatprovidenamesmustkeepthenamememorypersistentforthelifetimeofthecodec.LowLevelAPI-IncrementPluginAPIversionforOutputplugins.DynamiclibraryOutputPluginsmustberebuilt.LowLevelAPI-FMOD_DSP_TYPE_LOWPASS,FMOD_DSP_TYPE_LOWPASS_SIMPLE,FMOD_DSP_TYPE_HIGHPASS,FMOD_DSP_TYPE_HIGHPASS_SIMPLEandFMOD_DSP_TYPE_PARAMEQareconsidereddeprecatedandwillberemovedinthefuture.UsethenewFMOD_DSP_TYPE_MULTIBAND_EQinsteadwhichhastheperformanceof"simple"effectswithfullfeaturedquality.LowLevelAPI-ChangedreverbwetmixtosendfromthefaderDSPofaChannelGroup.PreviouslyitsentfromtheheadDSP.Noweffectsplacedpre-faderwillapplytothesignalsenttothereverb,whileeffectsplacedpost-faderwillnot.LowLevelAPI-ChannelGroupreverbwetlevelisnowscaledbythegroup'seffectiveaudibility.LowLevelAPI-ChannelGroupreverbnolongerautomaticallydisablesreverbonitschildchannelswhenthewetlevelissettonon-zero.LowLevelAPI-Channel::setReverbPropertiesnowallowssettingthewetlevelbeforethespecifiedreverbinstancehasbeencreated.LowLevelAPI-ChannelControl::addDSPandChannelControl::removeDSPmanagestandardDSPconnections(FMOD_DSPCONNECTION_TYPE_STANDARD)tomaintainthemixerhierarchy.Otherconnectiontypes(FMOD_DSPCONNECTION_TYPE_SIDECHAIN,FMOD_DSPCONNECTION_TYPE_SEND_SIDECHAIN,andnow
FMOD_DSPCONNECTION_TYPE_SEND)areleftundisturbed.LowLevelAPI-FMOD_INIT_MIX_FROM_UPDATEwillnowdirectlyexecutethemixerfromSystem::updateinsteadoftriggeringthemixtohappeninanotherthread.StudioAPI-Incrementedbankversion,requiresruntime1.09.00orlater.StudioAPI-Latestruntimesupportsloadingoldbankversionsfrom1.03.00.StudioAPI-Studio::Bus::setFaderLevel,Studio::Bus::getFaderLevel,Studio::VCA::setFaderLevelandStudio::VCA::getFaderLevelisnowcalledStudio::Bus::setVolume,Studio::Bus::getVolume,Studio::VCA::setVolumeandStudio::VCA::getVolume.StudioAPI-Studio::EventInstance::getVolume,Studio::EventInstance::getPitch,Studio::EventInstance::getParameterValue,Studio::EventInstance::getParameterValueByIndex,Studio::Bus::getVolume,Studio::VCA::getVolumenowhaveanadditionalargumenttogetthefinalvaluewhichincludesautomationandmodulation.StudioAPI-TherequiredalignmentforStudio::System::loadBankMemoryhasbeenaddedastheconstantFMOD_STUDIO_LOAD_MEMORY_ALIGNMENT.StudioAPI-Eventinstancesnowdisablereverbontheirinternalchannels,forallglobalreverbinstances.Previouslyonlydidsoforreverbinstance0.UseStudio::EventInstance::setReverbLeveltocontrolthereverbmixforthewholeeventinstance.StudioAPI-Disconnectedsidechainmodulatorsarenowinactive.Previousbehaviorwastofallbacktomonitoringtheevent'smastertrackoutput.LowLevelAPI-FMOD_DSP_RELEASE_CALLBACKisnowcalledfromthemainthreadLowLevelAPI-UnimplementedChannelControl::overridePanDSPfunctionhasbeenremoved,alongwithFMOD_CHANNELCONTROL_DSP_PANNERenumvalue.LowLevelAPI-PS3-Removedoldopt-inFIOSsupportviaFMOD_PS3_EXTRADRIVERDATA.NewrecommendedapproachistouseFMOD_FILE_ASYNCREAD_CALLBACKandsetappropriatedeadlinesbasedonFMOD_ASYNCREADINFO::priority.LowLevelAPI-XboxOne-OptimizedXMAdecodingperformanceandremovedtheACPthread.LowLevelAPI-PS4-ImprovedAT9decodingperformance.FSBankAPI-Addedsupportforsourcedataasamemorypointerinsteadoffilename.
Documentation-SomeFMOD_DSP_PAN_SURROUNDenumschangedtoFMOD_DSP_PAN_2Dforclarity.
01/12/161.08.15-StudioAPIminorrelease(build82163)
Features:
PS4-AddsupportforSystem::getOutputHandle,toreturnsceporthandle.
Fixes:
UE4-FixmissingpluginerrorwhenbuildingonMac.
UE4-Fixedcompatibilitywith4.14.Unity-FixedOSXworkingwithunifiedlibrary.Unity-FixedWiiUcopyingbankserror.Unity-FixedXboxonedllmetafilesmissingplatformtarget.Unity-Fixedduplicatedllcopyingbuilderroronsomeplatforms.Unity-Addednullchecktostoperrorbeingthrownwhennoeventassigned.Unity-FixineditoroutofboundsexceptioninRuntimeManager.LowLevelAPI-AllowDSP::setParameterDatawithnulldataand0lengthtofreeconvolutionreverbimpulseresponsedata.LowLevelAPI-Fixedshortloopingstreamsplayingsomeofthestartwhenswitchedtonon-loopingviatheChannelAPI.LowLevelAPI-FixedFMOD_CREATESOUNDEXINFO::pcmsetposcallbackgettingwrongsoundpointerpassedtoitwithastream.StudioAPI-Fixedincorrectparametervaluesbeingpassedtonestedeventswhenvalue"hold"isbeingused.StudioAPI-PS3-FixpotentialcrashwiththenewChannelMixeffect.FSBankAPI-FixedencoderbugwithFADPCMcausingoccasionalclippingatplayback.
Notes:
FSBankAPI-FSBs/BanksmaynotbebinaryidenticaltopreviousreleaseduetoFADPCMencoderbugfix,howeverfullcompatibilityismaintained.
20/10/161.08.14-StudioAPIminorrelease(build80900)
Fixes:
UE4-Fixforcrashwhenusing"ValidateFMOD"menuitem
Notes:
PS4-NowbuiltwithSDK4.00XboxOne-Addedbetterlogginganddocumentationtodescribeanincorrectlyconfiguredappxmanifestregardingmicrophonerecording.
04/10/161.08.13-StudioAPIminorrelease(build80479)
Fixes:
StudioAPI-Fixedpotentialcrashafterthefollowingsequenceofactions:loadmasterbank,trytoloadmasterbankagainandfailwithFMOD_ERR_EVENT_ALREADY_LOADED,unloadmasterbank,reloadmasterbank.LowLevelAPI-FixcircularDSPconnectioncausinghangincertainsituations.Unity2-Fixissueswithmulti-objecteditingofemitters.
22/09/161.08.12-StudioAPIminorrelease(build80229)
Features:
Unity2-AddedabilitytooverrideminimumandmaximumdistanceforEventemitters.Unity2-Addedsupportformultiplelisteners.StudioAPI-Addedsupportforautopitchatminimum.StudioAPI-Addedsupportfortheglobalmasterbusbeingduplicatedacrossbanks.
Fixes:
StudioAPI-Fixautopitchcuttingoffatzeroforparameterwithminimumvaluethatislessthanzero.StudioAPI-FixeventswithatranscievereffectnotallowingtheeventtostopAndroid-FixedcrashwhenloadingFSBsorBanksthatcontainasoundthatisn'tmono,stereo,5.1or7.1.Android-Fixedcompatibilityissuewithsomedevicesintroducedinpreviousreleaseduetor12bupdate.PresentsasaruntimelinkererrorwhenloadingtheFMODlibrary,failingtolocate__aeabi_atexit.iOS-Fixedstutteringduringfadeoutwhendevicescreengoestosleep.LowLevelAPI-FixFMOD_DSP_TRANSCEIVERmemorystomp.LowLevelAPI-Fixchannelsplayingatincorrectpitch.Introducedin1.08.10.
Notes:
StudioAPI-Incrementedbankversion,requiresruntime1.08.00orlater.StudioAPI-Latestruntimesupportsloadingoldbankversionsfrom1.03.00.LowLevelAPI-ImprovedvalidationforChannelGroup,DSPandSoundhandles,detectsinvalidpointersandusageafterrelease.
08/09/161.08.11-StudioAPIminorrelease(build79819)
Features:
LowLevelAPI-PS3-AddedsupportforFMOD_DSP_CHANNELMIX.Unity2-RespectGameViewmutebutton.
Fixes:
FSBank-Fixcrashon64-bitwhenencoding16kHzor24kHzsourcesusingVorbisatlowqualitysettings.LowLevelAPI-FixFMOD_SOUND_PCMSETPOS_CALLBACKgettinginvalidpositionvaluewhenasoundopenedwithFMOD_OPENUSERloops.LowLevelAPI-Android-Fixedcrashonloadwitholddeviceswhenusingarmeabi.Unity2-FixCREATESOUNDEXINFOnotgettingmarshalledproperly.
Notes:
Android-NowbuiltwithNDKr12b.Android-MinimumAndroidversionisnowAPIlevel9duetoNDKr12bdeprecatingolderversions.
22/08/161.08.10-StudioAPIminorrelease(build79252)
Features:
StudioAPI-Improvedperformanceofsidechainmodulator.LowLevelAPI-ImprovedChannelControl::setPitchaccuracybetweenDSPclockandtheunderlyingcodecdecodingspeed.Unity2-Addedoptionforplay-in-editortoreflecttheactivebuildtargetforloadingbanks.
Fixes:
LowLevelAPI-FixederrortryingtocreateaReturnDSPwhenthesystemformatissettoFMOD_SPEAKERMODE_RAW.LowLevelAPI-FixedFFTDSPcrashifwindowsizeissmallerthanDSPblocksize.LowLevelAPI-Removedspuriouswarningmessageswhenloadingpluginsonsomeplatforms.LowLevelAPI-Android-TweakedOpenSLautodetection,nowrequiresdevicetospecifylowlatencyandablocksize
channelcountwhenpassedFMOD_SPEAKERMODE_DEFAULT.NowworksevenifthesystemformatissettoFMOD_SPEAKERMODE_RAW.UE4-Canberecompiledwith4.13pre-release.Documentation-AddeddocumentationforFMOD_DSP_PANenums.
01/08/161.08.09-StudioAPIminorrelease(build78489)
Features:
LowLevelAPI-PS4-AddsupportforsocialscreenaudiototheportsAPI.StudioAPI-AddedStudio::EventInstance:setListenerMaskandStudio::EventInstance::getListenerMask,thataddstheabilitytospecifywhichlistenersapplytoeacheventinstance.Unity2-Warningisnowproducedwhenplayingineditorifthepositionofa3Deventisnotset.UE4-Addedblueprintfunctionstoseteventproperties.
Fixes:
StudioAPI-Fixedcaseofindeterminismwhenbuildingbanksthatcontaineventswithautomationcurves.LowLevelAPI-FixedFMOD_OUTPUT_OBJECT3DINFO::gainsoitonlyincludesdistanceattenuationnotbusgain(whichisnowpre-appliedtoFMOD_OUTPUT_OBJECT3DINFO::buffer.LowLevelAPI-FixedchannelmixDSPvolumenotalwaysbeinginitialized.LowLevelAPI-WiiU-FixedpotentialcrashduringSystem::initifSystem::setDriverorSystem::setOutputhasbeencalled.LowLevelAPI-Fixhangonnetstreamswhentheconnectiontimesout.LowLevelAPI-Linux-FixFPUcontrolwordofthecallingthreadbeingmodifiedwhentheFMODdynamiclibraryisloaded.LowLevelAPI-Android-FixedpotentialcrashifFMODisn'tloadedwithSystem.loadLibrary,nowapropererrorwillbeissued.FSBankAPI-FixedFADPCMnotloopingseamlesslyfornon-zerocrossingloops.UE4-Fixedpluginloadingassuminga"lib"prefixforpluginsonAndroid,Mac,LinuxandPS4.Nowpluginloadingwillattempttoloadthenamewithandwithoutaddingalibprefix.UE4-RespectFApp::IsUnattendedformessage-boxerrors.UE4-FixeddeprecationwarningsaboutAttachTousage.
Unity2-FixerrorswhenbanksourcefilesareupdatedwhileEventBrowserpreviewisplayingorpaused.Unity2-FixunnecessarycopyingofBankfilesinOSXeditor.
Notes:
LowLevelAPI-Linux-Removedlimitof32deviceswithALSAoutputmode.LowLevelAPI-IncrementedAPIversionofOutputplugins.Dynamiclibrarypluginsbuiltwithearlierversionsof1.08willcontinuetoload.
14/07/161.08.08-StudioAPIminorrelease(build77846)
Features:
UE4-bMatchHardwareSampleRatewillusethesystemdefaultformattoavoidexcessivelymatchingtheoutputrateonmobiledevices.UE4-AddedbLockAllBuseswhichwillforceallbusestobecreatedatstartup,ratherthanondemand.
Fixes:
StudioAPI-Fixedloopingsoundsinamultisoundplaylistfailingtostopifthemultisounditselfisnon-looping.StudioAPI-Fixedrarecrashcallingthefollowingfunctionswhilethebankcontainingtheeventisunloading:Studio::EventInstance::getDescription,Studio::EventInstance::getParameter,Studio::EventInstance::getParameterValue,Studio::EventInstance::setParameterValue,Studio::EventInstance::setParameterValueByIndex,Studio::EventInstance::triggerCue,Studio::ParameterInstance::getDescriptionandStudio::ParameterInstance::setValue.StudioAPI-Fixedsharedeventsbecominginvalidatedwhenoneofthebankscontainingthemisunloaded.CouldalsomanifestasStudio::EventInstance::getDescriptionfailingwithFMOD_ERR_INTERNAL.StudioAPI-FixedcrashthatcouldoccurwhenusingFMOD_STUDIO_INIT_SYNCHRONOUS_UPDATEandcallingStudio::System::updatefrommultiplethreadsatthesametime.StudioAPI-Increasedschedulinglookaheadtimetoensuresampleaccuratetimelineschedulingevenifthereisanoutputstall.StudioAPI-FixedcrashthatcouldoccurwhenimproperlycallingStudio::Bus::getChannelGroupwithoutfirstcallingStudio::Bus::lockChannelGroup,ifthebuswasbeingdestroyedasthecallwasmade.
StudioAPI-FixedrarecrashcallingthefollowingfunctionswhilethemasterbankcontainingthebusorVCAisunloading:Studio::System::getBus,Studio::System::getBusByID,Studio::System::getVCAandStudio::System::getVCAByID.StudioAPI-FixedraretimingissuewhereStudio::System::getEventwouldsucceedbutStudio::EventDescription::createInstancewouldfailwithFMOD_ERR_INTERNAL,ifcalledjustasthebankcontainingtheeventfinishedloading.StudioAPI-FixedrarehanginStudio::System::getBankCountwhencalledwhilebanksarecurrentlyunloading.LowLevelAPI-FixedrareglitchatthestartofXMAplaybackcausingnon-seamlesslooping.LowLevelAPI-Fixedrarehangonshutdownwhenusingmultiplesystems.LowLevelAPI-Fixstreamswithanunknownfilelengthremainingintheplayingstateafteranendoffileisencountered.LowLevelAPI-Windows-EnumerationofrecorddeviceswillnowreflectachangeofdefaultdevicewithWASAPIoutput.LowLevelAPI-Linux-EnumerationwillnowcorrectlydisplayGUIDsandspeakermodesforALSAoutput.LowLevelAPI-Linux-FixedpotentialcrashifbothPulseAudioandALSAaremissing/unavailable.Unity2-FixpluginloadingonLinuxstandalonebuilds.Unity2-Fixscriptcompilationerrorsinstandalonebuilds.Unity2-FixEventBrowserpreviewofeventswithbuilt-inparameters.Unity2-FixmissingtvOSfiles.
Notes:
LowLevelAPI-SignificantlyreducedmemoryconsumptionwhenusingFMOD_DSP_FFT.PS4-NowbuiltwithSDK3.508.101UE4-UpdatedOculuspluginto1.0.4.
27/06/161.08.07-StudioAPIminorrelease(build77241)
Features:
FSBankAPI-AddedsupportforLinux.Unity2-LiveUpdateandDebugOverlaycanbesettoonlybeenabledinstandalonebuildswhenthedevelopmentbuildoptionisset.Unity2-AddMuteAllEventsandPauseAllEventsfunctionstotheRuntimeManager.Unity2-Audiowillnowpausewhentheapplicationpauses.UE4-AddedMixerSuspendandMixerResumeblueprintfunctions.UE4-AddedIsBankLoadedblueprintfunction.
Fixes:
StudioAPI-FixedStudiocommandbufferassertandcrashthatcouldoccurwhenusingFMOD_STUDIO_INIT_SYNCHRONOUS_UPDATEinconjunctionwithmultiplethreads.LowLevelAPI-Fixcrashwhenclosingasystemwithamulti-pluginDLLstillloaded.LowLevelAPI-iOS/Android-Improvedaudiostabilitywhenmixerthreadisoverloaded.FSBankAPI-FixedcallingconventionlinkererroronWindowsinFSBankLibheader.FSBankAPI-Fixedissuewhenpassingduplicatesourcefileswithdifferentencodingsettingswouldcausecachefileconflicts.
Notes:
Unity2-Renamed"LevelStart"and"LevelEnd"triggersto"ObjectStart"and"ObjectDestroy"tomoreaccuratelyreflectwhenthetriggersoccur.
17/06/161.08.06-StudioAPIminorrelease(build76937)
Features:
Unity2-AddedframeworkforregisteringnativepluginsoniOSandtvOS.Unity2-AddedsupportforimportingStudioBanksasTextAssetssotheycanbeaddedtoUnityAssetBundles.
Fixes:
LowLevelAPI-Fixedcrashonshutdown,aftercreatingmultiplesystemsandsettingasystemcallback.LowlevelAPI-PS4-FixissueswithcallingFMOD_Orbis_GetPadVolume()immediatelyafteropeningthecontrolleraudioport.
15/06/161.08.05-StudioAPIminorrelease(build76824)
Features:
StudioAPI-AddedStudio::EventDescription::isSnapshot.Unity2-Added"PreloadSampleData"checkboxtoEventEmittertoreducelatencywhenemittersaretriggeredforthefirsttime.Unity2-AddedscriptexampletoshowhowtobuildanasynchronousloadingscreenthatincludesloadingFMODBanks.
Fixes:
StudioAPI-FixedStudio::EventDescription::isOneshot()incorrectlyreturningtrueforsnapshots.LowLevelAPI-FixFMOD_ADVANCEDSETTINGS::maxADPCMCodecsnotbeingapplied.LowLevelAPI-FixcrashwhenusingCreateSoundfrommultiplethreads(includingFMODAsyncloadingthreads).Unity2-FixissueswhenbankfileintheUnityprojectStreamingAssetsfolderhaveadifferentcasetothebanksintheStudioproject.Unity2-Fixissueswheneditorlogfilecannotbeopenedbecauseit'sreadonly.Unity2-Ifthe"LoadAll"optionsareselectedintheFMODSettingsthenthemainthreadwillnowblockuntilit'scomplete.UE4-FixforOnEventStoppedcallbackfiringrepeatedlyiftriggerstheinstancetoplayagain.
Notes:
LowLevelAPI-AllSystem,ChannelControl,ChannelGroup,Channel,andDSPAPIfunctionscheckforNaNandINFfloatsandreturnFMOD_ERR_INVALID_FLOATifdetected.StudioAPI-AllAPIfunctionscheckforNaNandINFfloatsandreturnFMOD_ERR_INVALID_FLOATifdetected.StudioAPI-AllAPIfunctionswithoutputparametersnowclearthose
valuesinthecaseofanerror.Previouslysomevaluesmayhavebeenleftuninitialized.Inthecaseofanerror,intandfloatoutputsaresetto0,booloutputsaresettofalse,andpointersaresettoNULL.Structuresareclearedtozeros,andstringbuffersaresettotheemptystring.
25/05/161.08.04-StudioAPIminorrelease(build76196)
Features:
StudioAPI-Addedruntimesupportforstealquietestpolyphony.LowLevelAPI-Improvedperformancewhenconnect