如何将字节数组转换为wav文件<oourafft> </oourafft>

时间:2011-02-15 19:11:36

标签: iphone objective-c audio fft

我想将字节数组转换为wav文件

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文件。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

如果你只有一个复杂的FFT程序,那么对于长度为N的复数向量X:

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

其中,比例通常为1 / N,1 / sqrt(N)或1.0,具体取决于正向FFT中使用的比例因子。

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

增加:

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