C # библиотека для аудио ресэмплинга, которая имеет те же возможности, что и FFmpeg

Я должен использовать чистое решение C # для передискретизации аудио, которое может дать мне те же самые результаты, что и FFmpeg.

FFmpeg сначала строит какой-то банк многофазных фильтров, а затем использует его для процесса выборки (извините за смутные выражения, но я не слишком знаком с этой темой). Согласно этому краткому документация, инициализация может быть настроена следующим образом:

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: длина каждого КИХ-фильтра в наборе фильтров относительно частоты среза
  • log2_phase_count: log2 количества записей в банке многофазных фильтров
  • линейный: если 1, то используемый FIR-фильтр будет линейно интерполирован между 2 ближайшими, если 0 будет использоваться ближайший
  • отрезать: частота среза, 1,0 соответствует половине частоты дискретизации на выходе

Мне нужно использовать библиотеку C #, которая настраивается на той же глубине. Я пытался использовать NAudio (более конкретно, его WaveFormatConversionStream класс), но там я мог только установить входную и выходную частоты дискретизации, поэтому я не получил ожидаемых результатов.

Итак, есть ли C # lib, которая может повторять выборку с теми же настройками, что и FFmpeg? Или тот, который имеет почти все эти настройки или подобные? Примечание: мне нужно решение на C #, а не оболочка!

3

Решение

В дополнение к WaveFormatConversionStream (который использует кодеки ACM), NAudio включает в себя другой ресэмплер, к которому можно получить доступ как объект мультимедиа DirectX (DMO) или (в последнем предварительном выпуске NAudio 1.7) как преобразование Media Foundation Transform. Они могут быть использованы в Windows Vista и выше. К сожалению, я думаю, что они не доступны в XP (но с тех пор, как я попробовал).

Найденная версия DMO находится в Resampler класс (есть также ResamplerDmoStream), а версия Media Foundation находится в MediaFoundationResampler, На самом деле они оба создают один и тот же базовый объект, но в версии MFT я добавил свойство под названием ResamplerQuality что позволяет вам выбирать в любом месте от 1 (линейная интерполяция) до 60 (максимальное качество). В Эта статья Я включил спектрограмму развертки синусоидальной волны, и вы увидите, что качество очень хорошее.

Вы можете легко сделать то же самое изменение в Resampler класс, если вы хотите пойти по маршруту DMO, так как он имеет доступ к IWMResamplerProps, который позволяет вам установить половину длины фильтра (это то же самое значение между 1 и 60).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]