Насколько я знаю, DirectSound не выполняет полосовую фильтрацию, как вы описали здесь.
Общая идея, лежащая в основе полосовой фильтрации, заключается в использовании линий задержки, которые принимают выходной сигнал и направляют его обратно во входной поток с заданным временем задержки и коэффициентом затухания (или затухания). Тщательный дизайн фильтра позволит вам усилить или ослабить определенные диапазоны частот в вашем аудиоисточнике. Обратите внимание, что этот метод не использует БПФ, за исключением случаев, когда это возможно диагностический инструмент при тестировании эффектов фильтра. Методы БПФ выполняют более точную работу по ограничению или усилению частот, но линии задержки, как правило, быстрее (и намного проще для кодирования).
Для обработки файла WAV (в отличие от выполнения синтеза / фильтрации в реальном времени) выполнение строки задержки в вашем аудиобуфере так же просто, как:
for (int i = 0; i < samples.Length - delay; i++)
{
samples[i + delay] += samples[i] * decay;
}
На практике это немного сложнее, чем это (например, вам приходится иметь дело с потенциальными значениями переполнения, и некоторые типы линий задержки должны выполняться в обратном порядке, что всегда является проблемой при кодировании в стиле C), конечно.
Насколько точен фильтр, зависит только от того, насколько хорошо он спроектирован (это очень сложно). Когда вы разрабатываете фильтр с использованием линий задержки, вы, по сути, делаете то же самое, что инженеры-электрики делали (и продолжают делать) за десятилетия до появления дешевых микропроцессоров.