2011-02-15 70 views
1

我想字节数组转换为WAV文件如何字节数组转换为WAV文件<OOURAFFT>

MyAudioFile *audioFile = [[MyAudioFile alloc]init]; 
OSStatus result = [audioFile open:@"MySound" ofType:@"wav"]; 
int numFrequencies=16384; 
int kNumFFTWindows=10; 

OouraFFT *myFFT = [[OouraFFT alloc] initForSignalsOfLength:numFrequencies*2 andNumWindows:kNumFFTWindows]; 
for(long i=0; i<myFFT.dataLength; i++) 
{ 
    myFFT.inputData[i] = (double)audioFile.audioData[i];  
} 

然后我处理myFFT.inputData[i]去除背景噪音,但我不知道如何myFFT.inputData[i]转换回到一个wav文件。

谢谢你的帮助。

+0

您的意思是你想将它转换回时域吗?如果是的话,那么你的fft库肯定有一个用于频谱到时域转换的逆fft方法。 (wav文件是音频文件格式的标准,与从频谱到时域的转换无关) – 2011-02-16 11:55:14

+0

而顺便说一句,“process`myFFT.inputData [i]`”你的意思是做fft变换,对...? – 2011-02-16 11:56:21

回答

0

如果使用FFT将时域数据转换为频域数据,则可以使用逆FFT或IFFT将复数频域数据转换回时域。

如果只有一个复杂的FFT例程,那么对于长度为N的复矢量X:

IFFT(X) = scale * complexConjugate(FFT(complexConjugate(X))) 

其中规模,通常为1/N,1/SQRT(N),或1.0,这取决于在正向FFT中使用的比例因子。

请注意,波形文件标题还包含通道数您可能必须执行一些数据(反)交错以及数据类型转换。根据计算机的ISA,Endianess也可能是一个问题。

ADDED:

假设每个PCM样本合适的数据类型,以及用于立体声/单声道适当的交织,则可以使用规范的.wav(RIFF)文件格式中添加/删除44个字节中的该描述头文件: WAVE PCM soundfile format