2016-06-11 6 views
1

Я работаю над приложением, которое применяет фильтры к звуковым файлам, фильтры применяются в частотной области, поэтому я получаю образцы из .wav-файла, используя библиотеку NAudio с этим кодом:Float массив образцов в формате WAV

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

  1. Получить образцы (данные временной области) массив из файла WAV.
  2. Применить кратковременное преобразование Фурье на выборках для получения данных в частотной области.
  3. Применение фильтров для данных частотной области.
  4. Применять обратное кратковременное преобразование Фурье на данные частотной области для получения выборок (данные временной области).
  5. Конвертировать образцы в wav-форму обратно, чтобы сохранить и воспроизвести его.

Теперь проблема в последнем шаге, у меня есть массив с плавающей точкой образцов (данные во временной области), как мне преобразовать его в WAV-файл и воспроизвести его?

+0

Вы должны быть в курсе, что вы можете здесь: http://stackoverflow.com/questions/19715553/double-array-to-wav - или здесь: http://stackoverflow.com/questions/9805407/normalizing-audio-how-to-convert-a-float-array-to-a-by-array - у него есть несколько дополнительных шагов, но я думаю, что к концу он имеет все, что необходимо для создания вашего wav-файла. – gmiley

ответ

0

Чтобы сохранить образцы в виде файла .wav, используется следующий код:

WaveFormat waveFormat = new WaveFormat(sampleRate, bitDepth, channels); 
using (WaveFileWriter writer = new WaveFileWriter("C:\\track1.wav", waveFormat)) 
{ 
    writer.WriteSamples(floatOutput, 0, floatOutput.Length); 
} 

sampleRate, bitDepth и channels извлекаются из входного файла, как это:

sampleRate = wave.WaveFormat.SampleRate; 
bitDepth = wave.WaveFormat.BitsPerSample; 
channels = wave.WaveFormat.Channels; 
0

1 - создать класс, который реализует ISampleProvider 2- использовать этот код для воспроизведения (sourse is ISampleProvider)

  var xs = new NAudio.Wave.SampleProviders.SampleToWaveProvider16(source); 
       var l = new NAudio.Wave.WaveOut(); 
       l.Init(xs); 
       l.Play();