用于音频重采样的C#库,具有与FFmpeg相同的功能

用于音频重采样的C#库,具有与FFmpeg相同的功能,c#,c++,c,ffmpeg,naudio,C#,C++,C,Ffmpeg,Naudio,我必须使用纯C#解决方案对音频进行重新采样,这可以产生与FFmpeg的音频采样完全相同的结果 FFmpeg首先构建某种多相滤波器组,然后将其用于采样过程(抱歉措辞含糊不清,但我对这个主题不太熟悉)。根据本简介,可以通过以下方式自定义初始化: AVResampleContext*av\u resample\u init( 积分率, 国际单位汇率, int filter_长度, int log2_相位_计数, int线性, 双截止 ) 参数包括: 输出率:输出采样率 输入速率:输入采样速率 滤波

我必须使用纯C#解决方案对音频进行重新采样,这可以产生与FFmpeg的音频采样完全相同的结果

FFmpeg首先构建某种多相滤波器组,然后将其用于采样过程(抱歉措辞含糊不清,但我对这个主题不太熟悉)。根据本简介,可以通过以下方式自定义初始化:

AVResampleContext*av\u resample\u init(
积分率,
国际单位汇率,
int filter_长度,
int log2_相位_计数,
int线性,
双截止
)
参数包括:

  • 输出率:输出采样率
  • 输入速率:输入采样速率
  • 滤波器长度:滤波器组中每个FIR滤波器相对于截止频率的长度
  • log2\u相位\u计数:多相滤波器组中条目数的log2
  • 线性:如果为1,则使用的FIR滤波器将在最接近的2个滤波器之间线性插值,如果为0,则使用最接近的滤波器
  • 截止:截止频率1.0对应于输出采样率的一半
我需要使用一个在相同深度下可配置的C#库。我一直在尝试使用NAudio(更具体地说,是它的
波形转换流
类),但在那里,我只能设置输入和输出采样率,因此没有得到预期的结果


那么,是否有一个C#lib可以使用与FFmpeg相同的设置重新采样?或者一个几乎有所有这些设置或类似设置的?注意:我需要的是C#解决方案,而不是包装器代码>波形格式转换流< /代码>(使用ACM编解码器)之外,NAODE还包括另一个可作为DirectX媒体对象(DMO)访问的重采样器,或者(在NoAudio 1.7的最新版本中)作为媒体基础转换。这些可以在Windows Vista及更高版本中使用。可悲的是,我认为它们在XP中不可用(但自从我尝试以来已经有一段时间了)

DMO版本发现在<代码> ReSpuler-<代码>类(也有<代码> ReSAMPrRDMOSWATOR),MediaFoundation版本在<代码> MediaFoundationResampler < /代码>中。它们实际上都创建了相同的底层对象,但在MFT版本中,我添加了一个名为
ResamplerQuality
的属性,允许您在1(线性插值)和60(最大质量)之间进行选择。在本文中,我将包括一个重采样正弦波扫描的spectrogram,您将看到质量非常好


如果您想走DMO路线,可以很容易地对重采样器类进行相同的更改,因为它可以访问,这允许您设置半过滤器长度(1和60之间的值相同)。

libsoxr是用C编写的,但它是一个独立的重采样器,移植起来应该比查看整个ffmpeg更容易。谢谢你的建议。如果我最终需要从头开始写的话,我也会检查这个选项。很抱歉回复得太晚,但我当时正试图解决同一个项目的另一个问题,我不想把这两件事混为一谈。因此,我尝试了MFT版本,得到的结果与原始版本非常接近,但我认为我仍然需要移植原始FFmpeg代码。我甚至迭代了所有可能的重采样质量值,以查看结果中有多少与预期相同,因为我希望出现奇迹:P