我想将字节数组转换为 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文件。感谢您的任何帮助。
最佳答案
如果使用 FFT 将时域数据转换为频域数据,则可以使用逆 FFT 或 IFFT 将复杂的频域数据转换回时域。
如果您只有一个复数 FFT 例程,那么对于长度为 N 的复数向量 X:
IFFT(X) = scale * complexConjugate(FFT(complexConjugate(X)))
其中比例通常为 1/N、1/sqrt(N) 或 1.0,具体取决于前向 FFT 中使用的比例因子。
请注意,波形文件头还包含 channel 数您可能需要进行一些数据(去)交错以及数据类型转换。 Endianess 也可能是一个问题,具体取决于您计算机的 ISA。
添加:
假设每个 PCM 样本都有合适的数据类型,并且立体声/单声道有适当的交错,您可以使用规范 .wav (RIFF) 文件格式的此描述来添加/删除 44 字节的 header :
WAVE PCM soundfile format
关于iphone - 如何将字节数组转换为 wav 文件 <OOURAFFT>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5008365/