導入
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");
できること
- 瞬時、短期、統合のラウドネス。EBU R128とITU-R BS.1770の定義に従います。
- ラウドネスレンジ。EBU Tech 3342の定義に従います。
- 相対閾値と、設定した最大の窓までの、任意の窓のラウドネス。
- サンプルピークとトゥルーピーク。
- ヒストグラムアルゴリズムと、複数の測定器を一つの値へ集約する機能。
- 16ビット整数、32ビット整数、単精度、倍精度の入力。
特長
- 計測したどのモードも、原典のCより高速です。表は、説明書の性能の節にあります。
- マネージドヒープを確保しません。ガベージコレクションが、測定の経路を目にすることはありません。
- MSVCでビルドした原典と照合済みです。テストでは、ラウドネスとピークが原典とビット単位で一致します。
- .NET 10で、WindowsとLinuxのx64とARM64でテスト済みです。Native AOTにも対応し、同梱するネイティブライブラリはありません。
リンク
- 説明書: 動作要件、APIリファレンス、制限事項。
- NuGetのパッケージ
- リリース
- libebur128: Jan Kokemüller氏による原典です。