[LAD] Suitable peak/RMS/etc. data for UI metering

David Robillard d at drobilla.net
Mon Jul 25 15:43:14 UTC 2011


Hello,

A new/upcoming LV2 extension (from Lars Luthman) includes facilities for
sending host-calculated metric data for audio ports to a UI, for
metering and such.  This is intended as a sane replacement for the
currently used kludge of having plugin control output ports provide this
information.

So, more DSP-minded folks, my question is: what data is required, and is
a reasonable compromise between overhead and expressiveness?  The
current revision has the following:

/**
   A data type that is used to pass peak and RMS values for
   a period of audio data at an input or output port to an
   UI, using port_event. See the documentation for
   pui:floatPeakRMS for details about how and when this
   should be done.
*/
typedef struct _LV2_PUI_Peak_RMS_Data {

    /**
       The start of the measurement period. This is just a
       running counter that must not be interpreted as any
       sort of global frame position. It should only be
       interpreted relative to the starts of other
       measurement periods in port_event() calls to the same
       plugin instance.

       This counter is allowed to overflow, in which case it
       should just wrap around.
    */
    uint32_t period_start;

    /**
       The size of the measurement period, in the same units
       as period_start.
    */
    uint32_t period_size;

    /**
       The peak value for the measurement period. This
       should be the maximal value for abs(sample) over all
       the samples in the period.
    */
    float peak;

    /**
       The RMS value for the measurement period. This should
       be the root mean square value of the samples in the
       period, equivalent to sqrt((pow(sample1, 2) +
       pow(sample2, 2) + ... + pow(sampleN, 2)) / N) where N
       is period_size.
    */
    float rms;

} LV2_PUI_Peak_RMS_Data;

Thanks,

-dr




More information about the Linux-audio-dev mailing list