R128Net

R128Netは、EBU R128とITU-R BS.1770のラウドネス測定を.NETで使えるようにしたライブラリです。原典のCより高速に動きます。
原典との照合を済ませており、マネージドヒープも確保しません。

ブラウザーで試せます。導入は要らず、音声は外部へ送りません。


導入

dotnet add package R128Net

使い方

次のプログラムは、ステレオの1 kHzの正弦波(-23 dBFS)を20秒分、100ミリ秒ずつ測定器へ投入します。そのあと、統合ラウドネスとラウドネスレンジとトゥルーピークを読み出します。出力は、-23.0 LUFS、0.0 LU、-23.0 dBTPです。

using R128Net;

const int SampleRate = 48000;
const int BlockFrames = SampleRate / 10;

using LoudnessMeter meter = new(channels: 2, SampleRate,
    LoudnessModes.Integrated | LoudnessModes.LoudnessRange | LoudnessModes.TruePeak);

float[] block = new float[2 * BlockFrames];
for (int n = 0; n < 200; ++n)
{
    for (int i = 0; i < BlockFrames; ++i)
    {
        float value = (float)(0.0708 * Math.Sin(2.0 * Math.PI * 1000.0 * ((n * BlockFrames) + i) / SampleRate));
        block[2 * i] = value;
        block[(2 * i) + 1] = value;
    }

    meter.AddFrames(block);
}

Console.WriteLine($"Integrated loudness: {meter.IntegratedLoudness:F1} LUFS");
Console.WriteLine($"Loudness range: {meter.LoudnessRange:F1} LU");
Console.WriteLine($"True peak: {20.0 * Math.Log10(meter.GetTruePeak(0)):F1} dBTP");

できること

特長

リンク