2011-02-15 61 views
1

我想字節數組轉換爲WAV文件如何字節數組轉換爲WAV文件<OOURAFFT>

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

您的意思是你想將它轉換回時域嗎?如果是的話,那麼你的fft庫肯定有一個用於頻譜到時域轉換的逆fft方法。 (wav文件是音頻文件格式的標準,與從頻譜到時域的轉換無關) – 2011-02-16 11:55:14

+0

而順便說一句,「process`myFFT.inputData [i]`」你的意思是做fft變換,對...? – 2011-02-16 11:56:21

回答

0

如果使用FFT將時域數據轉換爲頻域數據,則可以使用逆FFT或IFFT將複數頻域數據轉換回時域。

如果只有一個複雜的FFT例程,那麼對於長度爲N的復矢量X:

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

其中規模,通常爲1/N,1/SQRT(N),或1.0,這取決於在正向FFT中使用的比例因子。

請注意,波形文件標題還包含通道數您可能必須執行一些數據(反)交錯以及數據類型轉換。根據計算機的ISA,Endianess也可能是一個問題。

ADDED:

假設每個PCM樣本合適的數據類型,以及用於立體聲/單聲道適當的交織,則可以使用規範的.wav(RIFF)文件格式中添加/刪除44個字節中的該描述頭文件: WAVE PCM soundfile format

相關問題