2016-06-11 7 views
1

사운드 파일에 필터를 적용하는 응용 프로그램에서 작업 중이므로 필터는 주파수 도메인에 적용되므로이 코드의 NAudio 라이브러리를 사용하여 .wav 파일에서 샘플을 가져옵니다.WAV 파일 형식의 샘플 배열 float 배열

audio = new AudioFileReader(wav_file); 
samples = new float[wave.Length]; 
audio.Read(samples, 0, samples.Length); 

이전 코드를 적용한 후 이제 샘플을 float 배열로 가져온 다음 주파수 도메인 데이터를 가져 오는 샘플에 단시간 푸리에 변환을 적용한 다음 필터를 주파수 도메인에 적용합니다 데이터.
그리고 역 단시간 푸리에 변환이 주파수 도메인 데이터에 적용되어 초기 샘플과 유사해야하지만 필터가 적용된 시간 도메인으로 다시 변환됩니다. 다시
단계 :

  1. 가져 오기 샘플 (시간 도메인 데이터) WAV 파일에서 배열입니다.
  2. 주파수 도메인 데이터를 얻기 위해 샘플을 단시간 푸리에 변환합니다.
  3. 주파수 도메인 데이터에 필터를 적용하십시오.
  4. 주파수 도메인 데이터에 역 단시간 푸리에 변환을 적용하여 샘플을 얻습니다 (시간 도메인 데이터).
  5. 샘플을 다시 WAV 형식으로 변환하여 저장하고 재생하십시오.

이제 문제는 마지막 단계입니다. 샘플 (시간 도메인 데이터)의 float 배열을 가지고 있는데 어떻게 파일을 .wav 파일로 변환하고 재생합니까? .wav 파일로 샘플을 저장하기

+0

필요한 항목을 찾으려면 http://stackoverflow.com/questions/19715553/double-array-to-wav 또는 여기 http://stackoverflow.com/questions/9805407을 참조하십시오./정규화 - 오디오 - 변환 - 플로트 - 배열 - 투 - 바이트 배열 - 그것은 몇 가지 추가 단계가 있지만, 결국 그것이 wav 파일을 생성하는 데 필요한 모든 것을 가지고 있다고 생각합니다. – gmiley

답변

0

은 다음과 같은 코드가 사용된다 :

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

sampleRate, bitDepthchannels 같이 입력 파일로부터 추출된다

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

1 - ISampleProvider를 구현하는 클래스를 만듭니다. 2-이 코드를 사용하여 을 재생합니다 (ISourse는 ISampleProvider입니다)

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