현재 VS2012에 메트로 앱을 사용 중입니다. 나는 사용자의 음성을 녹음하고 wav 파일 (16 비트, 44.1kHz, 모노)에 저장하는 C# 코드를 가지고있다. 아래에 표시된대로 -1과 1 사이의 값을 갖는 double 배열 데이터 만 포함하도록 pcm을 처리했습니다.pcm 데이터에 FFT 적용 및 스펙트로 그램으로 변환
다음 단계는 이중 배열 데이터에 FFT를 적용하여 스펙트로 그램으로 변환하는 것입니다. 라이브러리를 사용하지 않고 이중 배열을 사용하는 FFT 알고리즘이 있는지 알고 싶습니다.
이 데이터 (FFT 적용 후)를 메트로를 사용하는 스펙트로 그램 (나중에 다른 스펙트로 그램과 비교하는 데 사용됨)으로 변환하는 방법이 있는지 알고 싶습니다.
주파수를 가져 와서 시각적으로 보여주기 위해 FFT를 적용하는 데 사용하려는 double 배열 값 중 일부의 예입니다.
이것은 내 pcm 데이터를 처리하는 코드입니다.
public static Double[] prepare(String wavePath)
{
Double[] data;
byte[] wave;
byte[] sR = new byte[4];
System.IO.FileStream WaveFile = System.IO.File.OpenRead(wavePath);
wave = new byte[WaveFile.Length];
data = new Double[(wave.Length - 44)/4];//shifting the headers out of the PCM data;
WaveFile.Read(wave, 0, Convert.ToInt32(WaveFile.Length));//read the wave file into the wave variable
/***********Converting and PCM accounting***************/
for (int i = 0; i < data.Length; i ++)
{
data[i] = BitConverter.ToInt16(wave, i*2)/32768.0;
}
//65536.0.0=2^n, n=bits per sample;
return data;
}
편집 * 이 내 출력 *
-3.0517578125E-05
-3.0517578125E-05
-3.0517578125E-05
-3.0517578125E-05
-6.103515625E-05
-9.1552734375e-05
-6.103515625e-05 -6.103515625E 05
-6.103515625E 05
-6.103515625E 05
-9.1552734375E 05
-6.103515625E 05
-9.1552734375E 05
-6.103515625E 05
-9.1552734375E-05
-6.103515625E-05
두 번째 숫자가 모두 0 인 이유를 알고 계십니까? 이상하게 보입니다. – thalm
확실하지 않습니다. 나도 좀 이상해. 어쩌면 내가 만약 내가 pcm 데이터를 처리하기 위해 사용하는 코드를 넣어 준다면, 나를 가리킬 수있다. –
2를 늘리고 데이터 [i]에 쓰기 만하면 모든 두 번째 필드에만 쓸 수있다. 너는 하나씩 늘려야 해. 예 : i ++를 사용하고 BitConverter.ToInt16 (wave, i * 2)을 사용하여 바이트를 읽습니다. 그리고 나는 또한 왜 데이터를 읽을 때 PCM 헤더의 오프셋을 고려하지 않는지 궁금합니다. 44에서 시작해야 할까? – thalm