Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何将字节数组转换为wav文件<;OOURAFFT>;_Iphone_Objective C_Audio_Fft - Fatal编程技术网

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

Iphone 如何将字节数组转换为wav文件<;OOURAFFT>;,iphone,objective-c,audio,fft,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:numFreque

我想将字节数组转换为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];    
}
MyAudioFile*audioFile=[[MyAudioFile alloc]init];
OSStatus结果=[audioFile open:@“MySound”的类型:@“wav”];
整数频率=16384;
int kNumFFTWindows=10;
OouraFFT*myFFT=[[OouraFFT alloc]初始长度:numfrequences*2和numindows:kNumFFTWindows];

对于(长i=0;i如果使用FFT将时域数据转换为频域数据,则可以使用逆FFT或IFFT将复频域数据转换回时域

如果只有复数FFT例程,则对于长度为N的复数向量X:

IFFT(X) = scale * complexConjugate(FFT(complexConjugate(X)))
其中,根据前向FFT中使用的比例因子,比例通常为1/N、1/sqrt(N)或1.0

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

增加:

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

你的意思是你想把它转换回时域吗?如果是的话,那么你的fft库肯定有一个用于频谱到时域转换的逆fft方法。(wav文件是音频文件格式的标准,它与从频谱到时域的转换无关)顺便说一句,“process
myFFT.inputData[i]
”你的意思是做fft变换,对吧…?是的,我的意思是我想把我用过的-(void)doift{rdft(self.dataLength,-1,self.inputData,ip,w);self.dataIsFrequency=NO;}转换到时域,但我不知道这个过程的结果,也不知道如何将它转换到wav文件或播放它。谢谢myfft.inputData[i]这不是FFT函数转换这是我的项目谢谢你hotpaw2我使用了“”的源代码,在文件“OouraFFT.m”中有函数-(void)doift{rdft(self.dataLength,-1,self.inputData,ip,w);self.dataIsFrequency=NO;}我已经做了这个函数,但我对doIFFT的结果有一些问题(我不知道如何将此文件转换为Wav文件)再次感谢您的帮助。对不起,我的英语太差了。