gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:46:01 24 4
gpt4 key购买 nike

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

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

AVResampleContext* av_resample_init(
int out_rate,
int in_rate,
int filter_length,
int log2_phase_count,
int linear,
double cutoff
)

参数是:

  • out_rate: 输出采样率
  • in_rate:输入采样率
  • filter_length:滤波器组中每个FIR滤波器相对于截止频率的长度
  • log2_phase_count:多相滤波器组中条目数的log2
  • 线性:如果为 1,则使用的 FIR 滤波器将在最接近的 2 个之间线性插值,如果为 0,则使用最接近的滤波器
  • cutoff:截止频率,1.0对应输出采样率的一半

我需要使用可在相同深度配置的 C# 库。我一直在尝试使用 NAudio(更具体地说,它的 WaveFormatConversionStream 类),但是在那里,我只能设置输入和输出采样率,所以我没有得到预期的结果。

那么,有没有可以使用与 FFmpeg 相同的设置重新采样的 C# 库?还是具有几乎所有这些设置或类似设置的?注意:我需要 C# 解决方案,而不是包装器!

最佳答案

除了 WaveFormatConversionStream(使用 ACM 编解码器)之外,NAudio 还包括另一个可以作为 DirectX 媒体对象 (DMO) 访问的重采样器,或者(在 NAudio 1.7 的最新预发布版中)作为媒体基金会转型。这些可以在 Windows Vista 及更高版本中使用。遗憾的是,我认为它们在 XP 中不可用(但自从我尝试以来已经有一段时间了)。

找到的DMO版本在Resampler类中(还有一个ResamplerDmoStream),Media Foundation Version在MediaFoundationResampler中。它们实际上都创建了相同的底层对象,但在 MFT 版本上我添加了一个名为 ResamplerQuality 的属性,它允许您在 1(线性插值)和 60(最大质量)之间进行选择。在 this article我包括了一个重新采样的正弦波扫描的频谱图,你会发现质量非常好。

如果您想走 DMO 路线,您可以轻松地对 Resampler 类进行相同的更改,因为它可以访问 IWMResamplerProps。 ,它允许您设置半滤波器长度(1 到 60 之间的相同值)。

关于具有与 FFmpeg 相同功能的音频重采样 C# 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16121635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com