【问题标题】:Loudness Normalisation LUFS in C# with NAudio使用 NAudio 在 C# 中进行响度归一化 LUFS
【发布时间】:2023-01-14 21:42:26
【问题描述】:

我正在寻找有关如何使用 NAudio 进行响度标准化 (LUFS EBU128) 的信息。

我需要读取可能是单声道/立体声/多声道的 .wav 文件(而不是播放它们)并获取它们的响度值,我实际上不需要修改文件就可以获取值。我阅读改编自 NAudio 示例之一的文件没有问题:

    private static void ReadWavFile(FileInfo inputFile)
    {
        using (var inAudio = new WaveFileReader(inputFile.FullName))
        {
            //Calculate required byte[] buffer.
            var buffer = new byte[10 * inAudio.WaveFormat.AverageBytesPerSecond];//Assume average will be constant for WAV format.

            int index = 0;
            do
            {
                int bytesRead = 0;
                do
                {
                    bytesRead = inAudio.Read(buffer, 0, buffer.Length - bytesRead);
               
                } while (bytesRead > 0 && bytesRead < buffer.Length);

                index++;
            } while (inAudio.Position < inAudio.Length);
        }
    }

但是我找不到如何在 NAudio 中进行响度归一化部分。是否可以 ?

如果不可能,我还找到了其他工具,但它们要求使用双[][] 缓冲区,而 NAudio 提供字节[] 或浮点[] 缓冲区。可以转换吗?

谢谢 !

【问题讨论】:

    标签: c# audio buffer wav naudio


    【解决方案1】:

    我认为,不同之处在于 NAudio 提供了一个交错数组。如果这是一个立体声缓冲区,那么第一个样本将用于左声道,下一个样本将用于右声道。因此,要进行此转换,您只需创建一个新的锯齿状数组,其中每个数组的长度是原始数组长度的一半,然后将每个样本移动到正确的锯齿状数组中。

    var jaggedArray = new double[numberOfChannels][];
    
    for(int i = 0; i < numberOfChannels; ++i)
    {
      jaggedArray[i] = new double[source.Length / numberOfChannels];
    }
    
    for(int i = 0; i < source.Length; i += numberOfChannels)
    {
     for(int j = 0; j < numberOfChannels; ++j)
     {
        jaggedArray[j][i / numberOfChannels] =  source[i + j];
      }
    }
    

    希望这对你有帮助,即使它有点晚了。

    【讨论】:

      猜你喜欢
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 2016-07-22
      • 2013-03-08
      相关资源
      最近更新 更多