# Clarification on how getMeteringInfo works

**URL:** <https://qa.fmod.com/t/clarification-on-how-getmeteringinfo-works/23649>\
**Category:** FMOD Engine\
**Tags:** cpp, ue5\
**Created:** [November 15, 2025, 6:42pm UTC](https://qa.fmod.com/t/clarification-on-how-getmeteringinfo-works/23649 "2025-11-15T18:42:54Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![AndreaGiaccone](https://avatars.discourse-cdn.com/v4/letter/a/67e7ee/32.png) [@AndreaGiaccone](https://qa.fmod.com/u/AndreaGiaccone)\
**Post date:** [November 15, 2025, 6:42pm UTC](https://qa.fmod.com/t/clarification-on-how-getmeteringinfo-works/23649/1 "2025-11-15T18:42:54Z")

</div>

Hi everyone,  
I’m trying to understand in detail how `FMOD::DSP::getMeteringInfo` works in the Core API.  
I need the RMS level of an FMOD event to modify the size of a mesh in real time, but the values I’m getting are unclear.

Here’s the code I’m using for testing in Unreal:

```auto
float UPRFileUtility::TestFMODModulation(UFMODAudioComponent* InAudioComp)
{
    FMOD::ChannelGroup* ChanGroup = nullptr;
    InAudioComp->StudioInstance->getChannelGroup(&ChanGroup);
    if (ChanGroup)
    {
        FMOD::DSP* ChanDSP = nullptr;
        ChanGroup->getDSP(FMOD_CHANNELCONTROL_DSP_HEAD, &ChanDSP);
        if (ChanDSP)
        {
            ChanDSP->setMeteringEnabled(true, false);

            FMOD_DSP_METERING_INFO prelevels = {};
            ChanDSP->getMeteringInfo(&prelevels, 0);

            if (prelevels.numsamples > 0)
            {
                float sum = 0;
                for (int i = 0; i < 32; i++)
                {
                    if (prelevels.rmslevel[i] > 0)
                    {
                        sum += prelevels.rmslevel[i];
                        UE_LOG(LogTemp, Error, TEXT("rmslevel: %f at index %d"), prelevels.rmslevel[i], i);
                    }
                }

                UE_LOG(LogTemp, Warning, TEXT("sum: %f and numsample: %d"), sum, prelevels.numsamples);
                return sum / 32.f;
            }
        }
    }

    return -1.f;
}

```

 ![PrelevelsRMS](https://canada1.discourse-cdn.com/flex036/uploads/fmod/original/2X/e/e39bb444c409f259e8ee395e0ea931320fa38834.png)

As you can see in the image, only a few indeces of the array contain values different from 0, yet in Unreal Engine the sound that’s playing is perfectly audible.

Would it be possible to get more detailed information about how`FMOD::DSP::getMeteringInfo` works?

Thanks in advance!

---

<div class="post-metadata">

**Author:** ![jeff\_fmod](https://yyz2.discourse-cdn.com/flex036/user_avatar/qa.fmod.com/jeff_fmod/32/1766_2.png) [@jeff\_fmod](https://qa.fmod.com/u/jeff_fmod)\
**Post date:** [November 18, 2025, 6:02am UTC](https://qa.fmod.com/t/clarification-on-how-getmeteringinfo-works/23649/2 "2025-11-18T06:02:52Z")

</div>

The [`FMOD_DSP_METERING_INFO`](https://fmod.com/docs/2.02/api/plugin-api-dsp.html#fmod_dsp_metering_info) RMS values are the per-channel RMS of the buffer at that point in time. Most of them are going to be zero, unless you have 32 channels playing.  
The channel layout depends on your [`FMOD_SPEAKERMODE`](https://fmod.com/docs/2.02/api/core-api-common.html#fmod_speakermode), if you are using `FMOD_SPEAKERMODE_SURROUND` then these values mean:

| FL [0] | FR [1] | C [2] | SL [3] | SR [4] |
| --- | --- | --- | --- | --- |
| 0.000000 | 0.005351 | 0.000790 | 0.000000 | 0.000000 |

Or if you are using `FMOD_SPEAKERMODE_QUAD` then these values mean:

| FL [0] | FR [1] | SL [3] | SR [4] |
| --- | --- | --- | --- |
| 0.000000 | 0.005351 | 0.000790 | 0.000000 |
