Как применить выравнивание звука с помощью NAudio

#c# #.net #ffmpeg #naudio #resampling

Вопрос:

У меня есть приложение WPF, которое выполняет следующее:

  1. Импортирует видеофайлы.
  2. Извлекает аудио из файла с помощью FFmpeg.
  3. Выполняет повторную выборку звука с помощью NAudio в соответствии с механизмом преобразования речи в текст (16 кГц/16 бит/Моно).
  4. Воспроизводит видео для пользователей с наложенными субтитрами.
  5. Позволяет пользователям исправлять ошибки, которые мог совершить движок STT.

Простая повторная выборка с помощью NAudio:

 using (var reader = new WaveFileReader(fileAudioTemp.FullName))
{
    var outFormat = new WaveFormat(16000, 16, 1);
    //var outFormat = WaveFormat.CreateIeeeFloatWaveFormat(16000, 1);

    using (var resampler = new MediaFoundationResampler(reader, outFormat))
    {
        resampler.ResamplerQuality = 60; // Highest Quality in MF.
        WaveFileWriter.CreateWaveFile(fileAudio.FullName, resampler);
    }
}
 

Проблема в том, что эти видео имеют крайне плохое качество звука. Звук приглушенный, басовитый, и из-за него очень трудно разобрать имена людей, мест и т. Д. Это затрудняет и отнимает у пользователей много времени для проверки текста. Пожалуйста, обратите внимание, что двигатель STT не имеет с этим проблем и на удивление точен, учитывая качество.

То, что я хотел бы сделать, — это применить к этому звуку выравнивание. Я обнаружил, что встроенная SKA предустановка в VLC, похоже, немного облегчает пользователям понимание того, что говорится.

Настройки эквалайзера VLC

Есть ли способ использовать FFmpeg (Xabe) или предпочтительно NAudio для применения такого фильтра? Это так как же? Я видел много примеров манипуляций со звуковыми буферами, но искал более простой способ, такой как предустановленный файл или параметры, которые можно было бы передать в повторители.

Любые указания будут оценены по достоинству.

Комментарии:

1. ffmpeg имеет несколько фильтров эквалайзера: ffmpeg.org/ffmpeg-filters.html