iphone - 如何将字节数组转换为 wav 文件 <OOURAFFT>

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

感谢您的任何帮助。

最佳答案

如果使用 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/

相关文章:

iphone - iPhone和数据库之间的抽象层

ios - 如何在 map View 中拖动注释图钉?

HTML5 音频播放器在加载时发出多个 GET 请求。为什么?

c++ - Windows 8 将流传递给 IMFSourceReader

iphone - 计算 UILabel 和 UIButtons 的大小来造句?

iphone - 我是否需要保护 iPhone 上的数据结构免受回调和计时器的影响?

Iphone - 已弃用的功能...它们会让 iPhone 崩溃吗?

objective-c - 检查 SKNode 是否在屏幕上且可见

iOS/objective-C : Correct Way of Obtaining Meta Class Object

ios - 无法在 iOS 锁定屏幕上显示播放器控件