Repository navigation
v0.3.0
0.3.0 (2026-10-29)
0.3.0 settles the names of the API before 1.0.0. It changes how web programs link (#163), and the Core Audio and WASAPI object renderers read the new position type (#152); the other backends change only by name. The device checklist on real hardware is waived by the owner for releases through 2026-10-29, so 0.3.0 ships on its other gates, and the checklist runs against it in #161. The golden renders and the office bake are unchanged.
Changed
- Breaking: the API follows the Maul family's naming rule. A call on one object is named
maudObject_Verb, after the kind of its first id or the root it takes (maudStream_Start,maudContext_GetDevices,maudDevice_GetInfo). Creation, destruction, defaults and calls on no object keepmaudVerbNoun(maudCreateStream,maudDefaultStreamDef). Callback and hook types end inFunction, the acoustic scene ismaudScenethroughout, a field that counts things ends inCount, times are in seconds with no unit in the name, and a def field that switches a part on isenableThing(#165). A program renames each call, type and field by the tables below, and also:- moves the arguments of the three calls marked reordered.
maudProbeSet_GetInfoandmaudRotateAmbisoniceach move twouint32_targuments, so a call left in the old order still compiles: check each one; - declares a variable or field that holds a stream callback as
maudStreamFunction*.maudStreamCallbackwas a pointer type;maudStreamFunctionis a function type; - gives
maudVoiceDetectorDef.hangoverin seconds as afloat(0.2 for the old 200 milliseconds), andmaudEchoCancellerDef.tailTimein seconds as before.
- moves the arguments of the three calls marked reordered.
- Breaking:
maudStreamObject.positionis amaudVector3instead offloat[3], like every other position in the API. Writeposition.x,.yand.zinstead ofposition[0],[1]and[2]. Its frame, its default and its layout are unchanged (#152). - Breaking:
maudDirectEffectDef.sampleRate,maudReverbDef.sampleRateandmaudSpatializerDef.reflectionRateareuint32_tinstead offloat, like every other sample rate, defaulting to 48000. Their ranges are unchanged (#151). - Breaking:
MAUD_DIRECT_BANDSisMAUD_BANDS. It sizes every per-band array of the Spatial part, not only the direct path's. The count stays 3 (#154). - Breaking:
maudLimits.streams,devices,notificationsanddeviceTextBytesareuint32_tinstead ofuint16_t. The new constantsMAUD_MAX_STREAMS,MAUD_MAX_DEVICES,MAUD_MAX_NOTIFICATIONSandMAUD_MAX_DEVICE_TEXT_BYTEScap them at 65,535, the most the old fields held, andmaudCreateContextrefuses a limit past its constant withmaud_errorLimit. Every value accepted before is accepted as before (#153). - The voice detector still counts its hangover in 10 ms steps, and a hangover in the upper half of a step now rounds up to the next one instead of down: 207 ms used to give 200 ms and now gives 210 ms. The default, 0.2 seconds, is unchanged. A voice application that set its own hangover may hear speech held one step longer (#165).
Renamed functions
| Old | New | |
|---|---|---|
maudResumeContext |
maudContext_Unlock |
|
maudSetContextSuspended |
maudContext_SetSuspended |
|
maudGetContextBackend |
maudContext_GetBackend |
|
maudGetContextMisuse |
maudContext_GetMisuse |
|
maudGetDevices |
maudContext_GetDevices |
|
maudGetDefaultDevice |
maudContext_GetDefaultDevice |
|
maudGetDeviceInfo |
maudDevice_GetInfo |
|
maudGetDeviceName |
maudDevice_GetName |
|
maudGetDeviceKey |
maudDevice_GetKey |
|
maudRequestFocus |
maudContext_RequestFocus |
|
maudGetContextFocus |
maudContext_GetFocus |
|
maudNextNotification |
maudContext_NextNotification |
|
maudRenderObjects |
maudStream_RenderObjects |
|
maudSetOfflineDefaultDevice |
maudDevice_SetOfflineDefault |
reordered: (context, role, device) to (context, device, role) |
maudSetOfflineDeviceForm |
maudDevice_SetOfflineForm |
|
maudSetOfflineDeviceFormat |
maudDevice_SetOfflineFormat |
|
maudSetOfflineDeviceSpatializer |
maudDevice_SetOfflineSpatializer |
|
maudStartStream |
maudStream_Start |
|
maudStopStream |
maudStream_Stop |
|
maudGetStreamFormat |
maudStream_GetFormat |
|
maudGetStreamStatus |
maudStream_GetStatus |
|
maudGetStreamPosition |
maudStream_GetPosition |
|
maudGetStreamClock |
maudStream_GetClock |
|
maudRenderStream |
maudStream_Render |
|
maudFeedStream |
maudStream_Feed |
|
maudDecodeBinaural |
maudBinauralDecoder_Decode |
|
maudResetBinauralDecoder |
maudBinauralDecoder_Reset |
|
maudGetSpeakerDecoderMatrix |
maudSpeakerDecoder_GetMatrix |
|
maudDecodeToSpeakers |
maudSpeakerDecoder_Decode |
|
maudProcessBinaural |
maudBinaural_Process |
|
maudResetBinaural |
maudBinaural_Reset |
|
maudProcessDirect |
maudDirectEffect_Process |
|
maudResetDirectEffect |
maudDirectEffect_Reset |
|
maudGetHrtfInfo |
maudHrtf_GetInfo |
|
maudProcessReverb |
maudReverb_Process |
|
maudResetReverb |
maudReverb_Reset |
|
maudGetAcousticSceneMisuse |
maudAcousticScene_GetMisuse |
|
maudCommitAcousticScene |
maudAcousticScene_Commit |
|
maudMoveSceneInstance |
maudSceneInstance_Move |
|
maudGetSpeakerGains |
maudSpeakerPanner_GetGains |
|
maudPanToSpeakers |
maudSpeakerPanner_Pan |
|
maudGetSpatializerMisuse |
maudSpatializer_GetMisuse |
|
maudSetSourcePose |
maudSource_SetPose |
|
maudGetDirectResult |
maudSource_GetDirectResult |
|
maudSimulateDirect |
maudSpatializer_SimulateDirect |
|
maudSimulateReverb |
maudSpatializer_SimulateReverb |
|
maudSetMaterials |
maudSpatializer_SetMaterials |
|
maudLatchResults |
maudSpatializer_LatchResults |
|
maudRenderReflections |
maudSpatializer_RenderReflections |
|
maudGetReverbResult |
maudSpatializer_GetReverbResult |
|
maudGetProbeSet |
maudProbeSet_GetInfo |
reordered: (spatializer, set, infoOut, first, count, points) to (spatializer, set, first, infoOut, pointsOut, count) |
maudSetPathing |
maudProbeSet_UseForPathing |
|
maudUseBakedReverb |
maudProbeSet_UseBakedReverb |
|
maudBakeProbeSet |
maudProbeSet_Bake |
|
maudSaveProbeSet |
maudProbeSet_Save |
|
maudDetectVoice |
maudVoiceDetector_Detect |
|
maudApplyGainControl |
maudGainControl_Apply |
|
maudSuppressNoise |
maudNoiseSuppressor_Suppress |
|
maudCancelEcho |
maudEchoCanceller_Cancel |
|
maudAddOfflineDevice |
maudCreateOfflineDevice |
|
maudRemoveOfflineDevice |
maudDestroyOfflineDevice |
|
maudSceneAnyHit |
maudFindAnyHit |
|
maudSceneClosestHit |
maudFindClosestHit |
|
maudResultName |
maudGetResultName |
|
maudRotateAmbisonic |
maudRotateAmbisonic |
reordered: (order, from, to, bed, frames) to (bed, frames, order, from, to) |
Renamed types
| Old | New |
|---|---|
maudStreamCallback |
maudStreamFunction |
maudAnyHitFn |
maudAnyHitFunction |
maudClosestHitFn |
maudClosestHitFunction |
maudTaskFn |
maudTaskFunction |
maudEnqueueTaskFn |
maudEnqueueTaskFunction |
maudFinishTaskFn |
maudFinishTaskFunction |
Renamed scene names
| Old | New |
|---|---|
maudAcousticScene |
maudScene |
maudAcousticSceneDef |
maudSceneDef |
MAUD_ACOUSTIC_SCENE_DEF_COOKIE |
MAUD_SCENE_DEF_COOKIE |
maudDefaultAcousticSceneDef |
maudDefaultSceneDef |
maudCreateAcousticScene |
maudCreateScene |
maudDestroyAcousticScene |
maudDestroyScene |
maudAcousticScene_Commit |
maudScene_Commit |
maudAcousticScene_GetMisuse |
maudScene_GetMisuse |
maudInstanceTransform |
maudSceneInstanceTransform |
Renamed fields
| Old | New |
|---|---|
maudVoiceDetectorDef.hangoverMilliseconds (uint32_t, milliseconds) |
hangover (float, seconds) |
maudEchoCancellerDef.tailSeconds |
tailTime |
maudHrtfInfo.taps |
tapCount |
maudProbeSetInfo.probes |
probeCount |
maudProbeSetInfo.links |
linkCount |
maudReverbResult.estimates |
estimateCount |
maudDirectResult.surfaces |
surfaceCount |
maudDeviceInfo.spatialObjects |
spatialObjectCount |
maudStreamBlock.objectsAvailable |
availableObjectCount |
maudBinauralDef.nearField |
enableNearField |
maudReverbDef.tail |
enableTail |
maudSourceDef.transmission |
enableTransmission |
maudSourceDef.pathing |
enablePathing |
Fixed
- Web: a context or effect too large for the page's memory returns
maud_errorCapacityinstead of aborting the whole module withAborted(OOM). A program that links the library through CMake, from the build tree or the installed package, now links with-sABORTING_MALLOC=0; any other build links with it or with-sALLOW_MEMORY_GROWTH=1, as the web section of the platforms guide says. A program that relied on the abort now gets NULL from its own failed allocations (#163).