我想将字节数组转换为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文件。
感谢您的帮助。
答案 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